使用java播放mp3的LineUnavailableException
作者:互联网
我的目标是从Java播放mp3文件.对于我采用的每种方法,它总是因LineUnavailableException而失败.
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new URL("http://localhost:8080/agriserver/facebook/sound/test6.mp3"));
Clip clip = AudioSystem.getClip(info);
clip.open(inputStream);
clip.start();
修复它的尝试失败:
>使用Sun的mp3插件.
>使用Jlayer第三方库
>使用Tritonus第三方库
>使用Sony Sound Forge,Adobe Sound Booth重新编码mp3,一切都没有运气
>使用不同的编码率和采样率重新编码mp3
>尝试使用JMF
>使用来自互联网的随机mp3,在其他应用程序中可以正常播放
>阅读具有相同错误的帖子.所有帖子都没有帮助解决问题的答案.
这是一个例外:
Exception in thread "main" javax.sound.sampled.LineUnavailableException: line with format MPEG1L3 48000.0 Hz, unknown bits per sample, stereo, unknown frame size, 41.666668 frames/second, not supported. at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:494) at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1280) at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:107) at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1061) at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1151) at Demo.playMp3(Demo.java:83)
解决方法:
显然,mp3必须被读入一个流.必须将该流读入第二个流以对其进行解码.以下代码有效:
// read the file
AudioInputStream rawInput = AudioSystem.getAudioInputStream(new ByteArrayInputStream(data));
// decode mp3
AudioFormat baseFormat = rawInput.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, // Encoding to use
baseFormat.getSampleRate(), // sample rate (same as base format)
16, // sample size in bits (thx to Javazoom)
baseFormat.getChannels(), // # of Channels
baseFormat.getChannels()*2, // Frame Size
baseFormat.getSampleRate(), // Frame Rate
false // Big Endian
);
AudioInputStream decodedInput = AudioSystem.getAudioInputStream(decodedFormat, rawInput);
标签:java,plugins,mp3,jlayer 来源: https://codeday.me/bug/20190621/1258085.html