Java播放音乐代码 Applet 使用 AudioClip接口播放音频

关于AudioClip

Applet 能通过使用 java.applet 包中的 AudioClip 接口播放音频


public void play(): 从一开始播放音频片段一次。 直到要播放音频文件时,该文件才会下载下来。

public void loop(): 循环播放音频片段

public void stop(): 停止播放音频片段

以下代码演示了最简单的Java播放音乐

import java.applet.Applet;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;

public class MusicPlayer {

    private static AudioClip adc;// 声音音频剪辑对象

    public static void main(String[] args) {
        play("山外小楼夜听雨.wav");
    }

    public static void play(String songName) {
        try {
            URL url = new URL("file:" + JdbcUtils.musicPath + songName);//JdbcUtils.musicPath:歌曲的存放路径
            adc = Applet.newAudioClip(url);
            adc.play();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    public static void stop(){
        adc.stop();
    }

}

用javaswing实现音乐播放器功能

在这里插入代码片
部分代码


public class Mp3 extends JFrame {
    /**
     * 只支持wav | au | aif | aifc | snd 格式 不支持mp3
     */
    private static final String PATH_URL = "D:\\codeying\\"; //音乐路径

    /**
     * 支持类型
     */
    private static final String[] SUPPORT_TYPE = new String[]{"wav", "au", "aif", "aifc", "snd"};

    /**
     * 文件集合
     * k 文件 v也是文件. 方便查找.
     */
    public static Map<String, Object> MAP_COLLECTION = new HashMap<>();


    private JPanel contentPane;
    File file;// 声明文件对象
    //当前播放的是第几个
    int index;
    String filename;
    String ss = "";
    String flag = "";
    String tt = "";
    @SuppressWarnings("rawtypes")
    Vector vt = new Vector();
    JFileChooser chooser = new JFileChooser();// 创建一个文件选择器
    private JTextField xiaoxi;
    boolean loop = false;
    AudioClip adc;// 声音音频剪辑对象
    SourceDataLine line;
    private FloatControl volume = null;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Mp3 frame = new Mp3();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public String getmusic(String path) throws Exception {

        File rootDir = new File(path);
        String[] fileList = rootDir.list();
        if (!rootDir.isDirectory()) {
            String type = "mp3";
            String st = "";
            if (type.equals(
                    rootDir.getName().substring(rootDir.getName().lastIndexOf(".") + 1, rootDir.getName().length()))) {
                st = rootDir.getName().substring(0, rootDir.getName().lastIndexOf("."));
                System.out.println(st);
                ss += st + "\n";
            }
        } else {
            for (int i = 0; i < fileList.length; i++) {

                path = rootDir.getAbsolutePath() + "\\" + fileList[i];
                getmusic(path);
            }
        }
        return null;
    }

    /**
     * Create the frame.
     */
    public Mp3() {
        setResizable(false);
        setFont(new Font("微软雅黑", Font.PLAIN, 12));
        //主题
        setTitle("音乐播放器");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 364, 478);
        JScrollPane scrollPane = new JScrollPane();
        JSlider slider = new JSlider();

        //获取文件
        String[] fileName = getFileName(PATH_URL, new ArrayList<>());
        if (fileName.length == 0) {
            System.out.println("未找到数据");
            return;
        }
        JList songlist = new JList(fileName);
        //鼠标事件(按下、释放、单击、进入或离开)的侦听器接口
        songlist.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (adc != null)
                    adc.stop();
                try {
                    URL url;
                    flag = (String) songlist.getSelectedValue();
                    tt = flag;
                    url = new URL("file:" + MAP_COLLECTION.get(tt));
                    adc = Applet.newAudioClip(url);
                } catch (MalformedURLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                // 创建资源定
                if (e.getClickCount() == 2) {
                    flag = "正在播放:" + flag;
                    xiaoxi.setText(flag);
                    adc.play();
                }
            }
        });
        songlist.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        scrollPane.setViewportView(songlist);
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu mnNewMenu = new JMenu("菜单");
        mnNewMenu.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        menuBar.add(mnNewMenu);
        xiaoxi = new JTextField();
        xiaoxi.setEditable(false);
        xiaoxi.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        xiaoxi.setColumns(10);
        xiaoxi.setText("欢迎使用本播放器");


