Java中播放聲音例項
阿新 • • 發佈:2019-02-02
/**
* 功能:嘗試播放聲音
*/
import java.io.*;
import javax.sound.sampled.*;
public class TestAudio {
public static void main(String[] args) {
//1.建立一個AePlayWave物件例項
AePlayWave apw=new AePlayWave("d:\\111.wav");
//2.啟動該執行緒去播放
apw.start();
}
}
//播放聲音的類
class AePlayWave extends Thread{
private String filename;
public AePlayWave(String wavfile){
filename = wavfile;
}
public void run(){
File soundFile = new File(filename);
//AudioInputStream:音訊輸入流,是具有指定音訊格式和長度的輸入流。
AudioInputStream audioInputStream = null;
try {
//AudioSystem:該類充當取樣音訊系統資源的入口點
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (Exception e) {
e.printStackTrace();
return;
}
//AudioFormat: 是在聲音流中指定特定資料安排的類
AudioFormat format = audioInputStream.getFormat();
//SourceDataLine:源資料行,是可以寫入資料的資料行
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 (Exception e) {
e.printStackTrace();
return;
}finally{
auline.drain();
auline.close();
}
}
}
* 功能:嘗試播放聲音
*/
import java.io.*;
import javax.sound.sampled.*;
public class TestAudio {
public static void main(String[] args) {
//1.建立一個AePlayWave物件例項
AePlayWave apw=new AePlayWave("d:\\111.wav");
//2.啟動該執行緒去播放
apw.start();
}
}
//播放聲音的類
class AePlayWave extends Thread{
private String filename;
public AePlayWave(String wavfile){
filename = wavfile;
}
public void run(){
File soundFile = new File(filename);
//AudioInputStream:音訊輸入流,是具有指定音訊格式和長度的輸入流。
AudioInputStream audioInputStream = null;
try {
//AudioSystem:該類充當取樣音訊系統資源的入口點
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (Exception e) {
e.printStackTrace();
return;
}
//AudioFormat: 是在聲音流中指定特定資料安排的類
AudioFormat format = audioInputStream.getFormat();
//SourceDataLine:源資料行,是可以寫入資料的資料行
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 (Exception e) {
e.printStackTrace();
return;
}finally{
auline.drain();
auline.close();
}
}
}