安卓:语音录制和保存音频

9

我正在开发一款应用程序,它将记录用户的语音并将文件保存在SD卡上,然后允许用户再次听取音频。

我能够使用RecognizerIntent让用户录制自己的声音,但我无法弄清如何保存音频文件并允许用户听取音频。如果有人能帮我解决这个问题,我将不胜感激。下面是我的代码:

    // Setting up the onClickListener for Audio Button
    attachVoice = (Button) findViewById(R.id.AttachVoice_questionandanswer);
    attachVoice.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        voiceIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Please Speak");
        startActivityForResult(voiceIntent, VOICE_REQUEST);
        }
    });

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


  if(requestCode == VOICE_REQUEST && resultCode == RESULT_OK){




}

你想录制声音还是使用语音识别API? - K_Anas
我想录制声音。使用 RecognizerIntent 不可能吗? - RagHaven
这是不可能的,Recognizer Intent 是用于文本到语音识别的。 - K_Anas
那完全是另一个功能。 - K_Anas
不要重复提问!您昨天已经在以下链接中基本上询问了同样的问题:http://stackoverflow.com/questions/10900697/android-replaying-clip-recorded-by-voice-recognition - Chris Stratton
是否可以启动一个后台服务,该服务实现了MediaRecorder来录制麦克风输入,同时在另一个活动中运行RecognizerIntent.ACTION_RECOGNIZE_SPEECH? - Jordan Hochstetler
2个回答

8

Android开发文档中有一个使用MediaRecorder进行音频捕获的示例。

我建议将文件保存在SD卡上,然后让您的图库代码检查SD卡以查看要显示哪些文件。您可以使用Environment.getExternalStorageDirectory()方法获取SD卡的目录。最好将文件保存在SD卡根目录的子目录中。

确保为您的应用程序授予它所需的权限。至少需要RECORD_AUDIOWRITE_EXTERNAL_STORAGE权限。

此外,您还需要参考以下教程:

http://www.androiddevblog.net/android/android-audio-recording-part-1

http://www.androiddevblog.net/android/android-audio-recording-part-2


能否使用 RecognizerIntent 实现这个功能?我想使用它,因为它具有更好的用户界面,看起来更好。 - RagHaven
没有使用recognizerIntent进行语音识别!!当你说话时,手机将会把你的语音识别成一系列字符,然后为你获取相应的数据。 - K_Anas
“MediaRecorder” 在这里似乎不起作用,因为在使用时会在语音识别中生成错误。 - PeakGen

2
如果你真的想通过语音识别API录制音频,那么你可以使用RecognitionService.Callback,它有一个方法。
void bufferReceived(byte[] buffer)

这使您可以在录制和识别语音时访问记录的音频缓冲区。(虽然没有提供有关采样率的信息。)然后,您可以将获取的缓冲区保存到文件以进行以后的播放。我认为键盘应用程序使用此调用来显示录制语音的波形。您必须自己实现用户界面。
裸的RecognizerIntent.ACTION_RECOGNIZE_SPEECH只返回一组单词/短语,而没有任何音频。

文档中对于bufferReceived方法有指定字节序,但是声音采样率则取决于具体实现。 - toadzky
此方法并非每个设备都会调用,因此您不能依赖它。在那些调用此方法的设备上,数据的采样率通常为8KHz。 - escape-llc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接