我試圖用AudioRecord類錄製一些音頻。這裏是我的代碼:AudioRecord - 空緩衝區
int audioSource = AudioSource.MIC;
int sampleRateInHz = 44100;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInShorts = 44100;
int bufferSizeInBytes = 2*bufferSizeInShorts;
short Data[] = new short[bufferSizeInShorts];
Thread recordingThread;
AudioRecord audioRecorder = new AudioRecord(audioSource,
sampleRateInHz,
channelConfig,
audioFormat,
bufferSizeInBytes);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void startRecording(View arg0) {
audioRecorder.startRecording();
recordingThread = new Thread(new Runnable() {
public void run() {
while (Data[bufferSizeInShorts-1] == 0)
audioRecorder.read(Data, 0, bufferSizeInShorts);
}
});
audioRecorder.stop();
}
不幸的是我的短陣列在記錄結束後是空的。我可以請你幫我弄清楚有什麼問題嗎?
你應該測試讀取的返回值來找出它。 (這就是返回值的原因,給你一些線索,發生了什麼)。此外,測試0的最後值可能無效,因爲0是有效值。 – njzk2
你是對的測試最後的價值 - 我將不得不尋找不同的解決方案。但即使在測試中,我也應該寫一些寫到我的短陣列中的東西。 .read()函數返回0,這意味着沒有什麼複製到我的短緩衝區中:http://developer.android.com/reference/android/media/AudioRecord.html – Arxas
是不是應該使用OnRecordPositionUpdateListener? – njzk2