導航:首頁 > 編程語言 > javamp3pcm

javamp3pcm

發布時間:2023-07-09 00:59:55

1. 如何用java做一個音樂播放器

首先下載播放mp3的包,比如mp3spi1.9.4.jar。在工程中添加這個包。

播放器演示代碼如下

packagecom.test.audio;
importjava.io.File;
importjava.awt.BorderLayout;
importjava.awt.FileDialog;
importjava.awt.Frame;
importjava.awt.GridLayout;
importjava.awt.Label;
importjava.awt.List;
importjava.awt.Menu;
importjava.awt.MenuBar;
importjava.awt.MenuItem;
importjava.awt.MenuShortcut;
importjava.awt.Panel;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyEvent;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;

importjavax.sound.sampled.AudioFormat;
importjavax.sound.sampled.AudioInputStream;
importjavax.sound.sampled.AudioSystem;
importjavax.sound.sampled.DataLine;
importjavax.sound.sampled.SourceDataLine;

{
/**
*
*/
=-2605658046194599045L;
booleanisStop=true;//控制播放線程
booleanhasStop=true;//播放線程狀態

液悔Stringfilepath;//播放文件目錄
Stringfilename;//播放文件名稱
;//文件流
AudioFormataudioFormat;//文件格式
SourceDataLinesourceDataLine;//輸出設備

Listlist;//文件列表
Labellabelfilepath;//播放目錄顯示標簽
Labellabelfilename;//播放文件顯示標簽

publicMusicPlayer(){
鬧磨正//設置窗體屬性
setLayout(newBorderLayout());
setTitle("MP3MusicPlayer");
setSize(350,370);

//建立菜單欄
MenuBarmenubar=newMenuBar();
Menumenufile=newMenu("File");
MenuItemmenuopen=newMenuItem("Open",newMenuShortcut(KeyEvent.VK_O));
menufile.add(menuopen);
游宴menufile.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
open();
}
});
menubar.add(menufile);
setMenuBar(menubar);

//文件列表
list=newList(10);
list.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente){
//雙擊時處理
if(e.getClickCount()==2){
//播放選中的文件
filename=list.getSelectedItem();
play();
}
}
});
add(list,"Center");

//信息顯示
Panelpanel=newPanel(newGridLayout(2,1));
labelfilepath=newLabel("Dir:");
labelfilename=newLabel("File:");
panel.add(labelfilepath);
panel.add(labelfilename);
add(panel,"North");

//注冊窗體關閉事件
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
setVisible(true);
}

//打開
privatevoidopen(){
FileDialogdialog=newFileDialog(this,"Open",0);
dialog.setVisible(true);
filepath=dialog.getDirectory();
if(filepath!=null){
labelfilepath.setText("Dir:"+filepath);

//顯示文件列表
list.removeAll();
Filefiledir=newFile(filepath);
File[]filelist=filedir.listFiles();
for(Filefile:filelist){
Stringfilename=file.getName().toLowerCase();
if(filename.endsWith(".mp3")||filename.endsWith(".wav")){
list.add(filename);
}
}
}
}

//播放
privatevoidplay(){
try{
isStop=true;//停止播放線程
//等待播放線程停止
System.out.print("Start:"+filename);
while(!hasStop){
System.out.print(".");
try{
Thread.sleep(10);
}catch(Exceptione){
}
}
System.out.println("");
Filefile=newFile(filepath+filename);
labelfilename.setText("Playing:"+filename);

//取得文件輸入流
audioInputStream=AudioSystem.getAudioInputStream(file);
audioFormat=audioInputStream.getFormat();
//轉換mp3文件編碼
if(audioFormat.getEncoding()!=AudioFormat.Encoding.PCM_SIGNED){
audioFormat=newAudioFormat(AudioFormat.Encoding.PCM_SIGNED,
audioFormat.getSampleRate(),16,audioFormat
.getChannels(),audioFormat.getChannels()*2,
audioFormat.getSampleRate(),false);
audioInputStream=AudioSystem.getAudioInputStream(audioFormat,
audioInputStream);
}

//打開輸出設備
DataLine.InfodataLineInfo=newDataLine.Info(
SourceDataLine.class,audioFormat,
AudioSystem.NOT_SPECIFIED);
sourceDataLine=(SourceDataLine)AudioSystem.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();

//創建獨立線程進行播放
isStop=false;
ThreadplayThread=newThread(newPlayThread());
playThread.start();
}catch(Exceptione){
e.printStackTrace();
}
}

classPlayThreadextendsThread{
bytetempBuffer[]=newbyte[320];

publicvoidrun(){
try{
intcnt;
hasStop=false;
//讀取數據到緩存數據
while((cnt=audioInputStream.read(tempBuffer,0,
tempBuffer.length))!=-1){
if(isStop)
break;
if(cnt>0){
//寫入緩存數據
sourceDataLine.write(tempBuffer,0,cnt);
}
}
//Block等待臨時數據被輸出為空
sourceDataLine.drain();
sourceDataLine.close();
hasStop=true;
}catch(Exceptione){
e.printStackTrace();
System.exit(0);
}
}
}

