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

javapcmwav

發布時間:2022-05-13 16:59:43

❶ 哪個格式的音樂音質最好

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下的標准音頻格式。

❷ 學慣用java文件轉換需要什麼知識

非專業人士湊個熱鬧,答錯勿噴。
這些知識屬於多媒體,音頻編碼解碼相關。
首先你要熟悉兩種音頻的編碼格式,silk是skype的一種編碼,wav使用的就是pcm編碼。
至於想要用純java實現,不是很推薦,編碼解碼都是很考慮效率的,純java寫的話,效率很可能不如C語寫的。
學習資料的話,建議去github找找開源資料,比如我剛才搜到的silk-v3-decoder,代碼是C的,如果你真的能讀懂的話,自己用java實現起來是沒問題的。
編程靠的是積累,積累到一定程度的時候,編程語言只是載體,具體實現用什麼語言都已經顯得無所謂了。

❸ 哪位專家能幫我用JAVA做一個音樂播放器,謝謝!

網上就有java的音樂播放器

Java播放器代碼

package com.test.audio;

import java.io.File;

import java.awt.BorderLayout;

import java.awt.FileDialog;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.Label;

import java.awt.List;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.MenuShortcut;

import java.awt.Panel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.SourceDataLine;

public class MusicPlayer extends Frame {

boolean isStop = true; //控制播放線程

boolean hasStop = true; //播放線程狀態

String filepath; //播放文件目錄

String filename; //播放文件名稱

AudioInputStream audioInputStream; //文件流

AudioFormat audioFormat; //文件格式

SourceDataLine sourceDataLine; //輸出設備

List list;//文件列表

Label labelfilepath; //播放目錄顯示標簽

Label labelfilename; //播放文件顯示標簽

public MusicPlayer() {

//設置窗體屬性

setLayout(new BorderLayout());

setTitle("MP3音樂播放器");

setSize(350, 370);

//建立菜單欄

MenuBar menubar = new MenuBar();

Menu menufile = new Menu("文件");

MenuItem menuopen = new MenuItem("打開", new MenuShortcut(KeyEvent.VK_O));

menufile.add(menuopen);

menufile.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

open();

}

});

menubar.add(menufile);

setMenuBar(menubar);

//文件列表

list = new List(10);

list.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

//雙擊時處理

if (e.getClickCount() == 2) {

//播放選中的文件

filename = list.getSelectedItem();

play();

}

}

});

add(list, "Center");

//信息顯示

Panel panel = new Panel(new GridLayout(2, 1));

labelfilepath = new Label("播放目錄:");

labelfilename = new Label("播放文件:");

panel.add(labelfilepath);

panel.add(labelfilename);

add(panel, "North");

//注冊窗體關閉事件

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

setVisible(true);

}

//打開

private void open() {

FileDialog dialog = new FileDialog(this, "Open", 0);

dialog.setVisible(true);

filepath = dialog.getDirectory();

if (filepath != null) {

labelfilepath.setText("播放目錄:" + filepath);

//顯示文件列表

list.removeAll();

File filedir = new File(filepath);

File[] filelist = filedir.listFiles();

for (File file : filelist) {

String filename = file.getName().toLowerCase();

if (filename.endsWith(".mp3") || filename.endsWith(".wav")) {

list.add(filename);

}

}

}

}

//播放

private void play() {

try {

isStop = true;//停止播放線程

//等待播放線程停止

System.out.print("開始播放:" + filename);

while (!hasStop) {

System.out.print(".");

try {

Thread.sleep(10);

} catch (Exception e) {

}

}

System.out.println("");

File file = new File(filepath + filename);

labelfilename.setText("播放文件:" + filename);

//取得文件輸入流

audioInputStream = AudioSystem.getAudioInputStream(file);

audioFormat = audioInputStream.getFormat();

//轉換MP3文件編碼

if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {

audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,

audioFormat.getSampleRate(), 16, audioFormat

.getChannels(), audioFormat.getChannels() * 2,

audioFormat.getSampleRate(), false);

audioInputStream = AudioSystem.getAudioInputStream(audioFormat,

audioInputStream);

}

//打開輸出設備

DataLine.Info dataLineInfo = new DataLine.Info(

SourceDataLine.class, audioFormat,

AudioSystem.NOT_SPECIFIED);

sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

sourceDataLine.open(audioFormat);

sourceDataLine.start();

//創建獨立線程進行播放

isStop = false;

Thread playThread = new Thread(new PlayThread());

playThread.start();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

new MusicPlayer();

}

