java另外启动线程播放wav声音

搜了一个mp3文件,首先转成wav 用mp3Towav.sh脚本

#!/bin/bash

folder=/home/qzc/workspace/
for file in $(find "$folder" -type f -iname "*.mp3")
do
    name=$(basename "$file" .mp3)
    dir=$(dirname "$file")
    echo ffmpeg -i "$file" -acodec pcm_s16le -ac 1 -ar 16000 "$dir"/"$name".wav
    ffmpeg -i "$file" -acodec pcm_s16le -ac 1 -ar 16000 "$dir"/"$name".wav
done

然后是示例代码

package com.ewivt.redline.dms.jc5000;

import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;

public class AudioPlay {
    //private String path; //带路径的音频文件
    public static AudioInputStream audioStream;
    public static AudioFormat audioFormat;
    public static SourceDataLine sourceDataLine;
    public static boolean playing = false; //当前播放状态
    public static boolean replay = false; //是否继续播放

    public AudioPlay(String path, int times) {
        for (int i = 0; i < 2; i++) {
            System.out.println("i" + i);
            playMusicStopLast(path);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        final String path = "/home/qzc/workspace/11.wav";
        System.out.println("i 0");
        new Thread() {
            public void run() {
                playMusicStopLast(path);
            }
        }.start();
        System.out.println("i 1");
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("i 2");
        final String path1 = "/home/qzc/workspace/22.wav";
        new Thread() {
            public void run() {
                playMusicStopLast(path1);
            }
        }.start();
    }

    //停止上一个播放的新播放
    public static void playMusicStopLast(String path) {
        replay = false;
        while (playing) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        playMusic(path);
    }

    public static void playMusic(String path) {
        try {
            replay = true;
            playing = true;
            int count;
            byte buf[] = new byte[1024];
            //获取音频输入流
            audioStream = AudioSystem.getAudioInputStream(new File(path));
            //获取音频的编码格式
            audioFormat = audioStream.getFormat();
            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat, AudioSystem.NOT_SPECIFIED);
            sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
            sourceDataLine.open(audioFormat);
            sourceDataLine.start();
            //播放音频
            while (replay && (count = audioStream.read(buf, 0, buf.length)) != -1) {
                sourceDataLine.write(buf, 0, count);
            }
            //播放结束,释放资源
            sourceDataLine.drain();
            sourceDataLine.close();
            audioStream.close();
            playing = false;
        } catch (UnsupportedAudioFileException ex) {
            ex.printStackTrace();
        } catch (LineUnavailableException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

另外线程播放好处是后一个播放能停止前面一个播放,否则只能等前面播放完成才能播放后面一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现点击图片播放 WAV 音乐,可以使用 Java 的 Swing 组件和 Java Sound API。 下面是一个简单的示例代码,实现了点击图片播放 WAV 音乐: ```java import javax.sound.sampled.*; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; public class PlaySoundDemo extends JFrame { private JButton button; private JLabel label; private Clip clip; public PlaySoundDemo() { setTitle("Play Sound Demo"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setPreferredSize(new Dimension(300, 300)); // 创建按钮和标签 button = new JButton("Play"); label = new JLabel(new ImageIcon("image.jpg")); // 将按钮和标签添加到 JFrame getContentPane().setLayout(new BorderLayout()); getContentPane().add(button, BorderLayout.SOUTH); getContentPane().add(label, BorderLayout.CENTER); // 加载音乐文件 try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("sound.wav")); clip = AudioSystem.getClip(); clip.open(audioInputStream); } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) { e.printStackTrace(); } // 添加按钮的点击事件 button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (clip != null) { clip.setFramePosition(0); clip.start(); } } }); pack(); } public static void main(String[] args) { PlaySoundDemo demo = new PlaySoundDemo(); demo.setVisible(true); } } ``` 通过运行这个程序,可以看到一个带有图片和播放按钮的窗口。当点击按钮时,程序会播放指定的 WAV 音乐文件。 您可以根据自己的需求,修改图片和音乐文件的路径,来实现自己的图片播放 WAV 音乐的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值