Question

J'utilise actuellement audiorecord pour enregistrer l'audio à partir du microphone d'un dispositif applications puis tuyau directement à un AudioTrack qui joue le Ecouteur d'un dispositif applications.

Je me demande ce que je peux faire la même chose, mais avec les classes MediaPlayer et MediaRecorder à la place que je dois utiliser le codage AMR-NB qui est disponible sur les classes de médias et pas les classes audio.

Mon problème avec MediaRecorder et MediaPlayer est qu'il semble que je dois enregistrer dans un fichier, puis jouer pour ce fichier?

Ce n'est pas ce que je veux faire, est de toute façon pour diffuser le son audio de Mic à Oreillette avec les classes de médias?

Mon code en utilisant les classes audio est ci-dessous, est-il possible de faire quelque chose la même chose avec le MediaPlayer et 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);
                     }  
    }
}
Était-ce utile?

La solution

Non, pas à ce moment; il est une limitation bien connue de MediaPlayer que les entrées de flux d'octets ne sont pas pris en charge. Vous auriez encore besoin d'une source d'entrée fichier ou URI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top