class PlayThread extends Thread {

byte tempBuffer[] = new byte[320];

public void run() {

try {

int cnt;

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 (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

}

}

❹ java實現 mp3格式轉換wav

❺ java寫的音樂播放器,只能播放wav文件或者mp3文件,怎麼把程序整合在一起,使播放器既能放wav,也能放mp3

既然是java,那麼就可以下載天天動聽啊!大部分的音樂格式都能放。

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

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)也相當不錯,這些格式音質都相當高,甚至對於對聲音頗有要求的用戶來說表現也不差。

android 播放器怎麼播放wav格式文件

WAV格式的細節在互聯網上都可以找到,你僅僅需要在Google上搜索下。但是,遺憾的是,我並沒有搜索到一個很好的Java庫來讀取WAV文件,而且可以移植到Android下。因此,我自己寫了一些簡單的代碼。

下面這個方法就是如何讀取一個WAV文件的頭部:

private static final String RIFF_HEADER = "RIFF";
private static final String WAVE_HEADER = "WAVE";
private static final String FMT_HEADER = "fmt ";
private static final String DATA_HEADER = "data";

private static final int HEADER_SIZE = 44;

private static final String CHARSET = "ASCII";

/* */

public static WavInfo readHeader(InputStream wavStream) throws IOException,
DecoderException {

ByteBuffer buffer = ByteBuffer.allocate(HEADER_SIZE);
buffer.order(ByteOrder.LITTLE_ENDIAN);

wavStream.read(buffer.array(), buffer.arrayOffset(), buffer.capacity());

buffer.rewind();
buffer.position(buffer.position() + 20);
int format = buffer.getShort();
checkFormat(format == 1, "Unsupported encoding: " + format); // 1 means
// Linear
// PCM
int channels = buffer.getShort();
checkFormat(channels == 1 || channels == 2, "Unsupported channels: "
+ channels);
int rate = buffer.getInt();
checkFormat(rate <= 48000 rate >= 11025, "Unsupported rate: " + rate);
buffer.position(buffer.position() + 6);
int bits = buffer.getShort();
checkFormat(bits == 16, "Unsupported bits: " + bits);
int dataSize = 0;
while (buffer.getInt() != 0x) { // "data" marker
Log.d(TAG, "Skipping non-data chunk");
int size = buffer.getInt();
wavStream.skip(size);

buffer.rewind();
wavStream.read(buffer.array(), buffer.arrayOffset(), 8);
buffer.rewind();
}
dataSize = buffer.getInt();
checkFormat(dataSize > 0, "wrong datasize: " + dataSize);

return new WavInfo(new FormatSpec(rate, channels == 2), dataSize);
}
上面的代碼中,缺少的部分應該是顯而易見的。正如你所看到的,僅僅支持16位,但在你可以修改代碼以支持8位(AudioTrack不支持任何其他解析度的)。

下面這個方法,則是用來讀取文件剩餘的部分 – 音頻數據。

public static byte[] readWavPcm(WavInfo info, InputStream stream)
throws IOException {
byte[] data = new byte[info.getDataSize()];
stream.read(data, 0, data.length);
return data;
}
我們讀取的WavInfo結構體,包含采樣率,解析度和聲道數已經足夠讓我們去播放我們讀取的音頻了。

如果我們不需要將全部音頻數據一次性放入內存中,我們可以使用一個InputStream,一點一點地讀取。
轉載

❽ 如何使得java swing里加入的背景音樂 可用按鈕控制播放與停止


JavaSound是一個小巧的低層API,支持數字音頻和MIDI數據的記錄/回放。在JDK 1.3.0之前,JavaSound是一個標準的Java擴展API,但從Java 2的1.3.0版開始,JavaSound就被包含到JDK之中。由於Java有著跨平台(操作系統、硬體平台)的特點,基於JavaSound的音頻處理程序(包括本文的程序)能夠在任何實現了java 1.3+的系統上運行,無需加裝任何支持軟體。

使用JavaSound API,可以實現各種基於聲音的應用,例如聲音錄制、音樂播放、網路電話、音樂編輯等。JavaSound API又以各種解碼和合成器SPI(服務提供者介面, Service Provider Interface)為基礎,實現各種音樂格式的解碼與轉碼。

在處理輸入音頻時,對於來自各種音頻輸入埠的信號,例如麥克風、CD播放器、磁帶播放器等,可以在它們到達TargetDataLine之前,利用混頻器控制輸入混頻,最後在程序中通過TargetDataLine獲得數字化的音頻輸入流。

類似地,在處理輸出音頻時,混頻器用來對一系列來自SourceDataLine的數據進行混頻處理,經處理後的信號可輸出到各種輸出埠,例如揚聲器、耳機等。SourceDataLine是一個可寫入音頻信號數字流的設備,例如,我們可以從一個WAV文件讀取內容寫入到SourceDataLine,然後再通過揚聲器輸出。

其流程圖如圖17-7所示。


圖17-7 音頻輸入輸入流程圖

為了支持mp3的播放,我們必須添加mp3的SPI支持庫。首先需要下載mp3的支持庫:

● 官方網站:http://www.javazoom.NET/

● 下載頁面:http://www.javazoom.net/mp3spi/sources.html

● 下載地址:http://www.javazoom.Net/mp3spi/sources/mp3spi1.9.4.zip

● 下載文件:mp3spi1.9.4.zip

將mp3spi1.9.4.zip中的三個Jar文件jl1.0.jar 、mp3spi1.9.4.jar 、tritonus_share.jar添加到當前項目中即可。

下面我們來實現一個MP3音樂播放器,實現的功能是:單擊【文件】à【打開】彈出文件選擇對話框,將選擇目錄的所有mp3和wav文件加入到播放列表中,雙擊播放列表中的音樂文件實現音樂的播放和切換。

要實現該程序,首先需要提供了一個主程序窗口,該窗口提供了各種界面組件和操作事件的控制,並包含一個音樂播放的子線程,子線程由主線程式控制制。因此有兩個類:

● 音樂播放器主程序MusicPlayer.java

● 播放線程PlayThread.java

(1)音樂播放器主程序MusicPlayer.java

package com.test.audio;

import java.io.File;

import java.awt.BorderLayout;

import java.awt.FileDialog;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.Label;

import java.awt.List;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.MenuShortcut;

import java.awt.Panel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.SourceDataLine;

public class MusicPlayer extends Frame {

boolean isStop = true;// 控制播放線程

boolean hasStop = true;// 播放線程狀態

String filepath;// 播放文件目錄

String filename;// 播放文件名稱

AudioInputStream audioInputStream;// 文件流

AudioFormat audioFormat;// 文件格式

SourceDataLine sourceDataLine;// 輸出設備

List list;// 文件列表

Label labelfilepath;//播放目錄顯示標簽

Label labelfilename;//播放文件顯示標簽

public MusicPlayer() {

// 設置窗體屬性

setLayout(new BorderLayout());

setTitle("MP3音樂播放器");

setSize(350, 370);

// 建立菜單欄

MenuBar menubar = new MenuBar();

Menu menufile = new Menu("文件");

MenuItem menuopen = new MenuItem("打開", new MenuShortcut(KeyEvent.VK_O));

menufile.add(menuopen);

menufile.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

open();

}

});

