背景:我正在使用JLayer播放MP3
文件。我試圖分析MP3
中不同的幅度/音頻電平。通過我的分析,我想確定MP3
開始和結束時的靜音持續時間。另外,當正在播放MP3
時,我想要一個圖形來顯示音頻電平(如視覺聲波)。使用JLayer將MP3解碼爲PCM來檢測幅度
問題:爲了進行有效的分析,我需要能夠分析原始PCM
數據。目前,我正在分析通過AudioInputStream
檢索到的字節[],並將其發送到SourceDataLine
。 PCM
短[]不是字節[],這意味着我沒有得到完整的數據。
我正在使用Root-Mean Square
(RMS
)來確定音量級別。
回放代碼,其中所述字節[]進行處理:
AudioInputStream in = null;
AudioFile af = null; //Custom class which holds some data about mp3.
SourceDataLine line = null;
// Set current audio file.
af = musicPlaylist.get(0);
line = (SourceDataLine) AudioSystem.getLine(af.getLineInfo());
line.open(af.getAudioFormat());
line.start();
in = getAudioInputStream(af.getAudioFormat(), af.getAudioStream());
int bR = playbackBufferSize;
final byte[] buffer = new byte[bR];
int n = 0;
while (playMedia) {
if ((n = in.read(buffer, 0, buffer.length)) == -1) {
break;
}
if (line != null) {
line.write(buffer, 0, n);
int amp = (int) Math
.ceil((rmsAudioLevel(decode(buffer))/32767) * 100);
mainScreen.setAmpDisplayLevel(amp, String.valueOf(amp));
mainScreen.updateGraph(amp);
}
}
本質:如何在現場的PCM
數據進行解碼,因爲我玩MP3
,使我可顯示音量等級並因此檢測到沉默?
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –