jmm*_*jmm 5 audio encoding android google-speech-api
我正在尝试通过以下演示在 Android 中实现 Google Speech API:https : //github.com/GoogleCloudPlatform/android-docs-samples
通过使用位于 R.raw 中的给定“audio.raw”文件,我能够在我的应用程序中成功重现该示例,并且一切正常。但是,当我尝试使用自己的音频文件时,它返回“API 成功”而没有任何转录文本。我不确定它是否与文件的路径或编码有关,因此我将包含两者的信息以防万一。
我的音频文件是通过 MediaRecorder 录制语音获得的。这些是设置:
myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_WB);
myAudioRecorder.setAudioSamplingRate(16000);
myAudioRecorder.setAudioEncodingBitRate(16000);
myAudioRecorder.setAudioChannels(1);
myAudioRecorder.setOutputFile(outputFile);
Run Code Online (Sandbox Code Playgroud)
API 中 SpeechService 的 identifyInputStream() 函数:
mApi.recognize(
RecognizeRequest.newBuilder()
.setConfig(RecognitionConfig.newBuilder()
.setEncoding(RecognitionConfig.AudioEncoding.AMR_WB) //originally it was LINEAR16
.setLanguageCode("en-US")
.setSampleRateHertz(16000)
.build())
.setAudio(RecognitionAudio.newBuilder()
.setContent(ByteString.readFrom(stream))
.build())
.build(),
mFileResponseObserver);
Run Code Online (Sandbox Code Playgroud)
谷歌编码指南:https : //cloud.google.com/speech/docs/best-practices
据我了解,我可以使用 AMR_WB 和 16kHz 而不是默认的 LINEAR16,我只是不确定我是否做得对。
这是完全可用的示例(使用来自 repo 的音频文件):
mSpeechService.recognizeInputStream(getResources().openRawResource(R.raw.audio));
Run Code Online (Sandbox Code Playgroud)
但是,即使使用完全相同的文件,以下选项都不起作用:
InputStream inputStream = new URL("[website]/test/audio.raw").openStream();
mSpeechService.recognizeInputStream(inputStream);
Run Code Online (Sandbox Code Playgroud)
两者都不:
Uri uri = Uri.parse("android.resource://[package]/raw/audio");
InputStream inputStream = getActivity().getContentResolver().openInputStream(uri); //"getActivity()" because this is in a Fragment
mSpeechService.recognizeInputStream(inputStream);
Run Code Online (Sandbox Code Playgroud)
需要明确的是,上述路径的结果与我的自定义音频文件的结果相同:“API 成功”,没有转录。我为我的自定义音频文件尝试过的选项之一,发生了同样的事情,是这样的:
FileInputStream fis = new FileInputStream(filePath);
mSpeechService.recognizeInputStream(fis);
Run Code Online (Sandbox Code Playgroud)
我不能 100% 确定问题出在路径中的唯一原因是,如果 API 成功返回,则在指定路径中找到了该文件。问题应该是编码,但奇怪的是,以不同方式发送的同一个文件(“audio.raw”)会产生不同的结果。
无论如何,先谢谢你!:)
编辑:
需要明确的是,它并不是在转录中返回空字符串。它只是从未进入演示中也存在的“onSpeechRecognized”功能,因此没有提供转录。
归档时间: |
|
查看次数: |
963 次 |
最近记录: |