Android - ¿Puedo hacer esto con MediaRecord / MediaPlayer en lugar de AudioRecord / pista?
-
19-09-2019 - |
Pregunta
Actualmente uso AudioRecord para grabar audio desde el micrófono de un dispositivo Android y luego tubería que directamente a un AudioTrack el que se reproduce el auricular de un dispositivo Android.
Me pregunto puedo hacer lo mismo pero con las clases MediaPlayer y MediaRecorder en cambio, como que necesito para usar la codificación AMR-NB que está disponible en las clases de medios y no las clases de audio.
Mi problema con MediaRecorder y MediaPlayer es que parece como si tuviera que grabar en un archivo y luego jugar para ese archivo?
Esto no es lo que quiero hacer, es allí de todos modos para transmitir el sonido de audio del micrófono del auricular a los medios de comunicación con las clases?
Mi código usando las clases de audio está por debajo, ¿es posible hacer algo lo mismo con el MediaPlayer y 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);
}
}
}
Solución
No, no en este momento; se trata de una limitación conocida de MediaPlayer
que los insumos flujo de bytes no son compatibles. Usted aún necesita un archivo o una fuente de entrada URI.