我正在開發一個Android應用程序,我想播放一些簡短的聲音(〜2s)。我試過Soundpool,但它並不適合我,因爲它無法檢查聲音是否已在播放。所以我決定使用AudioTrack。Android:AudioTrack在開始時發出咔噠聲
它工作的很好,但大部分時間,當它開始播放聲音時,會發出「咔嗒」聲。 我檢查了我的audiofiles,他們很乾淨。
我在流模式下使用audiotrack。我發現靜態模式對於短暫的聲音更好,但經過多次搜索後,我仍然不明白如何使其工作。 我也讀過點擊噪音可能是由wav文件的標題引起的,所以如果我用setPlaybackHeadPosition(int positionInFrames)
函數(這應該只在靜態模式下工作)跳過此標題,聲音可能會消失
這裏是我的代碼(所以問題是在開始滴答的噪音)
int minBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
audioTrack.play();
int i = 0;
int bufferSize = 2048; //don't really know which value to put
audioTrack.setPlaybackRate(88200);
byte [] buffer = new byte[bufferSize];
//there we open the wav file >
InputStream inputStream = getResources().openRawResource(R.raw.abordage);
try {
while((i = inputStream.read(buffer)) != -1)
audioTrack.write(buffer, 0, i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
有沒有人有解決方案,以避免噪音?我試過this,有時可以但不是每次都有效。有人能告訴我如何在MODE_STATIC
中實現音頻記錄嗎? 謝謝
你在播放wav文件嗎?然後,從頭部(大部分)大小開始,跳過前44個字節就足夠了。更好的辦法是跳過流中已有的字節:inputStream.skip(44) – Chris623
您應該看到我的答案和解決方案並移動接受的答案tick;) –