java - 用 java 播放 mp3 时出现 LineUnavailableException

标签 java plugins mp3 jlayer

我的目标是从 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 3rd 方库
  • 使用 Tritonus 第 3 方库
  • 使用 Sony Sound Forge、Adobe Sound Booth 对 mp3 重新编码,但运气不佳
  • 用不同的编码率和采样率重新编码mp3
  • 尝试使用JMF
  • 使用在其他应用程序中播放良好的互联网上的随机 mp3
  • 阅读有同样错误的帖子。所有帖子都没有有助于解决问题的答案。

异常(exception)情况:

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 - 用 java 播放 mp3 时出现 LineUnavailableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3125934/

相关文章:

php - 从 php 运行 lame

Java MP3Player 通过使用 Javazoom 播放和暂停

java - 单链表删除 bool 方法

java - 从 html 文件解析图像 url

android - 在 Sonar 分析中包含 xml 文件(Android 项目)

plugins - 应该如何开始创建 sbt 插件?

java - Java 中的音乐播放器?

java - 正则表达式模式 SyntaxException

java - 在TSP问题中还是找不到返回起始城市的方法

javascript - 在国家代码下拉列表中添加所需的验证 [国际电话输入 jquery 插件]