В настоящее время я использую AudioRecord для записи звука с микрофона устройства Android, а затем передаю его прямо на AudioTrack, который воспроизводит его через наушник устройства Android.
Мне интересно, могу ли я сделать то же самое, но с классами MediaPlayer и MediaRecorder, вместо этого, поскольку мне нужно использовать кодировку AMR-NB, доступную для классов Media, а не для классов Audio.
Моя проблема с MediaRecorder и MediaPlayer заключается в том, что мне кажется, что мне нужно записать в файл, а затем воспроизвести для этого файла?
Это не то, что я хочу сделать, есть ли в любом случае потоковая передача звука с микрофона на динамик с помощью классов Media?
Мой код, использующий классы Audio, приведен ниже, возможно ли сделать то же самое с MediaPlayer и 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);
}
}
}