我目前有一個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