Android - Могу ли я сделать это с помощью MediaRecord / MediaPlayer вместо AudioRecord / Track?

StackOverflow https://stackoverflow.com/questions/2238714

Вопрос

В настоящее время я использую AudioRecord для записи звука с микрофона устройства Android, а затем передаю его непосредственно на аудиотрек, который воспроизводит его в наушнике устройства Android.

Мне интересно, могу ли я сделать то же самое, но вместо этого с классами MediaPlayer и MediaRecorder, поскольку мне нужно использовать кодировку AMR-NB, которая доступна в классах Мультимедиа, а не в аудиоклассах.

Моя проблема с MediaRecorder и MediaPlayer заключается в том, что кажется, что я должен записывать в файл, а затем воспроизводить для этого файла?

Это не то, что я хочу сделать, есть ли способ передавать аудио с микрофона на наушник с помощью медиаклассов?

Мой код, использующий аудиоклассы, приведен ниже, возможно ли сделать что-то то же самое с MediaPlayer и MediaRecorder?

public class Record extends Thread
 {

    static final int bufferSize = 200000;
    final short[] buffer = new short[bufferSize];
    short[] readBuffer = new short[bufferSize];

    public void run() {  
      isRecording = true;
      android.os.Process.setThreadPriority
      (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

      int buffersize = AudioRecord.getMinBufferSize(11025,
      AudioFormat.CHANNEL_CONFIGURATION_MONO,
      AudioFormat.ENCODING_PCM_16BIT);


                     arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
                                     11025,
                                     AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                     MediaRecorder.AudioEncoder.AMR_NB,
                                     buffersize);
                     atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
                                     11025,
                                     AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                     MediaRecorder.AudioEncoder.AMR_NB,
                                     buffersize,
                                     AudioTrack.MODE_STREAM);

                     Log.d("AUDIO", "sample rate = : " + arec.getSampleRate());

                     atrack.setPlaybackRate(11025);

                     byte[] buffer = new byte[buffersize];
                     arec.startRecording();
                     atrack.play();

                     while(isRecording) {
                             arec.read(buffer, 0, buffersize);
                             atrack.write(buffer, 0, buffer.length);
                     }  
    }
}
Это было полезно?

Решение

Нет, не в данный момент;это хорошо известное ограничение MediaPlayer эти входные данные потока байтов не поддерживаются.Вам все равно понадобится файл или источник ввода URI.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top