首先要在環(huán)境電腦中安裝下JMF環(huán)境,才能引入javax.sound.sampled.*這個(gè)包,一下是用過的代碼
公司2013年成立成都創(chuàng)新互聯(lián)公司專注于”幫助中小企業(yè)+互聯(lián)網(wǎng)”, 也是目前成都地區(qū)具有實(shí)力的互聯(lián)網(wǎng)服務(wù)商。團(tuán)隊(duì)致力于為企業(yè)提供--站式網(wǎng)站建設(shè)、移動(dòng)端應(yīng)用( H5手機(jī)營銷、app軟件開發(fā)公司、微信開發(fā))、軟件開發(fā)、信息化解決方案等服務(wù)。
package TheMusic;
import java.io.*;
import javax.sound.sampled.*;
public class Music {
public static void main(String[] args) {
// TODO Auto-generated method stub
//修改你的音樂文件路徑就OK了
AePlayWave apw=new AePlayWave("突然好想你.wav");
apw.start();
}
}
在程序中實(shí)例化這個(gè)類,啟動(dòng)線程,實(shí)例化的時(shí)候參照Test修改路徑就OK播放聲音的類
Java代碼
public class AePlayWave extends Thread {
private String filename;
public AePlayWave(String wavfile) {
filename = 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();
}
}
}
在?applet?中播放聲音文件非常簡單,一般需要以下步驟:創(chuàng)建一個(gè)?AudioClip?對(duì)象
裝入?.au?聲音文件到?AudioClip?對(duì)象
一次播放或者不停循環(huán)播放聲音
停止播放
下面是相應(yīng)的代碼:import?java.applet.*;AudioClip?ac?=?getAudioClip(getCodeBase(),?soundFile);
ac.play();?//play?once
ac.stop();?//stop?playing
解決這個(gè)問題的竅門是利用由?Sun?及?其JDK?提供的某些?undocumented?的特征。先看看?Sun?JDK?中的文件?classes.zip?(使用任何解壓工具即可),發(fā)現(xiàn)其中不僅包含標(biāo)準(zhǔn)的?Java?包如?java.applet?而且還存在包?sun.audio.?(在?sun/audio?的目錄下.)
包?sun.audio?中包含了用于播放聲音文件所需的所有東西!下面是示例代碼:import?sun.audio.*;?//import?the?sun.audio?package
import?java.io.*;//**?add?this?into?your?application?code?as?appropriate//?Open?an?input?stream?to?the?audio?file.
InputStream?in?=?new?FileInputStream(Filename);//?Create?an?AudioStream?object?from?the?input?stream.
AudioStream?as?=?new?AudioStream(in);//?Use?the?static?class?member?"player"?from?class?AudioPlayer?to?play
//?clip.
AudioPlayer.player.start(as);//?Similarly,?to?stop?the?audio.
AudioPlayer.player.stop(as);如果要用一個(gè)?URL?做為聲音流的源(source),則用下面的代碼所示替換輸入流來創(chuàng)建聲音流:AudioStream?as?=?new?AudioStream?(url.openStream());如果需要持續(xù)播放聲音文件,則要稍稍復(fù)雜一點(diǎn)://?Create?audio?stream?as?discussed?previously.
//?Create?AudioData?source.
AudioData?data?=?as.getData();//?Create?ContinuousAudioDataStream.
ContinuousAudioDataStream?cas?=?new?ContinuousAudioDataStream?(data);//?Play?audio.
//給你個(gè)例子
import java.io.*;
import javax.sound.sampled.*;
import javax.swing.*;
public class Au extends JFrame
{
public static void main(String[] args) throws Exception
{
Au w=new Au();
w.loop();
}
void loop() throws Exception
{
//將f指定為聲音文件的文件名,聲音文件只能是WAVE、AU、AIFF、AIFC、SND格式的
final String f="s.wav";
Clip c=AudioSystem.getClip();
c.open(AudioSystem.getAudioInputStream(new File(f)));
c.loop(Clip.LOOP_CONTINUOUSLY);
}
Au()
{
setSize(400,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.AWTException;
import java.awt.Frame;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class bofan_2 extends JFrame implements ActionListener
{
boolean looping=false;
File file1=null;
AudioClip sound1;
AudioClip chosenClip;
private JComboBox box1=null; //歌曲列表
private JButton butbofan=null; //播放
private JButton butboxhuan=null; //循環(huán)播放
private JButton buttinzi=null; //停止
private JButton butshan=null; //上一首
private JButton butzhantin=null; //暫停
private JButton butxia=null; //下一首
private TrayIcon trayIcon;//托盤圖標(biāo)
private SystemTray systemTray;//系統(tǒng)托盤
public bofan_2()
{
this.setSize(420,400);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setLayout(null);
box1=new JComboBox();
box1.addItem("傷心太平洋");
box1.addItem("勁爆的士高");
box1.addItem("老夫少妻");
box1.addItem("愛不再來");
box1.addItem("抽身");
box1.addItem("傷心城市");
box1.addItem("二零一二");
box1.addItem("精忠報(bào)國");
box1.addItem("秋沙");
box1.addItem("吻別");
box1.addItem("音樂瘋起來");
box1.setBounds(10,20,150,20);
butbofan=new JButton("播放");
butbofan.addActionListener(this);
butbofan.setBounds(165,50,60,20);
butboxhuan=new JButton("循環(huán)播放");
butboxhuan.addActionListener(this);
butboxhuan.setBounds(230,50,90,20);
buttinzi=new JButton("停止");
buttinzi.setEnabled(false);
buttinzi.addActionListener(this);
buttinzi.setBounds(335,50,60,20);
butshan=new JButton("上一首");
butshan.addActionListener(this);
butshan.setBounds(165,90,80,20);
butzhantin=new JButton("暫停");
butzhantin.setEnabled(false);
butzhantin.addActionListener(this);
butzhantin.setBounds(250,90,60,20);
butxia=new JButton("下一首");
butxia.addActionListener(this);
butxia.setBounds(320,90,80,20);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(box1);
this.getContentPane().add(butbofan);
this.getContentPane().add(butboxhuan);
this.getContentPane().add(buttinzi);
this.getContentPane().add(butshan);
this.getContentPane().add(butzhantin);
this.getContentPane().add(butxia);
try {
UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceOfficeBlue2007LookAndFeel");
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e)
{
e.printStackTrace();
}
setSize(450,450);
systemTray = SystemTray.getSystemTray();//獲得系統(tǒng)托盤的實(shí)例
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
trayIcon = new TrayIcon(ImageIO.read(new File("004.jpg")));
systemTray.add(trayIcon);//設(shè)置托盤的圖標(biāo),0.gif與該類文件同一目錄
}
catch (IOException e1)
{
e1.printStackTrace();
}
catch (AWTException e2)
{
e2.printStackTrace();
}
this.addWindowListener(
new WindowAdapter(){
public void windowIconified(WindowEvent e)
{
dispose();//窗口最小化時(shí)dispose該窗口
}
});
trayIcon.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2)//雙擊托盤窗口再現(xiàn)
setExtendedState(Frame.NORMAL);
setVisible(true);
}
});
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source== butbofan)
{
System.out.println((String) box1.getSelectedItem());
file1=new File((String) box1.getSelectedItem()+".wav");
butboxhuan.setEnabled(true);
buttinzi.setEnabled(true);
butzhantin.setEnabled(true);
butzhantin.setText("暫停");
try {
sound1 = Applet.newAudioClip(file1.toURL());
chosenClip = sound1;
} catch(OutOfMemoryError er){
System.out.println("內(nèi)存溢出");
er.printStackTrace();
} catch(Exception ex){
ex.printStackTrace();
}
chosenClip.play();
this.setTitle("正在播放"+(String) box1.getSelectedItem());
}
if (source== butboxhuan)
{
file1=new File((String) box1.getSelectedItem()+".wav");
try {
sound1 = Applet.newAudioClip(file1.toURL());
chosenClip = sound1;
} catch(OutOfMemoryError er){
System.out.println("內(nèi)存溢出");
er.printStackTrace();
} catch(Exception ex){
ex.printStackTrace();
}
looping = true;
chosenClip.loop();
butboxhuan.setEnabled(false);
buttinzi.setEnabled(true);
butzhantin.setText("暫停");
this.setTitle("正在循環(huán)播放"+(String) box1.getSelectedItem());
}
if (source== buttinzi)
{
if (looping)
{
looping = false;
chosenClip.stop();
butboxhuan.setEnabled(true);
butzhantin.setText("暫停");
} else {
chosenClip.stop();
}
buttinzi.setEnabled(false);
this.setTitle("停止播放");
}
if(source==butshan)
{
butzhantin.setText("暫停");
}
if(source==butzhantin)
{
buttinzi.setEnabled(false);
butzhantin.setText("繼續(xù)");
if(source==butzhantin)
{
butzhantin.setText("暫停");
}
}
if(source==butxia)
{
butzhantin.setText("暫停");
}
}
public static void main(String[] args)
{
bofan_2 xx=new bofan_2();
}
}
/*
可以用加載聲音文件的方法:
第一幀:mysound= new Sound();
mysound.attachSound(聲音id名字);
ptime = 0;
播放按鈕as:
on(release){
mysound.start(ptime);
}
暫停按鈕as:
on(release){
ptime = mysound.position/1000;
mysound.stop();
}
*/
對(duì)聲音媒體的直接支持可以說是Java的一大特色,尤其是在動(dòng)畫中配上聲音效果,就可以使人在視覺上和聽覺上均得到美的享受,那才叫過癮。Java中播放聲音文件與顯示圖像文件一樣方便,同樣只需要先將聲音文件裝載進(jìn)來,然后播放就行了。
Java目前支持的聲音文件只有一種格式,那就是SUN公司的AU格式(.AU文件),也稱為u-law格式。由于AU格式的聲音僅有8KHz的采樣頻率且不支持立體聲效果,所以音質(zhì)不算太好。唯一的好處就是AU聲音文件的尺寸比其它格式小,有利于網(wǎng)上傳輸。一般,我們較熟悉的大都是WAV格式的聲音文件,因此必須先將它們轉(zhuǎn)換為AU格式(可以選用Goldwave軟件來進(jìn)行這種格式轉(zhuǎn)換)。
聲音文件準(zhǔn)備好以后,就可以考慮將它裝載進(jìn)來并播放。在Applet類中提供的play( )方法可以將聲音文件的裝載與播放一并完成,其調(diào)用格式如下:
void play(URL url)
void play(URL url, String name)
可見,play( )方法的調(diào)用格式與getImage( )方法是完全一樣的,也采用URL來定位聲音文件。例如,某聲音文件audio.au與applet文件存放在同一目錄下,可以這樣寫:
play(getCodeBase( ),"audio.au");
一旦play( )方法裝載了該聲音文件,就立即播放。如果找不到指定URL下的聲音文件,play( )方法不返回出錯(cuò)信息,只是聽不到想聽的聲音而已。
由于play( )方法只能將聲音播放一遍,若想循環(huán)播放某聲音作為背景音樂,就需要用到功能更強(qiáng)大的AudioClip類,它能更有效地管理聲音的播放操作。因?yàn)樗欢x在java.applet程序包中,所以使用該類的話,不要忘了在程序頭部加上:
import java.applet.AudioClip;
為了得到AudioClip對(duì)象,我們可以調(diào)用Applet類中的getAudioClip( )方法。它能裝載指定URL的聲音文件,并返回一個(gè)AudioClip對(duì)象,其調(diào)用格式如下:
AudioClip getAudioClip(URL url)
AudioClip getAudioClip(URL url, String name)
得到AudioClip對(duì)象以后,就可以調(diào)用AudioClip類中所提供的各種方法來操作其中的聲音數(shù)據(jù),這些方法如表4-4所示。
如果getAudioClip( )方法沒有找到所指定的聲音文件,就會(huì)返回null值。所以,在調(diào)用表4-4中所列的方法前,應(yīng)該先檢查一下得到的AudioClip對(duì)象不是null,因?yàn)樵趎ull對(duì)象上調(diào)用上述方法將導(dǎo)致出錯(cuò)。
如果需要的話,我們還可以在applet中同時(shí)裝載幾個(gè)聲音文件來一起播放,到時(shí)候,這些聲音將混合在一起,就象二重奏一樣。另外還有一點(diǎn)要說明的是,如果我們使用AudioClip對(duì)象的loop( )方法來重復(fù)播放背景音樂時(shí),千萬不要忘記在適當(dāng)?shù)臅r(shí)候調(diào)用AudioClip對(duì)象的stop( )方法來結(jié)束放音,否則的話,即使用戶離開這一Web頁面,該聲音也不會(huì)停止,這無疑將會(huì)惹惱用戶。因此,一般我們都在applet的stop( )方法中添上停止播放的代碼。
例如,下面這段程序?qū)⒉シ艃啥温曇?,一段是連續(xù)播放的背景音樂,另一段是講話錄音。
import java.applet.AudioClip;
public class Audios extends java.applet.Applet{
AudioClip bgmusic,speak;
public void init(){
bgmusic=getAudioClip(getDocumentBase(),"space.au");
speak=getAudioClip(getDocumentBase(),"intro.au");
}
public void start(){
if(bgmusic!=null)
bgmusic.loop();
if(speak!=null)
speak.play();
}
public void stop(){
if(bgmusic!=null)
bgmusic.stop(); //關(guān)閉背景音樂,切記。
}
}
package com.hongyuan.test;
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.LineUnavailableException;
import
javax.sound.sampled.SourceDataLine;
import
javax.sound.sampled.UnsupportedAudioFileException;
public class MusicTest {
public static final String MUSIC_FILE = "相逢一笑.wav";
public static void main(String[] args) throws
LineUnavailableException,
UnsupportedAudioFileException, IOException {
// 獲取音頻輸入流
AudioInputStream audioInputStream =
AudioSystem
.getAudioInputStream(new File(MUSIC_FILE));
//
獲取音頻編碼對(duì)象
AudioFormat audioFormat = audioInputStream.getFormat();
// 設(shè)置數(shù)據(jù)輸入
DataLine.Info dataLineInfo = new
DataLine.Info(SourceDataLine.class,
audioFormat,
AudioSystem.NOT_SPECIFIED);
SourceDataLine sourceDataLine =
(SourceDataLine)
AudioSystem
.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
/*
* 從輸入流中讀取數(shù)據(jù)發(fā)送到混音器
*/
int count;
byte tempBuffer[]
= new byte[1024];
while ((count = audioInputStream.read(tempBuffer, 0,
tempBuffer.length)) != -1) {
if (count 0)
{
sourceDataLine.write(tempBuffer, 0, count);
}
}
//
清空數(shù)據(jù)緩沖,并關(guān)閉輸入
sourceDataLine.drain();
sourceDataLine.close();
}
}
哈哈 我剛剛做好了一個(gè)俄羅斯方塊
如果有興趣交流下 可聯(lián)系QQ 119508078
下面給你播放音樂的代碼
try {
FileInputStream fileau = new FileInputStream("Start.wav");
AudioStream as = new AudioStream(fileau);
AudioPlayer.player.start(as);
}
catch (IOException ie)
{ }
記得引入
import java.io.* ;
import sun.audio.*;
網(wǎng)頁名稱:java播放聲音的代碼 java 音頻播放
新聞來源:http://aaarwkj.com/article26/hhppjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站策劃、網(wǎng)站營銷、App設(shè)計(jì)、Google、App開發(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í)需注明來源: 創(chuàng)新互聯(lián)