背景:我正在使用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/)。 –