【发布时间】:2013-08-21 04:48:34
【问题描述】:
我在线程中使用以下代码从麦克风捕获原始音频样本并通过扬声器播放。
public void run(){
short[] lin = new short[SIZE_OF_RECORD_ARRAY];
int num = 0;
// am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); // -> MOVED THESE TO init()
// am.setMode(AudioManager.MODE_IN_COMMUNICATION);
record.startRecording();
track.play();
while (passThroughMode) {
// while (!isInterrupted()) {
num = record.read(lin, 0, SIZE_OF_RECORD_ARRAY);
for(i=0;i<lin.length;i++)
lin[i] *= WAV_SAMPLE_MULTIPLICATION_FACTOR;
track.write(lin, 0, num);
}
// /*
record.stop();
track.stop();
record.release();
track.release();
// */
}
其中record 是AudioRecord,track 是Audiotrack。我需要详细了解(如果可能,以简化的方式)AudioRecord 如何存储 PCM 数据以及 AudioTrack 如何播放 PCM 数据。到目前为止,我是这样理解的:
随着while()循环的不断运行,record获得了SIZE_OF_RECORD_ARRAY个样本(目前为1024),如图。样本连续保存在 lin[] 短裤数组中(16 位短裤,因为我使用的是 16 位 PCM 编码)。这是由record.read() 完成的。然后track.write() 将这些样本放在由硬件播放的扬声器中。这是正确的还是我在这里遗漏了什么?
【问题讨论】:
标签: android audio audiorecord audio-processing audiotrack