在安卓系统中混合扬声器和麦克风的音频

3
我正在尝试录制来自麦克风的声音,并将其与后台运行的音调进行采样。
为了更清楚地说明,我想在后台运行一个音调,当我从麦克风发出一些噪音时,它应该与已经播放的背景音调混合。
最终输出应该是播放的音调和麦克风信号(即噪音)的混合。我该如何实现呢?
我参考了stackoverflow上的这篇文章Android : recording audio using audiorecord class play as fast forwarded来记录来自麦克风的数据。但我需要同时记录背景音调和麦克风输入。
public class StartRecording {

    private int samplePerSec = 8000;

    public void Start(){
        stopRecording.setEnabled(true);
        bufferSize = AudioRecord.getMinBufferSize(samplePerSec, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        audioRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, this.samplePerSec, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize * 10);
        audioRecorder.startRecording();
        isRecording = true;


        while (isRecording && audioRecorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING)
        {
            short recordedData[] = new short[bufferSize];
            audioRecorder.read(recordedData, 0, recordedData.length);      // Reading from the audiorecorder
            byte[] bData = shortTobyte(recordedData);
        }
    }
}

private byte[] shortTobyte(short[] recordedData) {
    int tempBuff = recordedData.length;
    byte[] bytes = new byte[tempBuff * 10];

    for (int i = 0; i < tempBuff; i++) {
        bytes[i * 2] = (byte) (recordedData[i] & 0x00FF);
        bytes[(i * 2) + 1] = (byte) (recordedData[i] >> 8);
        recordedData[i] = 0;
    }
    return bytes;

}

提前感谢你...


如何实现这个? - param
1个回答

0
你必须同时使用AudioTrack和AudioRecord。 然后,将来自AudioRecord的所有缓冲区混合到你的音调中(谷歌上有一些算法可以混合两个音频信号),并写入AudioTrack。
如果你不使用耳机,会出现延迟和回声等问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接