我在使用 AudioRecord 类时遇到了一些问题。我想将记录的数据存储在缓冲区中,但我不确定实现该目标的正确方法是什么。我经历了大量的例子,但其中大多数都很复杂,代表了许多不同的方法。我正在寻找一个简单的或简单的解释。
这是我的项目的音频设置:
int audioSource = AudioSource.MIC;
int sampleRateInHz = 8000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
short[] buffer = new short[bufferSizeInBytes];
AudioRecord audioRecorder = new AudioRecord(audioSource,
sampleRateInHz,
channelConfig,
audioFormat,
bufferSizeInBytes);
我正在尝试创建一个录音功能:
public void Recording() {
audioRecorder.startRecording();
...
audioRecorder.stop();
audioRecorder.release();
}
我知道我应该使用 .read(short[] audioData, int offsetInShorts, int sizeInShorts) 函数。我的问题从这里开始。我不确定 audioData 缓冲区是如何工作的 - 我假设函数将录制的样本放入 audioData。如果它完全充满数据会发生什么?它从最早的位置开始重写?如果是这样,我相信我必须将所有收集的样本复制到其他地方。它提出了另一个问题 - 我如何检查 .read(...) 函数缓冲区是否已满?我需要测量时间并复制缓冲区内容还是有其他方法可以实现?我还需要为整个录制操作创建一个线程吗?
很抱歉在一个主题中问了这么多问题:)