Bang hội
» Thủ thuật » Nokia s40 » [Tiện ích] - Phát nhạc trong ứng dụng Java desktop - Play sound in java application
Pham_loi
Chức vụ: 22:11:09, 23-05-2016 |
Chào các bạn, âm thanh cũng là một phần quan trọng trong một ứng dụng gọi là 'friendly', chắc hẳn kia code application chúng ta không chú ý đến vấn đề này cho lắm đa phân chỉ muố là giao điện thật tốt, Nhất là những chương trình thiên về giải trí thì âm thanh là một phần không thể thiếu
Hôm này Huy xin gửi đến các bạn một class đo mình xây dựng sẳn, đóng gói hoàn chỉnh về phát nhạc trong ứng dụng (khuyên dùng định dạng wav), các bạn chỉ cần copy class này vào chương trình, cùng với một vài dòng code cơ bản là chương trình la thể phát nhạc.
Class Sound_cdjv
<?php
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.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
/*///
Tran huy
* Mot tien ich cua congdongjava.com
*/
public class Sound_cdjv extends Thread {
private String filename;
private Position curPosition;
private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
enum Position {
LEFT, RIGHT, NORMAL
};
public Sound_cdjv(String wavfile) {
filename = wavfile;
curPosition = Position.NORMAL;
}
public Sound_cdjv(String wavfile, Position p) {
filename = wavfile;
curPosition = p;
}
public void run() {
while(true)
{
File soundFile = new File(filename);
if (!soundFile.exists()) {
System.err.println("Wave file not found: " + filename);
return;
}
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (UnsupportedAudioFileException e1) {
e1.printStackTrace();
return;
} catch (IOException 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 (LineUnavailableException e) {
e.printStackTrace();
return;
} catch (Exception e) {
e.printStackTrace();
return;
}
if (auline.isControlSupported(FloatControl.Type.PAN)) {
FloatControl pan = (FloatControl) auline
.getControl(FloatControl.Type.PAN);
if (curPosition == Position.RIGHT)
pan.setValue(1.0f);
else if (curPosition == Position.LEFT)
pan.setValue(-1.0f);
}
auline.start();
int nBytesRead = 0;
byte[ abData = new byte[EXTERNAL_BUFFER_SIZE;
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();
}
}
}
}
?>
Copy code
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.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
/*///
Tran huy
* Mot tien ich cua congdongjava.com
*/
public class Sound_cdjv extends Thread {
private String filename;
private Position curPosition;
private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
enum Position {
LEFT, RIGHT, NORMAL
};
public Sound_cdjv(String wavfile) {
filename = wavfile;
curPosition = Position.NORMAL;
}
public Sound_cdjv(String wavfile, Position p) {
filename = wavfile;
curPosition = p;
}
public void run() {
while(true)
{
File soundFile = new File(filename);
if (!soundFile.exists()) {
System.err.println("Wave file not found: " + filename);
return;
}
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (UnsupportedAudioFileException e1) {
e1.printStackTrace();
return;
} catch (IOException 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 (LineUnavailableException e) {
e.printStackTrace();
return;
} catch (Exception e) {
e.printStackTrace();
return;
}
if (auline.isControlSupported(FloatControl.Type.PAN)) {
FloatControl pan = (FloatControl) auline
.getControl(FloatControl.Type.PAN);
if (curPosition == Position.RIGHT)
pan.setValue(1.0f);
else if (curPosition == Position.LEFT)
pan.setValue(-1.0f);
}
auline.start();
int nBytesRead = 0;
byte[ abData = new byte[EXTERNAL_BUFFER_SIZE;
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();
}
}
}
}
?>
Copy code
-----------
Trong chương trình cần gọi sound của các bạn, các bạn chỉ cần khởi tạo đối tưông của lớp sound_cdjv, với các phương thức sau
<?php
Sound_cdjv sound=new Sound_cdjv("abc.wav");
//Khởi tạo đối tượng với đường dận đến file nhạc ở đây mình demo là abc.wav
sound.start();
//bất đầu phát nhạc
sound.suspend();
//tạm ngừng phát nhạc
sound.resume();
//quay trở lại vị trí tạm ngứng vá phát tiếp
?>
Copy code
Sound_cdjv sound=new Sound_cdjv("abc.wav");
//Khởi tạo đối tượng với đường dận đến file nhạc ở đây mình demo là abc.wav
sound.start();
//bất đầu phát nhạc
sound.suspend();
//tạm ngừng phát nhạc
sound.resume();
//quay trở lại vị trí tạm ngứng vá phát tiếp
?>
Copy code
Nguồn: congdongjava
Chỉnh sửa lúc 2016-05-26 15:49 bởi Pham_loi
: 0 ♥