Android - Могу ли я сделать это с помощью MediaRecord / MediaPlayer вместо AudioRecord / Track?
-
19-09-2019 - |
Вопрос
В настоящее время я использую AudioRecord для записи звука с микрофона устройства Android, а затем передаю его непосредственно на аудиотрек, который воспроизводит его в наушнике устройства 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.