Android - Posso farlo con MEDIARECORD / MediaPlayer invece di AudioRecord / traccia?
-
19-09-2019 - |
Domanda
Attualmente uso AudioRecord per registrare l'audio in dal microfono di un dispositivo Android e poi tubo che direttamente a un AudioTrack che gioca fuori il ricevitore di un dispositivo Android.
Mi chiedo posso fare lo stesso, ma con le classi MediaPlayer e MediaRecorder invece come ho bisogno di usare la codifica AMR-NB che è disponibile sulle classi media e non le classi audio.
Il mio problema con MediaRecorder e MediaPlayer è che sembra che devo registrare in un file e poi giocare per quel file?
Questo non è quello che voglio fare, c'è comunque per lo streaming l'audio dal microfono al ricevitore telefonico con le classi media?
Il mio codice utilizzando le classi audio è al di sotto, è possibile fare qualcosa lo stesso con il 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);
}
}
}
Soluzione
No, non in questo momento; è un limite ben noto di MediaPlayer
che ingressi flusso di byte non sono supportati. Farebbe ancora bisogno di un file o una sorgente di ingresso URI.