【问题标题】:LineUnavailableException for playing mp3 with javaLineUnavailableException 用于使用 java 播放 mp3
【发布时间】:2011-03-08 17:51:11
【问题描述】:

我的目标是从 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 3rd 方库
  • 用 Sony Sound Forge、Adobe Sound Booth 重新编码 mp3,一切都没有成功
  • 使用不同的编码率和采样率重新编码 mp3
  • 尝试使用 JMF
  • 使用来自 Internet 的随机 mp3,可以在其他应用程序中正常播放
  • 阅读帖子时出现相同错误。没有任何帖子提供有助于解决问题的答案。

这是一个例外:

线程“主”javax.sound.sampled.LineUnavailableException 中的异常:行格式为 MPEG1L3 48000.0 Hz,每个样本的未知位,立体声,未知帧大小,41.666668 帧/秒,不支持。 在 com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:494) 在 com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1280) 在 com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:107) 在 com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1061) 在 com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1151) 在 Demo.playMp3(Demo.java:83)

【问题讨论】:

    标签: java plugins mp3 jlayer


    【解决方案1】:

    显然,必须将 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);
    

    【讨论】:

      【解决方案2】:

      好的 - 让我们首先排除您的 MP3 文件和您的代码。

      1. 选择您拥有的 MP3 文件并 使用任何 MP3 播放器播放。
      2. 下载 http://www.javazoom.net/javalayer/sources/jlayer1.0.1.zip
      3. 从 zip 文件中提取 jl1.0.1.jar 并放入你的类路径
      4. 将此答案末尾的代码剪切并粘贴到您的开发环境中。
      5. 编译并运行确保您的 mp3 步骤 1 中的文件是参数 文件。 (在我的例子中,我有这个“C:\\Users\\romain\\Music\\Al DiMeola\\Elegant Gypsy\\01 Flight over Rio Al DiMeola.mp3”)
      6. 我对此进行了测试,效果很好。

        import java.io.BufferedInputStream;
        import java.io.FileInputStream;
        import javazoom.jl.player.Player;
        
        public class MP3 {
            private String filename;
            private Player player; 
        
        // constructor that takes the name of an MP3 file
        public MP3(String filename) {
            this.filename = filename;
        }
        
        public void close() { if (player != null) player.close(); }
        
        // play the MP3 file to the sound card
        public void play() {
            try {
                FileInputStream fis     = new FileInputStream(filename);
                BufferedInputStream bis = new BufferedInputStream(fis);
                player = new Player(bis);
            }
            catch (Exception e) {
                System.out.println("Problem playing file " + filename);
                System.out.println(e);
            }
        
            // run in new thread to play in background
            new Thread() {
                public void run() {
                    try { player.play(); }
                    catch (Exception e) { System.out.println(e); }
                }
            }.start();
        }
        
        // test client
        public static void main(String[] args) {
            String filename = args[0];
            MP3 mp3 = new MP3(filename);
            mp3.play();
        }
        

        }

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多