java播放聲音類和一個簡單示例
播放聲音的類
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
//播放聲音的類
public class PlaySounds extends Thread {
private String filename;
public PlaySounds(String wavfile) {
filename = System.getProperty("user.dir")+wavfile;
}
public void run() {
File soundFile = new File(filename);
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (Exception e1) {
e1.printStackTrace();
return;
}
AudioFormat format = audioInputStream.getFormat();
SourceDataLine auline = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
try {
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format);
} catch (Exception e) {
e.printStackTrace();
return;
}
auline.start();
int nBytesRead = 0;
//這是緩沖
byte[] abData = new byte[512];
try {
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0)
auline.write(abData, 0, nBytesRead);
}
} catch (IOException e) {
e.printStackTrace();
return;
} finally {
auline.drain();
auline.close();
}
}
}
下面是一個java播放聲音的應用程序,可以單次播放聲音、循環(huán)播放聲音
MusicPaly myMusicPlay = new MusicPlay(getClass().getResource("/music/button.wav"));
myMusicPlay.start();//播放一次
myMusicPlay .stop();//停止
myMusicPlay .continuousStart();//循環(huán)播放
myMusicPlay .continuousStop();//停止
// 文件名:MuiscPlay.java
import java.io.*;
import java.net.URL;
import sun.audio.*;
/**
*
* @author wuhuiwen
* 播放音頻文件,產生音效
*/
public class MusicPlay {
private AudioStream as; //單次播放聲音用
ContinuousAudioDataStream cas;//循環(huán)播放聲音
// 構造函數
public MusicPlay(URL url)
{
try {
//打開一個聲音文件流作為輸入
as = new AudioStream (url.openStream());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 一次播放 開始
public void start()
{
if( as==null ){
System.out.println("AudioStream object is not created!");
return;
}else{
AudioPlayer.player.start (as);
}
}
// 一次播放 停止
public void stop()
{
if( as==null ){
System.out.println("AudioStream object is not created!");
return;
}else{
AudioPlayer.player.stop(as);
}
}
// 循環(huán)播放 開始
public void continuousStart()
{
// Create AudioData source.
AudioData data = null;
try {
data = as.getData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Create ContinuousAudioDataStream.
cas = new ContinuousAudioDataStream (data);
// Play audio.
AudioPlayer.player.start(cas);
}
// 循環(huán)播放 停止
public void continuousStop()
{
if(cas != null)
{
AudioPlayer.player.stop (cas);
}
}
}
相關文章
SpringBoot基于Redis的分布式鎖實現(xiàn)過程記錄
Redis是一套 key-value 高性能數據庫,使用它可以大大提高我們的開發(fā)效率,在SpringBoot中,自動配置也幫我們節(jié)約了大量的配置,下面這篇文章主要給大家介紹了關于SpringBoot基于Redis的分布式鎖實現(xiàn)的相關資料,需要的朋友可以參考下2022-01-01springboot引用kettle實現(xiàn)對接oracle數據的示例代碼
這篇文章主要介紹了springboot引用kettle實現(xiàn)對接oracle數據,其實kettle集成到springboot里面沒有多少代碼,這個功能最主要的還是ktr文件的編寫,只要ktr編寫好了,放到指定文件夾下,寫個定時任務就完事了,需要的朋友可以參考下2022-12-12mybatis源碼解讀-Java中executor包的語句處理功能
這篇文章主要介紹了Java中executor包的語句處理功能,在mybatis映射文件中傳參數,主要用到#{}或者${},下文圍繞相關資料展開詳細內容,需要的小伙伴可以參考一下2022-02-02