現在、Androidデバイスでオーディオをテストするためのループバックプログラムがあります。
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コーデックを実装しており、マイクからのオーディオをエンコードして、EarPieceにデコードできるようにしたいので、encode(short lin []、int offset、byte enc []、int frame)を使用します。およびdecode(byte enc []、short lin []、int frame)メソッドですが、これらを使用してAudioRecordおよびAudioTrackからのオーディオをエンコードおよびデコードする方法がわかりません。
誰かが私を助けたり、正しい方向に向けたりできますか?