Ⅰ java播放WAV文件找不到import sun.audio.AudioPlayer;
jdk裡面沒有sun.audio.AudioPlayer這個東東,是三方包的話,如果沒設定好環境變數,沒將這東西放到環境變數裡面,當然找不到了。
WAV用jdk包javax.sound.sampled裡面的東西就可以了。參考例子:
http://hi..com/breezedancer/blog/item/7eebb499680d8f086e068cb9.html
Ⅱ 求教JAVA高手,怎樣調用電腦上的wav格式文件並播放播放聲音不會斷斷續續的,謝謝!!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.*;
import java.io.*;
import javax.sound.sampled.*;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.Border;
public class testmusic {
// static String s1="E:\\nine muses - no playboy - 韓國.wav";
// static String s2="E:\\蔡妍 - my love.wav";
// static String s3="E:\\鋼琴與嗨曲的完美結合 性感女聲慢搖 經典中的經典.wav";
public static void main(String[] args){
test t = new test();
Thread s = new Thread(t);
s.start();
}
}
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[1024];
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();
}
}
}
//import java.io.File;
//import javax.sound.sampled.AudioFormat;
//import javax.sound.sampled.AudioInputStream;
//import javax.sound.sampled.AudioSystem;
//import javax.sound.sampled.Clip;
//import javax.sound.sampled.DataLine;
//try{
//File file = new File("D:\\music\\i - m - back.mp3");
//AudioInputStream stream = AudioSystem.getAudioInputStream(file);
//AudioFormat format = stream.getFormat();
//DataLine.Info info = new DataLine.Info(Clip.class,format);
//Clip clip = (Clip)AudioSystem.getLine(info);
//clip.open(stream);
//clip.start();
//}catch(Exception e){
//e.printStackTrace();
//}
class test extends JFrame implements Runnable,ActionListener{
int x=30,y=40;
JMenuBar jmb= null;
JMenu jm = null;
JMenuItem jmi,jmi1,jmi2=null;
test(){
super("JAVA寫的最原始的WAV格式音樂播放器");
setSize(500,500);
jmb=new JMenuBar();
jm = new JMenu("文件");
jmi = new JMenuItem("播放");
jmi1= new JMenuItem("打開");
jmi2=new JMenuItem("退出");
this.setLayout(new BorderLayout());
this.add(jmb,BorderLayout.NORTH);
jmb.add(jm);
jm.add(jmi);
jm.add(jmi1);
jm.add(jmi2);
jmi1.addActionListener(this);
jmi2.addActionListener(this);
jmi1.setActionCommand("open");
jmi2.setActionCommand("exit");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
this.getContentPane().setBackground(Color.black);
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{
Thread.sleep(1000);
x+=10;
y+=10;
repaint();
if(x==500){
x=30;
}
if(y==500){
y=40;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.red);
g.fillOval(x,y,40,40);
g.fill3DRect(y+60,x+60,60,60,true);
g.setColor(Color.yellow);
g.setFont(new Font("華文彩雲",Font.BOLD,20));
g.drawString("點擊菜單條的打開選中你電腦裡面的WAV格式音樂", 20, 300);
g.drawString("點擊退出即可退出",20,330);
g.drawString("別的按鈕沒有注冊監聽,無效。。。。",20,350);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("open")){
JFileChooser jf = new JFileChooser();
jf.showOpenDialog(null);
String s1=(jf.getSelectedFile().getAbsoluteFile()).toString();
//System.out.println(s1);
AePlayWave a = new AePlayWave(s1);
a.start();
}
if(e.getActionCommand().equals("exit")){
System.exit(0);
}
}
}
僅支持WAV格式 點擊打開按鈕播放
Ⅲ java實現 mp3格式轉換wav
/*
*實現錄音機的功能
*/
packagecom.liuyun.MyRecord1;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.sound.sampled.*;
importjava.lang.*;
{
//定義錄音格式
AudioFormataf=null;
//定義目標數據行,可以從中讀取音頻數據,該TargetDataLine介面提供從目標數據行的緩沖區讀取所捕獲數據的方法。
TargetDataLinetd=null;
//定義源數據行,源數據行是可以寫入數據的數據行。它充當其混頻器的源。應用程序將音頻位元組寫入源數據行,這樣可處理位元組緩沖並將它們傳遞給混頻器。
SourceDataLinesd=null;
//定義位元組數組輸入輸出流
ByteArrayInputStreams=null;
ByteArrayOutputStreambaos=null;
//定義音頻輸入流
AudioInputStreamais=null;
//定義停止錄音的標志,來控制錄音線程的運行
Booleanstopflag=false;
//記錄開始錄音的時間
longstartPlay;
//定義所需要的組件
JPaneljp1,jp2,jp3;
JLabeljl1=null;
JButtoncaptureBtn,stopBtn,playBtn,saveBtn;
publicstaticvoidmain(String[]args){
//創造一個實例
MyRecordmr=newMyRecord();
}
//構造函數
publicMyRecord()
{
//組件初始化
jp1=newJPanel();
jp2=newJPanel();
jp3=newJPanel();
//定義字體
FontmyFont=newFont("華文新魏",Font.BOLD,30);
jl1=newJLabel("錄音機功能的實現");
jl1.setFont(myFont);
jp1.add(jl1);
captureBtn=newJButton("開始錄音");
//對開始錄音按鈕進行注冊監聽
captureBtn.addActionListener(this);
captureBtn.setActionCommand("captureBtn");
//對停止錄音進行注冊監聽
stopBtn=newJButton("停止錄音");
stopBtn.addActionListener(this);
stopBtn.setActionCommand("stopBtn");
//對播放錄音進行注冊監聽
playBtn=newJButton("播放錄音");
playBtn.addActionListener(this);
playBtn.setActionCommand("playBtn");
//對保存錄音進行注冊監聽
saveBtn=newJButton("保存錄音");
saveBtn.addActionListener(this);
saveBtn.setActionCommand("saveBtn");
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
jp3.setLayout(null);
jp3.setLayout(newGridLayout(1,4,10,10));
jp3.add(captureBtn);
jp3.add(stopBtn);
jp3.add(playBtn);
jp3.add(saveBtn);
//設置按鈕的屬性
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
playBtn.setEnabled(false);
saveBtn.setEnabled(false);
//設置窗口的屬性
this.setSize(400,300);
this.setTitle("錄音機");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand().equals("captureBtn"))
{
//點擊開始錄音按鈕後的動作
//停止按鈕可以啟動
captureBtn.setEnabled(false);
stopBtn.setEnabled(true);
playBtn.setEnabled(false);
saveBtn.setEnabled(false);
//調用錄音的方法
capture();
//記錄開始錄音的時間
startPlay=System.currentTimeMillis();
}elseif(e.getActionCommand().equals("stopBtn")){
//點擊停止錄音按鈕的動作
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
playBtn.setEnabled(true);
saveBtn.setEnabled(true);
//調用停止錄音的方法
stop();
//記錄停止錄音的時間
longstopPlay=System.currentTimeMillis();
//輸出錄音的時間
System.out.println("Playcontinues"+(stopPlay-startPlay));
}elseif(e.getActionCommand().equals("playBtn"))
{
//調用播放錄音的方法
play();
}elseif(e.getActionCommand().equals("saveBtn"))
{
//調用保存錄音的方法
save();
}
}
//開始錄音
publicvoidcapture()
{
try{
//af為AudioFormat也就是音頻格式
af=getAudioFormat();
DataLine.Infoinfo=newDataLine.Info(TargetDataLine.class,af);
td=(TargetDataLine)(AudioSystem.getLine(info));
//打開具有指定格式的行,這樣可使行獲得所有所需的系統資源並變得可操作。
td.open(af);
//允許某一數據行執行數據I/O
td.start();
//創建播放錄音的線程
Recordrecord=newRecord();
Threadt1=newThread(record);
t1.start();
}catch(LineUnavailableExceptionex){
ex.printStackTrace();
return;
}
}
//停止錄音
publicvoidstop()
{
stopflag=true;
}
//播放錄音
publicvoidplay()
{
//將baos中的數據轉換為位元組數據
byteaudioData[]=baos.toByteArray();
//轉換為輸入流
s=newByteArrayInputStream(audioData);
af=getAudioFormat();
ais=newAudioInputStream(s,af,audioData.length/af.getFrameSize());
try{
DataLine.InfodataLineInfo=newDataLine.Info(SourceDataLine.class,af);
sd=(SourceDataLine)AudioSystem.getLine(dataLineInfo);
sd.open(af);
sd.start();
//創建播放進程
Playpy=newPlay();
Threadt2=newThread(py);
t2.start();
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
//關閉流
if(ais!=null)
{
ais.close();
}
if(s!=null)
{
s.close();
}
if(baos!=null)
{
baos.close();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
//保存錄音
publicvoidsave()
{
//取得錄音輸入流
af=getAudioFormat();
byteaudioData[]=baos.toByteArray();
s=newByteArrayInputStream(audioData);
ais=newAudioInputStream(s,af,audioData.length/af.getFrameSize());
//定義最終保存的文件名
Filefile=null;
//寫入文件
try{
//以當前的時間命名錄音的名字
//將錄音的文件存放到F盤下語音文件夾下
FilefilePath=newFile("F:/語音文件");
if(!filePath.exists())
{//如果文件不存在,則創建該目錄
filePath.mkdir();
}
longtime=System.currentTimeMillis();
file=newFile(filePath+"/"+time+".wav");
AudioSystem.write(ais,AudioFileFormat.Type.WAVE,file);
//將錄音產生的wav文件轉換為容量較小的mp3格式
//定義產生後文件名
StringtarFileName=time+".mp3";
Runtimerun=null;
try{
run=Runtime.getRuntime();
longstart=System.currentTimeMillis();
//調用解碼器來將wav文件轉換為mp3文件
<strong><spanstyle="color:#ff0000;">Processp=run.exec(filePath+"/"+"lame-b16"+filePath+"/"+file.getName()+""+filePath+"/"+tarFileName);//16為碼率,可自行修改
</span></strong>//釋放進程
p.getOutputStream().close();
p.getInputStream().close();
p.getErrorStream().close();
p.waitFor();
longend=System.currentTimeMillis();
System.out.println("convertneedcosts:"+(end-start)+"ms");
//刪除無用的wav文件
if(file.exists())
{
file.delete();
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//最後都要執行的語句
//run調用lame解碼器最後釋放內存
run.freeMemory();
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//關閉流
try{
if(s!=null)
{
s.close();
}
if(ais!=null)
{
ais.close();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
//設置AudioFormat的參數
()
{
//下面注釋部分是另外一種音頻格式,兩者都可以
AudioFormat.Encodingencoding=AudioFormat.Encoding.
PCM_SIGNED;
floatrate=8000f;
intsampleSize=16;
StringsignedString="signed";
booleanbigEndian=true;
intchannels=1;
returnnewAudioFormat(encoding,rate,sampleSize,channels,
(sampleSize/8)*channels,rate,bigEndian);
////采樣率是每秒播放和錄制的樣本數
//floatsampleRate=16000.0F;
////采樣率8000,11025,16000,22050,44100
////sampleSizeInBits表示每個具有此格式的聲音樣本中的位數
//intsampleSizeInBits=16;
////8,16
//intchannels=1;
////單聲道為1,立體聲為2
//booleansigned=true;
////true,false
//booleanbigEndian=true;
////true,false
//returnnewAudioFormat(sampleRate,sampleSizeInBits,channels,signed,bigEndian);
}
//錄音類,因為要用到MyRecord類中的變數,所以將其做成內部類
classRecordimplementsRunnable
{
//定義存放錄音的位元組數組,作為緩沖區
bytebts[]=newbyte[10000];
//將位元組數組包裝到流里,最終存入到baos中
//重寫run函數
publicvoidrun(){
baos=newByteArrayOutputStream();
try{
stopflag=false;
while(stopflag!=true)
{
//當停止錄音沒按下時,該線程一直執行
//從數據行的輸入緩沖區讀取音頻數據。
//要讀取bts.length長度的位元組,cnt是實際讀取的位元組數
intcnt=td.read(bts,0,bts.length);
if(cnt>0)
{
baos.write(bts,0,cnt);
}
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
//關閉打開的位元組數組流
if(baos!=null)
{
baos.close();
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
td.drain();
td.close();
}
}
}
}
//播放類,同樣也做成內部類
classPlayimplementsRunnable
{
//播放baos中的數據即可
publicvoidrun(){
bytebts[]=newbyte[10000];
try{
intcnt;
//讀取數據到緩存數據
while((cnt=ais.read(bts,0,bts.length))!=-1)
{
if(cnt>0)
{
//寫入緩存數據
//將音頻數據寫入到混頻器
sd.write(bts,0,cnt);
}
}
}catch(Exceptione){
e.printStackTrace();
}finally{
sd.drain();
sd.close();
}
}
}
}
Ⅳ java 怎麼合並兩個wav文件
//幫你寫了一個,是兩個mp3文件的合並
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
/**
*把兩個.mp3文件合並成一個.mp3文件
*
*@authorwangran
*
*/
publicclassMerger{
publicMerger(){
}
publicstaticvoidmain(String[]args){
FileInputStreamfis=null;
FileOutputStreamfos=null;
BufferedInputStreambis=null;
BufferedOutputStreambos=null;
//源文件
Filein1=newFile("D:/雜/娛樂/音樂/hero.mp3");
Filein2=newFile("D:/雜/娛樂/音樂/carelesswhisper.mp3");
//目標文件
Fileout=newFile("D:/music2.mp3");
//進行流操作
try{
fis=newFileInputStream(in1);
fos=newFileOutputStream(out,true);
bis=newBufferedInputStream(fis);
bos=newBufferedOutputStream(fos);
intlen;
byte[]buf=newbyte[1024];
while((len=bis.read(buf))!=-1){
bos.write(buf,0,len);
}
bos.flush();
fis=newFileInputStream(in2);
bis=newBufferedInputStream(fis);
while((len=bis.read(buf))!=-1){
bos.write(buf,0,len);
}
bos.flush();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
//關閉流
if(bis!=null)
try{
bis.close();
}catch(IOExceptione){
e.printStackTrace();
}
if(bos!=null)
try{
bos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
Ⅳ JAVA中如何解析WAV文件,有具體代碼么WAV文件存放數據具體是哪個欄位
JMF框架 Java Media Frame 是SUN公司出的解析多媒體的框架
說明文檔很多 自己去網路查吧 提醒你下 這個東東很不常用 還不如用。NET解析 因為C#裡面的標准庫裡面就包含解析多媒體的API了
Ⅵ java 代碼是否可以實現把wav 文件轉成 mp3 的呢
JAVE官方的jar包帶了ffmpeg的exe程序,所以在windows上可以直接使用,
但是如果要在Linux上用就得先把ffmpeg的環境裝好。
Filesource=newFile("source.wav");
Filetarget=newFile("target.mp3");
AudioAttributesaudio=newAudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(newInteger(128000));
audio.setChannels(newInteger(2));
audio.setSamplingRate(newInteger(44100));
EncodingAttributesattrs=newEncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoderencoder=newEncoder();
encoder.encode(source,target,attrs);
Jar下載地址:http://www.sauronsoftware.it/projects/jave/download.php
Ⅶ java讀取wav 把wav放在哪兒
Applet有一個屬性,類型為AppletStub。
你的Applet沒有在頁面中,AppletStub屬性就會為null。
如果你想編寫java的音頻播放器,請使用jmf。
1、安裝windows版jmf(當然,你的操作系統是windows)
2、把%安裝目錄%\lib\jmf.jar添加到classpath
注意:不能只是下載一個jmf.jar文件,然後添加到classpath,這是不行的。你需要安裝jmf。
import java.io.File;
import java.io.IOException;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
public class MyPlayer {
private static String path = "殺破狼.mp3";
public static void main(String[] args) {
File f1 = new File(path);
try {
Player player = Manager.createRealizedPlayer(f1.toURI().toURL());
player.prefetch();
player.start();
} catch (CannotRealizeException ex) {
} catch (NoPlayerException ex) {
} catch (IOException ex) {
}
}
}
Ⅷ 我用java轉換的wav格式文件使用火狐瀏覽器無法播放
HTML5視頻或音頻的話,檢查一下壓縮碼率,如果不是,瀏覽器需要安裝相關插件才能播放,比如Flash,必須依賴插件才能正常播放,瀏覽器默認是不能直接打開的。
Ⅸ java如何播放wav文件
建議使用jmf(java media framwork),這樣就能播放mp3等眾多格式的音樂了;去sun官網下一個jmf,安裝好後,把
jmf.jar包引入便可使用,給出例zi代碼:使用方法:構造函數中傳入文件路徑名即可,播放、暫停、繼續、停止等功能均已實現。
/*************************************************
* Subclass: MusicPlay
*************************************************/
public class MusicPlay implements Runnable {
private Time zeroTime = new Time(0);
private Player player;
private boolean isloop = false;
/*************************************************
* Function: MusicPlay Description: constructor, load the music file and
* get ready for play Called By: MultiMedia()
*************************************************/
// 實例化各個參數 filename 為文件名,可為絕對路徑
public MusicPlay(String filename) {
File file = new File(filename);
try {
player = Manager.createRealizedPlayer(file.toURI().toURL());
player.addControllerListener(new ControllListener());
} catch (NoPlayerException e) {
e.printStackTrace();
} catch (CannotRealizeException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*************************************************
* Function: isRunning Description: test if this music is playing Called
* By:
*************************************************/
public boolean isRunning() {
return player.getState() == Player.Started;
}
/*************************************************
* Function: play Description: play the music for once Called By:
* resumeAll()
*************************************************/
// 只播放一次
public void play() {
if (!turnOff)
player.start();
}
/*************************************************
* Function: replay Description: replay the music Called By: musics that
* will be played many times will invoke this methed
*************************************************/
// 再播放一次
public void replay() {
if (turnOff)
return;
if (player.getState() == Controller.Prefetched)
player.setMediaTime(zeroTime);
player.start();
}
/*************************************************
* Function: stop Description: stop this music Called By: stopAll() of
* upper class,suspendAll() of upper
* class,BackroundForMenuPanel,GameOverPanel
*************************************************/
public void stop() {
player.stop();
}
/*************************************************
* Function: close Description: dispose the music Called By: closeAll()
* of super class
*************************************************/
public void close() {
player.stop();
player.close();
}
/*************************************************
* Function: loop Description: make the music played repetitiously
* Called By: music that will repetitious play
*************************************************/
// 循環播放
public void loop() {
if (turnOff)
return;
isloop = true;
player.prefetch();
replay();
}
/*************************************************
* Function: run Description: trig this music Called By: Override method
*************************************************/
@Override
public void run() {
loop();
}
/*************************************************
* Subclass: ControllListener Description: listener for playing and
* implement playing repetitiously
*************************************************/
// 通過對播放進度的監聽,實現循環播放
private class ControllListener implements ControllerListener {
public void controllerUpdate(ControllerEvent e) {
if (e instanceof EndOfMediaEvent) {
if (isloop) {
player.setMediaTime(new Time(0));
player.start();
}
}
}
}
}
Ⅹ java如何對某文件夾內的wav文件批量改名
importjava.io.File;
publicclassChangeFileName{
publicstaticvoidchangeName(Stringpath){
intcount=1;
Filefile=newFile(path);
if(file.isDirectory()){
File[]dirFile=file.listFiles();
for(Filef:dirFile){
if(f.isDirectory())
continue;//changeName(f.getAbsolutePath());
else{
if(f.getName().endsWith(".wav")){
StringfileName="000"+count;
StringorigUrl=f.getAbsolutePath();
f.renameTo(newFile(origUrl.substring(0,origUrl.lastIndexOf('\')+1)+fileName.substring(fileName.length()-4)+".cvv"));
count+=1;
}
}
}
}
}
publicstaticvoidmain(String[]args){
StringfileUrl=System.getProperty("user.dir")+"/resource";
changeName(fileUrl);
}
}