为了账号安全,请及时绑定邮箱和手机立即绑定

记录/保存来自语音识别意图的音频

记录/保存来自语音识别意图的音频

红颜莎娜 2019-10-10 16:53:10
在问这个问题之前,我检查了所有与该问题相关的所有stackoverflow其他线程,但均未成功,因此,请不要回答指向其他线程的链接,:)我想保存/记录谷歌识别服务用于语音到文本操作的音频(使用RecognizerIntent或SpeechRecognizer)。我经历了很多想法:来自RecognitionListener的onBufferReceived:我知道,这不起作用,只需对其进行测试以查看会发生什么,并且永不调用onBufferReceived(在JB 4.3的银河系连接上进行了测试)使用了媒体记录器:无法正常工作。它打破了语音识别。麦克风只能执行一项操作尝试在语音执行到文本api之前将识别服务保存到临时音频文件的位置,以将其复制,但是没有成功我快要绝望了,但我只是注意到Google Keep应用程序正在做我需要做的事情!!!!我使用logcat调试了一些keep应用程序,该应用程序还调用了“ RecognizerIntent.ACTION_RECOGNIZE_SPEECH”(就像我们,开发人员一样)来触发语音到文本。但是,如何保存音频呢?可以是隐藏API吗?谷歌是“作弊” :)吗?谢谢您的帮助最好的祝福
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

@Kaarel的答案几乎是完整的-产生的音频已经intent.getData()可以使用读取ContentResolver


不幸的是,返回的AMR文件质量很低-我找不到能够获得高质量记录的方法。除“ audio / AMR”外,我尝试过的任何值在中都返回null intent.getData()。


如果您找到获取高质量录音的方法-请发表评论或添加答案!


public void startSpeechRecognition() {

   // Fire an intent to start the speech recognition activity.

   Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

   // secret parameters that when added provide audio url in the result

   intent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR");

   intent.putExtra("android.speech.extra.GET_AUDIO", true);


   startActivityForResult(intent, "<some code you choose>");

}


// handle result of speech recognition

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

    // the resulting text is in the getExtras:

    Bundle bundle = data.getExtras();

    ArrayList<String> matches = bundle.getStringArrayList(RecognizerIntent.EXTRA_RESULTS)

    // the recording url is in getData:

    Uri audioUri = data.getData();

    ContentResolver contentResolver = getContentResolver();

    InputStream filestream = contentResolver.openInputStream(audioUri);

    // TODO: read audio file from inputstream

}


查看完整回答
反对 回复 2019-10-10
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信