放音樂(lè)的api網(wǎng)上查有很多,比如灶穗拆javax.sound.midi.*;

創(chuàng)新互聯(lián)科技有限公司專(zhuān)業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供四川服務(wù)器托管,高防物理服務(wù)器租用,成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。
支持midi,mid背景音樂(lè)的播放
public class Music implements MetaEventListener, Runnable{
private Sequence sequence = null;
private Sequencer sequencer;
private boolean isPlaying = false;
private volatile Thread thread;
public Music(){
}
public Music(String midifile){
try {
loadMidi(midifile);
} catch (IOException e) {
//族消 TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//導(dǎo)入midi文件到內(nèi)存中傳給Sequence對(duì)象,相當(dāng)與編碼器
public void loadMidi(String filename) throws IOException, InvalidMidiDataException{
sequence = MidiSystem.getSequence(this.getClass().getResourceAsStream(filename));
}
//隱棗播放方法
public void play(){
if(isPlaying){
return;
}
try {
sequencer = MidiSystem.getSequencer();
sequencer.open();
//用Sequencer對(duì)象把聲音文件序列解碼出來(lái)播放
sequencer.setSequence(sequence);
sequencer.addMetaEventListener(this);
//設(shè)置循環(huán)次數(shù),-1表示一直循環(huán)
sequencer.setLoopCount(-1);
sequencer.setLoopStartPoint(0);
sequencer.setLoopEndPoint(sequencer.getTickLength());
} catch (MidiUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(thread == null){
thread = new Thread(this);
thread.start();
}
}
public void stop(){
if(isPlaying){
sequencer.stop();
isPlaying = false;
}
if(thread != null){
thread = null;
}
}
public void meta(MetaMessage meta) {
if(meta.getType() == 47){
System.out.println("Sequencer is done playing");
}
// TODO Auto-generated method stub
}
public void run() {
// TODO Auto-generated method stub
Thread current = Thread.currentThread();
while(current == thread !isPlaying){
sequencer.start();
isPlaying = true;
try {
thread.sleep(1001);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//用起來(lái)也很方便
public static void main(String[] args){
Music music = new Music("a.mid");
music.play();
}
}
如果這樣寫(xiě)路徑類(lèi)要和音頻文件放在一個(gè)目錄下,如果你不想這樣,有兩種方法,一種是修改路徑字符串,另一種是把Class.getResourceAsStream方法改成new FileInputStream 這兩個(gè)方法加載資源的初始路徑不同,前者找class文件所在目錄,后者找project目錄
import javax.sound.sampled.*;
import java.io.*;
/**
* @author Hardneedl
*/
class WavReader {
public static void main(String[] args) throws IOException, UnsupportedAudioFileException {
FileInputStream fin = new FileInputStream(args[0]);
AudioInputStream ain = AudioSystem.getAudioInputStream(fin);
AudioFormat format=ain.getFormat();
}
}
你使用了過(guò)時(shí)的類(lèi)調(diào)用了過(guò)時(shí)的方法. 已經(jīng)不被推薦使用, 所以eclipse會(huì)劃線提示.
以toURL() 為例 直接從File對(duì)象獲得鏈接, 但是toURL方法,不會(huì)對(duì)特殊字符編碼. 但是toURI方法會(huì)進(jìn)行編碼
所以現(xiàn)在一般的解決方彎橡案是 file.toURI().toURL();
解決辦法:使用javafx.scene.media.AudioClip ,?該類(lèi)功能簡(jiǎn)單: 播放和停止聲音 . 沒(méi)有暫停, 時(shí)間長(zhǎng)度,資料,均衡器等功能
參考代碼
import?java.io.File;
import?javafx.scene.media.AudioClip;?//?導(dǎo)包
public?class?TestAudioClip?{
public?static?void?main(String[]?args)?throws?Exception?{//拋出異常
AudioClip?audioClip=new?AudioClip(new?File("D:\\宣傳片音效.mp3").toURI().toURL().toString());
audioClip.play(0.8);//設(shè)置以80%的音量播放
//?設(shè)置一個(gè)循環(huán),保證播放完悄鬧慶了聲音才退出程序
while(true)?{
if(!audioClip.isPlaying())?{//如果停止了播放,就退出while循啟握環(huán)
break;
}
}
//while(audioClip.isPlaying())?{}?//這樣寫(xiě)更簡(jiǎn)潔
}
}
網(wǎng)站欄目:java音樂(lè)代碼大全 java音樂(lè)網(wǎng)站源碼
路徑分享:http://chinadenli.net/article46/dspjpeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、品牌網(wǎng)站制作、定制開(kāi)發(fā)、、小程序開(kāi)發(fā)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)