我正在尝试从麦克风录制声音然后播放,但我在这里只是一声咔哒声。 AudioTrack和AudioRecord都在相同的设置上,并正确初始化。这是我的代码:
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isRecording = false;
recordingThread.join();
player = findAudioTrack();
player.play();
for (int i = 0; i < audioQueue.size(); i++) {
int written = player.write(audioQueue.get(i), 0,
audioQueue.get(i).length);
}
player.stop();
player.release();
player = null;
}
});
}
private void startRecording() {
recorder = findAudioRecord();
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
addAudioToQueue();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void addAudioToQueue() {
short[] capturedAudio = new short[recordBufferSize/2];
while (isRecording) {
int read = recorder.read(capturedAudio, 0, capturedAudio.length);
audioQueue.add(capturedAudio);
}
recorder.stop();
recorder.release();
recorder = null;
}
}
有谁知道这是为什么?
以下是完整的源代码: https://www.dropbox.com/s/h38cs9vjkztyyro/AudioTesting.java
答案 0 :(得分:1)
这可能与您使用short
数组而不是byte
数组这一事实有关。
public int read(byte [] audioData,int offsetInBytes,int sizeInBytes)
这个函数可能只填充每个byte
的第一个short
,因此每个索引的一半是音频数据的1 byte
,而另一个byte
1}}是垃圾或零。
尝试使用byte
数组而不是short
。