Android: запись голоса и сохранение звука

Я работаю над приложением, которое запишет голос пользователя и сохранит файл на 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){




}

2 ответа

Решение

Пример документации по захвату звука с использованием MediaRecorder приведен в документации разработчика Android.

Я бы порекомендовал сохранить файлы на SD-карте, а затем попросить код галереи проверить SD-карту, чтобы увидеть, какие файлы отображать. Вы можете получить каталог SD-карты с помощью метода Environment.getExternalStorageDirectory(). Было бы лучше сохранить ваши файлы в подкаталоге корневого каталога SD-карты.

Убедитесь, что вы даете своим приложениям необходимые разрешения. По крайней мере, для этого потребуются RECORD_AUDIO и WRITE_EXTERNAL_STORAGE.

Также вы должны увидеть эти уроки:

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

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

Если вы действительно хотите записывать звук через API распознавания речи, тогда вы можете использовать RecognitionService.Callback, у которого есть метод

void bufferReceived(byte[] buffer)

Это дает вам доступ к записанному аудиобуферу во время записи и распознавания речи. (Информация о частоте дискретизации не предоставляется.) Затем вы можете сохранить полученные буферы в файл для последующего воспроизведения. Я думаю, что клавиатурные приложения используют этот вызов для отображения формы волны записанной речи. Вы должны реализовать пользовательский интерфейс самостоятельно.

Голые RecognizerIntent.ACTION_RECOGNIZE_SPEECH просто возвращает набор слов / фраз без звука.