        JMenuItem dakai = new JMenuItem("打开");
        dakai.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        dakai.addActionListener(new ActionListener() {
            @SuppressWarnings("static-access")
            public void actionPerformed(ActionEvent e) {
                int value = chooser.showOpenDialog(chooser);// 接受文件选择器的状态
                if (value == chooser.APPROVE_OPTION) {
                    file = chooser.getSelectedFile();// 返回选中文件
                    filename = file.getName();
                    String flag = filename;
                    xiaoxi.setText(flag);
                    try {
                        if (adc != null)
                            adc.stop();
                        URL url = new URL("file:" + file.getPath());// 创建资源定位
                        adc = Applet.newAudioClip(url);
                        //adc.play();

                    } catch (MalformedURLException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                        System.out.println("不能播放!");
                    }
                }
            }
        });
        mnNewMenu.add(dakai);

        JMenuItem tuichu = new JMenuItem("退出");
        tuichu.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        tuichu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                dispose();
                if (adc != null)
                    adc.stop();
                return;
            }
        });

        JMenuItem saomiao = new JMenuItem("扫描本地音乐");
        saomiao.addActionListener(new ActionListener() {
            @SuppressWarnings("unchecked")
            public void actionPerformed(ActionEvent e) {
                String path = PATH_URL;
                ss = "";
                try {
                    getmusic(path);
                    String[] split = ss.split("\n");
                    for (int i = 0; i < split.length; i++) {
                        vt.addElement(split[i]);
                        songlist.setListData(vt);
                    }

                } catch (Exception ee) {
                    System.out.println("there is wrong!");
                }

            }
        });
        saomiao.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        mnNewMenu.add(saomiao);

        mnNewMenu.add(tuichu);
        //子区域
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        JButton playbtn = new JButton("播放");
        playbtn.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        playbtn.setHorizontalAlignment(SwingConstants.LEFT);
        playbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (adc != null) adc.stop();
                if (filename != null)
                    flag = "正在播放:" + filename;
                else
                    flag = "正在播放:" + tt;
                if (adc == null) {
                    flag = "请选择播放的音乐";
                    xiaoxi.setText(flag);
                    return;
                }
                adc.play();
                xiaoxi.setText(flag);
            }
        });

        JButton stopbtn = new JButton("暂停");
        stopbtn.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        stopbtn.setHorizontalAlignment(SwingConstants.LEFT);
        stopbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (adc != null) adc.stop();
                if (filename != null)
                    flag = "停止播放音乐:" + filename;
                else
                    flag = "停止播放音乐:" + tt;
                xiaoxi.setText(flag);
            }
        });

        JButton againbtn = new JButton("循环");
        againbtn.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        againbtn.setHorizontalAlignment(SwingConstants.LEFT);
        againbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                loop = !loop;
                flag = "";
                if (loop) {
                    if (adc != null) adc.play();
                    if (adc != null) adc.loop();// 循环播放
                    if (filename != null)
                        flag = "循环播放音乐:" + filename;
                    else
                        flag = "循环播放音乐:" + tt;
                } else {
                    if (adc != null) adc.play();
                    if (filename != null)
                        flag = "顺序播放音乐:" + filename;
                    else
                        flag = "顺序播放音乐:" + tt;
                }
                xiaoxi.setText(flag);
            }
        });

        //上一曲
        JButton lastbtn = new JButton("上一曲");
        lastbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (adc != null) adc.stop();
                index = songlist.getSelectedIndex();
                if (index > 0) {
                    try {
                        URL url;
                        songlist.setSelectedIndex(index - 1);
                        flag = (String) songlist.getSelectedValue();
                        tt = flag;
                        System.out.println("正在播放:" + flag);
                        url = new URL("file:" + MAP_COLLECTION.get(tt));
                        flag = "正在播放:" + flag;
                        xiaoxi.setText(flag);
                        adc = Applet.newAudioClip(url);
                        adc.play();
                    } catch (MalformedURLException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
            }
        });
        lastbtn.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        //下一曲
        JButton nextbtn = new JButton("下一曲");
        nextbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (adc != null) adc.stop();
                index = songlist.getSelectedIndex();
                if (index >= 0) {
                    try {
                        URL url;
                        songlist.setSelectedIndex(index + 1);
                        flag = (String) songlist.getSelectedValue();
                        tt = flag;
                        System.out.println("正在播放:" + flag);
                        url = new URL("file:" + MAP_COLLECTION.get(tt));
                        flag = "正在播放:" + flag;
                        xiaoxi.setText(flag);
                        adc = Applet.newAudioClip(url);
                        adc.play();
                    } catch (MalformedURLException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
            }
        });
        nextbtn.setFont(new Font("微软雅黑", Font.PLAIN, 12));

        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        //设置定位和调整大小 沿水平轴的组件 不推荐调整
        gl_contentPane
                .setHorizontalGroup(
                        gl_contentPane.createParallelGroup(Alignment.LEADING)
                                .addGroup(gl_contentPane.createSequentialGroup().addContainerGap()
                                        .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
                                                .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 372,
                                                        Short.MAX_VALUE)
                                                .addComponent(xiaoxi, GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                                                .addGroup(gl_contentPane.createSequentialGroup()
                                                        .addComponent(playbtn, GroupLayout.PREFERRED_SIZE, 64,
                                                                GroupLayout.PREFERRED_SIZE)
                                                        .addPreferredGap(ComponentPlacement.RELATED, 66, Short.MAX_VALUE)
                                                        .addComponent(stopbtn, GroupLayout.PREFERRED_SIZE, 66,
                                                                GroupLayout.PREFERRED_SIZE)
                                                        .addGap(58).addComponent(againbtn, GroupLayout.PREFERRED_SIZE, 64,
                                                                GroupLayout.PREFERRED_SIZE))
                                                .addComponent(slider, GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                                                .addGroup(gl_contentPane.createSequentialGroup().addComponent(lastbtn)
                                                        .addPreferredGap(ComponentPlacement.RELATED, 132, Short.MAX_VALUE)
                                                        .addComponent(nextbtn))).addContainerGap()));
        //设置定位和调整大小  沿垂直轴的组件 不推荐调整
        gl_contentPane
                .setVerticalGroup(
                        gl_contentPane.createParallelGroup(Alignment.TRAILING)
                                .addGroup(
                                        gl_contentPane.createSequentialGroup()
                                                .addComponent(xiaoxi, GroupLayout.PREFERRED_SIZE,
                                                        GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(ComponentPlacement.UNRELATED)
                                                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                                                        .addComponent(lastbtn).addComponent(nextbtn))
                                                .addPreferredGap(ComponentPlacement.RELATED, 9, Short.MAX_VALUE)
                                                .addComponent(slider, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                                        GroupLayout.PREFERRED_SIZE).addGap(18)
                                                .addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 258, GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(ComponentPlacement.UNRELATED)
                                                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE).addComponent(playbtn)
                                                        .addComponent(againbtn).addComponent(stopbtn)).addContainerGap()));
        contentPane.setLayout(gl_contentPane);
    }


    /**
     * 工具方法:递归获取文件夹filePath中的数据,MAP_COLLECTION填充
     */
    private static String[] getFileName(String filePath, List<String> objects) {
        System.out.println("扫描"+filePath);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学长敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值