基于 java 的音乐播放器仅识别 .wav 文件格式

Posted

技术标签:

【中文标题】基于 java 的音乐播放器仅识别 .wav 文件格式【英文标题】:java based music player recognising only .wav file formats 【发布时间】:2013-03-08 19:08:49 【问题描述】:

我正在尝试制作一个简单的基于 java 框架的音乐播放器。我已经成功这样做了,但如果它只播放 .wav 文件。即使我将加载文件条件更改为 .mp3 然后加载一个 mp3 文件,它也会显示 UnsupportedAudioFileException .. 请帮我纠正它。 这是我的代码 请告诉我需要进行更正以停止在 cmd 中显示此错误。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.sound.sampled.*;
import java.io.*;
import java.net.*;

public class MusicPlayer extends Thread implements ActionListener 

    JLabel label;
    AudioInputStream ai;
    Clip c;
    JComboBox playlist;
    JButton play, loop, stop, open;
    JFrame f;
    String dest, str;
    JTextField tf;
    URL u;
    File file;

    MusicPlayer() 
        f = new JFrame("Music Player");
        f.setLayout(null);
        f.setSize(620, 300);
        f.setVisible(true);
        tf = new JTextField();
        tf.setBounds(25, 50, 565, 40);
        tf.setFont(new Font("Monotype Corsiva", Font.BOLD, 20));
        f.add(tf);
        tf.setHorizontalAlignment(JTextField.RIGHT);
        play = new JButton("play");
        play.setBounds(100, 150, 120, 30);
        play.addActionListener(this);
        f.add(play);
        loop = new JButton("loop");
        loop.setBounds(300, 150, 120, 30);
        loop.addActionListener(this);
        f.add(loop);
        stop = new JButton("stop");
        stop.setBounds(450, 150, 120, 30);
        stop.addActionListener(this);
        f.add(stop);
        open = new JButton("open");
        open.setBounds(100, 200, 420, 30);
        open.addActionListener(this);
        f.add(open);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    public void actionPerformed(ActionEvent ae) 
        String dest;

        if (ae.getActionCommand().equals("open")) 
            FileDialog fd = new FileDialog(f, "Open Box", FileDialog.LOAD);
            fd.setSize(300, 300);
            fd.setVisible(true);
            String s1 = "wav";
            String sng = fd.getFile();
            dest = fd.getDirectory() + fd.getFile();
            if (sng.toLowerCase().endsWith(s1)) 
                tf.setText(sng);
                file = new File(dest);
             else 
                JOptionPane.showMessageDialog(f, "Select a valid file format");
            
            try 
                c = Audiosystem.getClip();
                file = new File(dest);
                ai = AudioSystem.getAudioInputStream(file);
             catch (Exception e) 
                e.printStackTrace();
            
        
        if (ae.getActionCommand().equals("play")) 
            try 
                ai = AudioSystem.getAudioInputStream(file);
                c.close();
                c = AudioSystem.getClip();
                c.open(ai);
                c.start();
             catch (Exception e) 
                e.printStackTrace();
            
        
        if (ae.getActionCommand().equals("loop")) 
            try 
                ai = AudioSystem.getAudioInputStream(file);
                c.close();
                c = AudioSystem.getClip();
                c.open(ai);
                c.loop(Clip.LOOP_CONTINUOUSLY);
             catch (Exception e) 
                e.printStackTrace();
            
        
        if (ae.getActionCommand().equals("stop")) 
            c.stop();
            c.close();

        
    

    public static void main(String args[]) 
        new MusicPlayer();
    

【问题讨论】:

您是否尝试过使用 AudioSystem 类中的其他方法?不是流式传输文件,而是输入流?你有没有试过这个方法:'static AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream) 通过转换提供的音频输入流获得指定格式的音频输入流。' 从文档中,UnsupportedAudioFileException - 如果流不指向系统识别的有效音频文件数据。你确定你得到了正确的句柄吗?能不能放个调试点,看看路径是否正确? @happybuddha 我不完全知道如何正确使用 AudioInput 流方法...如果您愿意帮我解决这个问题.. 那就太好了.. cn u frmt 相应的代码nd den pasete 如果没有问题? 【参考方案1】:

默认情况下,不提供 MP3 实现。如果你没有 MP3 SPI 的实现,UnsupportedAudioFileException 将被抛出。 试试this plugin,它应该可以工作!

另外,this article 非常好,并且有关于如何开始的详细说明。

【讨论】:

另见Java Sound tag Wiki re 'SPI' 中的解释。【参考方案2】:

如果您使用的是 Java7,则可以使用内置的 MediaMediaPlayer 类播放 MP3。

查看Playing .mp3 and .wav in Java?了解更多详情。

【讨论】:

以上是关于基于 java 的音乐播放器仅识别 .wav 文件格式的主要内容,如果未能解决你的问题,请参考以下文章

用Hi3861-wifi联网下载播放wav音乐 - 基于Harmony2.0

如何在导出的 jar 文件中播放 .wav 文件?

SD卡WAV音乐播放器(quartus11.0)(FAT32)(DE2-115)

WAV格式如何播放?

第三次作业

手机影音11--音乐播放页面