Frage

ich zur Zeit AudioRecord auf Audio aufnimmt in vom Mikrofon von einem Android-Gerät verwenden und dann Rohr, das direkt auf eine Audiotrack, der es aus der Hörmuschel von einem Android-Gerät spielt.

Ich frage mich, kann ich das gleiche, aber mit den Mediaplayer und MediaRecorder Klassen statt, als ich die AMR-NB-Codierung verwenden müssen, die auf den Medien-Klassen zur Verfügung steht und nicht die Audio-Klassen.

Mein Problem mit MediaRecorder und Mediaplayer ist, dass es scheint, als ob ich in eine Datei aufnehmen und dann für diese Datei abspielen?

Das ist nicht das, was ich tun möchte, ist es trotzdem, den Audio-Sound von Mic-Hörmuschel zu streamen mit den Medien Klassen?

Mein Code, um die Audio-Klassen ist unten, ist es möglich, etwas das gleiche mit dem Mediaplayer und MediaRecorder?

zu tun
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);
                     }  
    }
}
War es hilfreich?

Lösung

Nein, zu diesem Zeitpunkt nicht; Es ist eine wohlbekannte Begrenzung des MediaPlayer dass Bytestrom Eingänge werden nicht unterstützt. Sie würden immer noch eine Datei oder einen URI Eingangsquelle benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top