我正在尝试用麦克风输入填充缓冲区并分析内容。我创建我的缓冲区:
int bufferSize=AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
short[] buffer1 = new short[bufferSize];
然后在一个名为 Recorder 的单独类中,我有以下相关代码:
public short[] fillBuffer(short[] audioData, int bufferSize) {
AudioRecord recorder = new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize); // instantiate the
// AudioRecorder
if (recorder.getRecordingState() == android.media.AudioRecord.RECORDSTATE_STOPPED)
recorder.startRecording(); // check to see if the Recorder
// has stopped or is not
// recording, and make it
// record.
recorder.read(audioData, 0, bufferSize); // read the PCM
// audio data
// into the
// audioData
// array
if (recorder.getState() == android.media.AudioRecord.RECORDSTATE_RECORDING)
recorder.stop(); // stop the recorder
return audioData;
}
然后,当我打电话时:
recorder.fillBuffer(buffer1, bufferSize);
并记录输出,它总是显示缓冲区中有一半似乎是有效的音频数据,但一半是零。
创建一个正常大小一半的缓冲区会引发错误,所以我知道它实际上是在存储零。这不仅仅是缓冲区大小的一些奇怪之处。我在这里做明显错误的事情吗?请记住,这是我的第一个 Android 应用程序,尽管我对 Java 非常熟悉。