编程语言
首页 > 编程语言> > 使用java播放mp3的LineUnavailableException

使用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