复制代码代码如下:
แพ็คเกจ _tmp;
นำเข้า java.awt.BorderLayout;
นำเข้า java.awt.Color;
นำเข้า java.awt.Graphics;
นำเข้า java.awt.Image;
นำเข้า java.awt.Toolkit;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.io.File;
นำเข้า java.io.IOException;
นำเข้า java.util.ArrayDeque;
นำเข้า java.util.Deque;
นำเข้า java.util.Iterator;
นำเข้า java.util.LinkedList;
นำเข้า java.util.Timer;
นำเข้า java.util.TimerTask;
นำเข้า javax.sound.sampled.AudioFormat;
นำเข้า javax.sound.sampled.AudioInputStream;
นำเข้า javax.sound.sampled.AudioSystem;
นำเข้า javax.sound.sampled.SourceDataLine;
นำเข้า javax.swing.JFrame;
นำเข้า javax.swing.SwingUtilities;
SoundTest ระดับสาธารณะ {
WaveformGraph คลาสคงที่สาธารณะขยาย JFrame {
Deque ส่วนตัว <สั้น> deque = ใหม่ LinkedList<สั้น>();
จับเวลาส่วนตัว จับเวลา;
รูปภาพส่วนตัวถูกบัฟเฟอร์;
การแสดงรูปภาพส่วนตัว
WaveformGraph สาธารณะ (ความกว้าง int, int height) {
setSize(กว้าง,สูง);
ตัวจับเวลา = ตัวจับเวลาใหม่ ();
buffered = BufferedImage ใหม่ (ความกว้าง, ความสูง, BufferedImage.TYPE_4BYTE_ABGR);
timer.schedule (ตัวจับเวลาใหม่ () {
@Override การรันโมฆะสาธารณะ () {
กราฟิก g = buffered.getGraphics();
g.setColor(สี.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(สี.สีดำ);
g.แปล(10,getHeight()/2);
ซิงโครไนซ์ (deque) {
อัตราความสูงลอยตัว = 1;
ถ้า(deque.size() > 1) {
ตัววนซ้ำ <สั้น> iter = deque.iterator();
สั้น p1 = iter.next();
สั้น p2 = iter.next();
อินท์ x1 = 0, x2 = 0;
ในขณะที่ (iter.hasNext ()) {
g.drawLine(x1, (int)(p1*heightRate), x2, (int)(p2*heightRate));
พี1 = พี2;
p2 = iter.ถัดไป();
x1 = x2;
x2 += 1;
-
-
-
g.ทิ้ง();
SwingUtilities.invoidLater (รันใหม่ () {
@Override การรันโมฆะสาธารณะ () {
กำลังแสดง = บัฟเฟอร์;
ทาสีใหม่();
การแสดง = โมฆะ;
-
-
-
}, 100, 100);
-
@แทนที่
สีโมฆะสาธารณะ (กราฟิก g) {
ซุปเปอร์.สี(g);
ถ้า (บัฟเฟอร์! = null) {
g.drawImage (บัฟเฟอร์, 0, 0, null);
-
-
โมฆะสาธารณะใส่ (v สั้น) {
ซิงโครไนซ์ (deque) {
deque.add(v);
ถ้า (deque.size() > 500) {
deque.removeFirst();
-
-
-
โมฆะสาธารณะชัดเจน () {
deque.clear();
-
-
โมฆะคงที่สาธารณะ main (String [] args) พ่นข้อยกเว้น {
//บันทึก();
WaveformGraph กราฟรูปคลื่น = กราฟรูปคลื่นใหม่ (500, 300);
waveformGraph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
waveformGraph.setVisible (จริง);
AudioInputStream ais = AudioSystem.getAudioInputStream(ไฟล์ใหม่("C://Documents and Settings//wml//My Documents//My Music//苏仨 - 失眠症.wav"));
printFormat(ais.getFormat());
เครื่องเล่น SourceDataLine = AudioSystem.getSourceDataLine(ais.getFormat());
ผู้เล่น.เปิด();
ผู้เล่น.เริ่มต้น();
ไบต์ [] buf = ไบต์ใหม่ [4];
อินท์เลน;
ในขณะที่ ((len=ais.read(buf))!=-1) {
ถ้า(ais.getFormat().getChannels() == 2) {
ถ้า(ais.getFormat().getSampleRate() == 16) {
waveformGraph.put((สั้น) ((buf[1] << 8) | buf[0]));//左声道
//waveformGraph.put((สั้น) ((buf[3] << 8) | buf[2]));//右声道
} อื่น {
waveformGraph.put(buf[1]);//左声道
waveformGraph.put(buf[3]);//左声道
//waveformGraph.put(buf[2]);//右声道
//waveformGraph.put(buf[4]);//右声道
-
} อื่น {
ถ้า(ais.getFormat().getSampleRate() == 16) {
waveformGraph.put((สั้น) ((buf[1] << 8) | buf[0]));
waveformGraph.put((สั้น) ((buf[3] << 8) | buf[2]));
} อื่น {
waveformGraph.put(buf[1]);
waveformGraph.put(buf[2]);
waveformGraph.put(buf[3]);
waveformGraph.put(buf[4]);
-
-
ผู้เล่นเขียน (buf, 0, len);
-
ผู้เล่น.ปิด();
เอไอเอส.ปิด();
-
โมฆะคงสาธารณะ printFormat (รูปแบบ AudioFormat) {
System.out.println(format.getEncoding() + " => "
+ format.getSampleRate()+" hz, "
+ format.getSampleSizeInBits() + " บิต "
+ format.getChannels() + " ช่อง "
+ format.getFrameRate() + " เฟรม/วินาที, "
+ format.getFrameSize() + " ไบต์/เฟรม");
-
// บันทึกโมฆะสาธารณะแบบคงที่ () พ่น LineUnavailableException
//InterruptedException {
//AudioFormat audioFormat = รูปแบบเสียงใหม่ (AudioFormat.Encoding.PCM_SIGNED, 48000F, 16, 1, 2, 48000F, false);
//Info recordDevInfo = DataLine.Info ใหม่ (TargetDataLine.class, audioFormat);
-
// สุดท้าย TargetDataLine recordLine = (TargetDataLine) AudioSystem.getLine (recordDevInfo);
// สุดท้าย SourceDataLine playLine = AudioSystem.getSourceDataLine (audioFormat);
-
//recordLine.open(audioFormat, recordLine.getBufferSize());
//playLine.open(รูปแบบเสียง, recordLine.getBufferSize());
-
// ตัวบันทึกเธรด = เธรดใหม่ () {
// การรันโมฆะสาธารณะ () {
//recordLine.start();
//playLine.start();
-
//FloatControl fc = (FloatControl) playLine.getControl(FloatControl.Type.MASTER_GAIN);
//ค่าสองเท่า = 2;
//float dB = (ลอย) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0);
//fc.setValue(dB);
-
//พยายาม {
//AudioInputStream in = AudioInputStream ใหม่ (recordLine);
//ไบต์[] buf = ไบต์ใหม่[recordLine.getBufferSize()];
//int เลน;
// ในขณะที่ ((len = in.read (buf)) ! = -1) {
//playLine.write(buf, 0, len);
-
//} จับ (IOException จ) {
//e.printStackTrace();
//} ในที่สุด {
//recordLine.stop();
//playLine.stop();
-
-
-
//บันทึก.เริ่มต้น();
//บันทึก.เข้าร่วม();
-
-