menubar.add(menufile);

setMenuBar(menubar);

// 文件列表

list = new List(10);

list.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

// 雙擊時處理

if (e.getClickCount() == 2) {

// 播放選中的文件

filename = list.getSelectedItem();

play();

}

}

});

add(list, "Center");

// 信息顯示

Panel panel = new Panel(new GridLayout(2, 1));

labelfilepath = new Label("播放目錄:");

labelfilename = new Label("播放文件:");

panel.add(labelfilepath);

panel.add(labelfilename);

add(panel, "North");

// 注冊窗體關閉事件

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

setVisible(true);

}

// 打開

private void open() {

FileDialog dialog = new FileDialog(this, "Open", 0);

dialog.setVisible(true);

filepath = dialog.getDirectory();

if (filepath != null) {

labelfilepath.setText("播放目錄:" + filepath);

// 顯示文件列表

list.removeAll();

File filedir = new File(filepath);

File[] filelist = filedir.listFiles();

for (File file : filelist) {

String filename = file.getName().toLowerCase();

if (filename.endsWith(".mp3") || filename.endsWith(".wav")) {

list.add(filename);

}

}

}

}

// 播放

private void play() {

try {

isStop = true;// 停止播放線程

// 等待播放線程停止

System.out.print("開始播放:" + filename);

while (!hasStop) {

System.out.print(".");

try {

Thread.sleep(10);

} catch (Exception e) {

}

}

System.out.println("");

File file = new File(filepath + filename);

labelfilename.setText("播放文件:" + filename);

// 取得文件輸入流

audioInputStream = AudioSystem.getAudioInputStream(file);

audioFormat = audioInputStream.getFormat();

// 轉換mp3文件編碼

if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {

audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,

audioFormat.getSampleRate(), 16, audioFormat

.getChannels(), audioFormat.getChannels() * 2,

audioFormat.getSampleRate(), false);

audioInputStream = AudioSystem.getAudioInputStream(audioFormat,

audioInputStream);

}

// 打開輸出設備

DataLine.Info dataLineInfo = new DataLine.Info(

SourceDataLine.class, audioFormat,

AudioSystem.NOT_SPECIFIED);

sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

sourceDataLine.open(audioFormat);

sourceDataLine.start();

// 創建獨立線程進行播放

isStop = false;

Thread playThread = new Thread(new PlayThread());

playThread.start();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

new MusicPlayer();

}

}

在該主程序中添加一個入口主函數main()來啟動該主程序即可。

(2)播放線程PlayThread.java

該程序的代碼如下:

