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