publicstaticvoidmain(Stringargs[]){
newMusicPlayer();
}
}

2. 所有音樂格式中,哪種格式音質最好求解答

PCM,是音頻文件里,級別最高的,是所有數字音頻(模擬的不包括在內)的始祖,保真度最高,體積十分龐大,常見的格式有pcm和cda,多用來錄制唱片如cd文件。CD不是一種格式,它是一種標准,詳細請見SONY(索尼)公布的官方紅皮書,CD是利用特殊的方式,直接刻錄音軌保存在CD-ROM碟片(專用的CD盤,當然也可以是普通的CD-ROM盤,這是後來修改的)上的,無法作為一種格式來保存。
所以,應當說,PCM的格式是音質最好最高,但是它的體積極其巨大,所以一般使用WAV作為原始文件來保存音頻文件,質量也是相當高,損失幾乎相當的少,但體積也比較大,這是微軟開發並圖鑒的一種格式,適合Windows操作系統,在現在最新的MAC系統上也可以使用。擴展名:.wav
在MAC系統上專用的原始音頻格式,是AIFF,擴展名為Aiff,這是由蘋果公司獨立開發的,在Mac上十分常見。也就是說在Mac上這是最好的格式(PCM除外)。
在Unix和Java平台下(多指SUN的平台),相應的格式是AU,擴展名就是au。它是目前在Unix和java下的標准音頻格式。
以上格式均為原始文件格式,一般都是體積巨大,為了便於在計算機上流傳,人們開發了壓縮格式,壓縮分為有損壓縮和無損壓縮,顯然有損壓縮的壓縮率更大,但它需要解決的問題就是如何解決音質的問題。一般通常的做法,就是犧牲人耳辨別率比較若以及人耳無法收聽的部分,但是人的耳朵區別很大,所以很難照顧到所有的人。在唱見的格式中,比較不錯的格式有flac(無損,擴展名flac)、Monkey's Audio(無損,擴展名ape)、DTS(多聲道,主要用與DVD,擴展名dtc/wav)、AC3(杜比推出,環繞多聲道,現場感逼真,擴展名ac3)、AAC(收費,音質好,擴展名Aac或mp4)、WMV(這也是種視頻格式,wma和asf的升級版,質量相當高,擴展名wmv),另外還有MusePack(擴展名mpc,完全免費)以及MP3Pro(擴展名mp3)也相當不錯,這些格式音質都相當高,甚至對於對聲音頗有要求的用戶來說表現也不差。

3. java音頻處理問題

為什麼audioFormat.getChannels(), 一次後還要再一個audioFormat.getChannels()*2
每聲道每幀位元組數2位元組,再加上雙聲道所以用聲道數(2)*位元組數(2) = 每幀的總位元組數
看來你的audioFormat不是從AudioInputStream中產生的啊?剛才回答你的問題我還沒注意。原來audioFormat也可以new出來的啊,嘿嘿。

4. 如何將pcm文件轉換為mp3

PCM(Pulse Code Molation----脈碼調制錄音)。所謂PCM錄音就是將聲音等模擬信號變成符號化的脈沖列,再予以記錄。PCM信號是由[1]、[0]等符號構成的數字信號。與模擬信號比,它不易受傳送系統的雜波及失真的影響。動態范圍寬,可得到音質相當好的影響效果。

可以使用Goldwave,只需要用GoldWave打開要轉換的PCM文件,然後在「文件File」選擇另存為save as...,保存類型,選(*mp3),「參數Attributes」里選擇要保存的碼率即可。如下圖所示:

5. java實現 mp3格式轉換wav

閱讀全文

與javamp3pcm相關的資料

熱點內容
源碼微信小程序搭建 瀏覽:278
linux遠程桌面連接命令 瀏覽:859
adams教程pdf 瀏覽:264
Arm和單片機區別 瀏覽:559
阿里雲伺服器綁定主機頭 瀏覽:949
游戲手機什麼最好用安卓 瀏覽:11
江蘇程序員怎麼樣 瀏覽:510
捉妖股選股公式源碼 瀏覽:541
勝利油田的社保用什麼app 瀏覽:460
lru演算法java 瀏覽:129
數據分析系統源碼 瀏覽:539
論語繁體pdf 瀏覽:517
直上指標源碼 瀏覽:193
pythongeohash使用 瀏覽:348
二維熱力圖python 瀏覽:553
如何度過程序員菜鳥階段 瀏覽:505
python子圖標題顯示不出來 瀏覽:538
linux怎麼看連接伺服器的ip 瀏覽:709
windows命令行copy 瀏覽:65
都勻工會卡綁定什麼購物App 瀏覽:274