我目前有一个Loop回程序,用于在Android设备上测试音频。Android - 如何将我自己的音频编解码器添加到AudioRecord?
它使用AudioRecord和AudioTrack从麦克风录制PCM音频并将PCM音频播放到耳机中。
下面是代码:
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,
AudioFormat.ENCODING_PCM_16BIT,
buffersize);
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
buffersize,
AudioTrack.MODE_STREAM);
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);
}
}
}
所以你可以在创建AudioTrack的看到和AudioRecord编码是通过提供的AudioFormat但只允许16位或8位PCM。
我现在有我自己的G711编解码器实现,我希望能够对来自Mic的音频进行编码并将其解码为EarPiece,所以我有encode(short lin [],int offset,byte enc [ ],int帧)和decode(byte enc [],short lin [],int frames)方法,但我不确定如何使用它们来编码和解码来自AudioRecord和AudioTrack的音频。
任何人都可以帮助我或指向正确的方向吗?
嗨唐纳,你可以更新这个问题与你做的最终实施,请求?我已经好几天尝试在G711中进行编码/解码,但没有成功。如果我们能看到你是怎么做的,那会是太棒了......我遇到了很多与这个问题有关的问题。谢谢 – 2014-04-25 07:16:19
嗨胡安,恐怕我不再有最终的解决方案了,这是我长期留下的一个项目的一部分,不再有或者不能记住解决方案的代码,致歉。 – 2014-05-28 15:31:46