我试图录制麦克风的声音。根据背景中运行的音调对声音进行采样。
为了说清楚我想在背景中运行一个音调,当我从麦克风发出一些声音时,这应该与已播放的背景音调混合。
最终输出应该是播放的音调和来自麦克风的信号(噪声)的混合。我怎样才能做到这一点。
我指的是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;
}
提前致谢...
答案 0 :(得分:0)
您必须同时使用AudioTrack和AudioRecord。 然后来自AudioRecord的所有缓冲区必须与你的音调混合(谷歌有一些算法混合2个音频信号)并写入AudioTrack。
如果您不使用耳机,则会出现延迟和回声问题。