class PlayThread extends Thread {

byte tempBuffer[] = new byte[320];

public void run() {

try {

int cnt;

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 (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

}

(3)運行MP3音樂播放器

完成以上代碼後,即可運行主程序MusicPlayer,就會顯示如圖17-9示的窗口:


圖17-9 音樂播放器主窗口

單擊【文件】à【打開】,就會彈出如圖17-10所示的打開窗口:


圖17-10 選擇文件

選中某一個音樂文件後,單擊【打開】按鈕,就會將該目錄下的所有mp3和wav音樂文件添加到播放器的播放列表中,如圖17-11所示。


圖17-11 播放列表

雙擊該播放列表中的音樂文件,就會開始播放音樂了。在音樂播放的過程中,你還可以隨時雙擊某一個文件來停止當前的音樂播放,並開始播放新的音樂文件。

❾ java大神求解啊,如何用java編寫一個音樂播放器,然後播放器裡面的歌可以順序播放的。

參考代碼如下
首先下載播放mp3的包,比如mp3spi1.9.4.jar。在工程中添加這個包。
播放器演示代碼如下
package com.test.audio;
import java.io.File;
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

public class MusicPlayer extends Frame {
/**
*
*/
private static final long serialVersionUID = -2605658046194599045L;
boolean isStop = true;// 控制播放線程
boolean hasStop = true;// 播放線程狀態

String filepath;// 播放文件目錄
String filename;// 播放文件名稱
AudioInputStream audioInputStream;// 文件流
AudioFormat audioFormat;// 文件格式
SourceDataLine sourceDataLine;// 輸出設備

List list;// 文件列表
Label labelfilepath;//播放目錄顯示標簽
Label labelfilename;//播放文件顯示標簽

public MusicPlayer() {
// 設置窗體屬性
setLayout(new BorderLayout());
setTitle("MP3 Music Player");
setSize(350, 370);

// 建立菜單欄
MenuBar menubar = new MenuBar();
Menu menufile = new Menu("File");
MenuItem menuopen = new MenuItem("Open", new MenuShortcut(KeyEvent.VK_O));
menufile.add(menuopen);
menufile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open();
}
});
menubar.add(menufile);
setMenuBar(menubar);

// 文件列表
list = new List(10);
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// 雙擊時處理
if (e.getClickCount() == 2) {
// 播放選中的文件
filename = list.getSelectedItem();
play();
}
}
});
add(list, "Center");

// 信息顯示
Panel panel = new Panel(new GridLayout(2, 1));
labelfilepath = new Label("Dir:");
labelfilename = new Label("File:");
panel.add(labelfilepath);
panel.add(labelfilename);
add(panel, "North");

// 注冊窗體關閉事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}

// 打開
private void open() {
FileDialog dialog = new FileDialog(this, "Open", 0);
dialog.setVisible(true);
filepath = dialog.getDirectory();
if (filepath != null) {
labelfilepath.setText("Dir:" + filepath);

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

// 播放
private void play() {
try {
isStop = true;// 停止播放線程
// 等待播放線程停止
System.out.print("Start:" + filename);
while (!hasStop) {
System.out.print(".");
try {
Thread.sleep(10);
} catch (Exception e) {
}
}
System.out.println("");
File file = new File(filepath + filename);
labelfilename.setText("Playing:" + filename);

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

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

// 創建獨立線程進行播放
isStop = false;
Thread playThread = new Thread(new PlayThread());
playThread.start();
} catch (Exception e) {
e.printStackTrace();
}
}

class PlayThread extends Thread {
byte tempBuffer[] = new byte[320];

public void run() {
try {
int cnt;
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 (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
}

public static void main(String args[]) {
new MusicPlayer();
}
}

閱讀全文

與javapcmwav相關的資料

熱點內容
加密歐美航線 瀏覽:48
svn怎麼看伺服器的地址 瀏覽:187
騎馬與砍殺1命令部隊用盾牌 瀏覽:595
光纜pdf 瀏覽:350
加密流量實時監測 瀏覽:628
360壓縮和好壓哪個好 瀏覽:61
python判斷變數是否為list 瀏覽:906
雲伺服器1m帶寬表示什麼意思 瀏覽:702
429升冷櫃用多大壓縮機 瀏覽:116
決策樹演算法java實現 瀏覽:376
androidtv開發焦點控制 瀏覽:328
論人的成長pdf 瀏覽:282
python網站源代碼 瀏覽:827
手機文件壓縮器怎麼安裝 瀏覽:112
androidsdk封裝 瀏覽:266
微信加密不知道怎麼取消 瀏覽:705
分析演算法設計程序編寫 瀏覽:843
linux啟動dhcp失敗 瀏覽:356
芙蓉出水選股公式源碼 瀏覽:763
linux更改密碼錯誤 瀏覽:244