Android - Я могу сделать это с MediaRecord/MediaPlayer вместо AudioRecord/Track?

Я в настоящее время использую AudioRecord, чтобы записать аудио в от микрометра устройства на базе Android и затем передать это по каналу прямо к AudioTrack, который играет его Наушник устройства на базе 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);
                     }  
    }
}
5
задан Donal Rafferty 10 February 2010 в 17:32
поделиться

1 ответ

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

3
ответ дан 15 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: