我目前正在尝试录制用户所说的音频,以便他们可以稍后播放它以及使用Google语音转文本API,以便我可以对API返回的单词进行分析。似乎麦克风可以专门与Google语音转文本一起使用,也可以录制。我可以分别执行这两项操作,但是当我尝试在我的Android应用程序上一起运行它们时,该应用程序将停止语音转文本,并仅开始录音。我在后台线程中运行音频记录,同时在主 UI 线程中运行语音转文本。它现在看起来像这样:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// set up Speech to Text Recognizer
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizer.setRecognitionListener(this);
//Set up Recording functionality
bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
buffer = new byte[bufferSize];
//Set up Record Button
record = (ToggleButton) findViewById(R.id.record);
record.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){ //record
Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak!");
i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.example");
mSpeechRecognizer.startListening(i);
// end speech to text
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, 2048);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
saveAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
您无法识别语音并同时使用录音机录制语音,因为对麦克风的访问是唯一的。可以执行的操作是运行识别并从识别器获取记录的数据并对其进行处理。为此,您可以使用语音识别器的 onBufferReceived 方法,该方法应为您提供音频进行处理。但是,由于Google实现中的错误,并不总是调用此方法,因此它不是很可靠。您可以查看详细信息
捕获发送到谷歌语音识别服务器的音频
如果要同时捕获和识别,则可能需要考虑其他语音识别实现,例如CMUSphinx,您可以在其中实际访问识别器输入。