gpt4 book ai didi

android - 在android中混合来自扬声器和麦克风的音频

转载 作者:太空狗 更新时间:2023-10-29 15:09:43 24 4
gpt4 key购买 nike

我正在尝试录制麦克风的声音。声音是根据背景中运行的音调采样的。

为了清楚起见,我想在背景中运行一个音调,当我从麦克风发出一些噪音时,这应该与已经播放的背景音调混合。

最终输出应该是播放的音调和来自麦克风的信号(噪声)的混合。我怎样才能做到这一点。

我指的是帖子 Android : recording audio using audiorecord class play as fast forwarded在 stackoverflow 中记录来自麦克风的数据。但我需要记录背景音以及麦克风输入。

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;

}

提前致谢...

最佳答案

您必须同时使用 AudioTrack 和 AudioRecord。然后来自 AudioRecord 的所有缓冲区必须与您的音调混合(谷歌上有一些混合 2 个音频信号的算法)并写入 AudioTrack。

如果您不使用耳机,您将遇到延迟和一些回声问题。

关于android - 在android中混合来自扬声器和麦克风的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com