Pergunta

Eu uso atualmente AudioRecord para gravar áudio a partir do microfone de um dispositivo Android e, em seguida, tubo que direto para um AudioTrack que joga o fone de ouvido de um dispositivo Android.

Eu estou querendo saber que eu posso fazer o mesmo, mas com as classes MediaPlayer e MediaRecorder vez que eu precisar usar a codificação AMR-NB que está disponível nas classes de mídia e não as classes de áudio.

O meu problema com MediaRecorder e MediaPlayer é que parece que eu tenho que gravar em um arquivo e, em seguida, jogar para esse arquivo?

Este não é o que eu quero fazer, é lá de qualquer maneira para transmitir o som de áudio do microfone para Fone de ouvido com as classes de mídia?

Meu código usando as classes de áudio está abaixo, é possível fazer alguma coisa o mesmo com o MediaPlayer e 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);
                     }  
    }
}
Foi útil?

Solução

Não, não neste momento; é uma limitação bem conhecida de MediaPlayer que as entradas de fluxo de bytes não são suportados. Você ainda precisa de um arquivo ou fonte de entrada URI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top