亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java顯示聲音波形圖示例

2019-11-26 15:30:37
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

package _tmp;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.SourceDataLine;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class SoundTest {

 public static class WaveformGraph extends JFrame {

  private Deque<Short> deque = new LinkedList<Short>();
  private Timer timer;
  private Image buffered;
  private Image showing;

  public WaveformGraph(int width, int height) {
   setSize(width, height);
   timer = new Timer();
   buffered = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
   timer.schedule(new TimerTask() {
    @Override public void run() {

     Graphics g = buffered.getGraphics();
     g.setColor(Color.WHITE);
     g.fillRect(0, 0, getWidth(), getHeight());
     g.setColor(Color.BLACK);

     g.translate(10, getHeight()/2);

     synchronized (deque) {
      float heightRate = 1;
      if(deque.size() > 1) {
       Iterator<Short> iter = deque.iterator();
       Short p1 = iter.next();
       Short p2 = iter.next();
       int x1 = 0, x2 = 0;
       while(iter.hasNext()) {
        g.drawLine(x1, (int)(p1*heightRate), x2, (int)(p2*heightRate));

        p1 = p2;
        p2 = iter.next();
        x1 = x2;
        x2 += 1;
       }
      }
     }
     g.dispose();

     SwingUtilities.invokeLater(new Runnable() {
      @Override public void run() {
       showing = buffered;
       repaint();
       showing = null;
      }
     });
    }
   }, 100, 100);
  }

  @Override
  public void paint(Graphics g) {
   super.paint(g);
   if(buffered!=null) {
    g.drawImage(buffered, 0, 0, null);
   }
  }

  public void put(short v) {
   synchronized (deque) {
    deque.add(v);
    if(deque.size() > 500) {
     deque.removeFirst();
    }
   }
  }

  public void clear() {
   deque.clear();
  }
 }

 public static void main(String[] args) throws Exception {
//  record();
  WaveformGraph waveformGraph = new WaveformGraph(500, 300);
  waveformGraph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  waveformGraph.setVisible(true);

  AudioInputStream ais = AudioSystem.getAudioInputStream(new File("C://Documents and Settings//wml//My Documents//My Music//蘇仨 - 失眠癥.wav"));
  printFormat(ais.getFormat());
  

  SourceDataLine player = AudioSystem.getSourceDataLine(ais.getFormat());

  player.open();
  player.start();

  byte[] buf = new byte[4];
  int len;
  while((len=ais.read(buf))!=-1) {

   if(ais.getFormat().getChannels() == 2) {
    if(ais.getFormat().getSampleRate() == 16) {
     waveformGraph.put((short) ((buf[1] << 8) | buf[0]));//左聲道

//     waveformGraph.put((short) ((buf[3] << 8) | buf[2]));//右聲道
    } else {
     waveformGraph.put(buf[1]);//左聲道
     waveformGraph.put(buf[3]);//左聲道

//     waveformGraph.put(buf[2]);//右聲道
//     waveformGraph.put(buf[4]);//右聲道
    }
   } else {
    if(ais.getFormat().getSampleRate() == 16) {
     waveformGraph.put((short) ((buf[1] << 8) | buf[0]));
     waveformGraph.put((short) ((buf[3] << 8) | buf[2]));
    } else {
     waveformGraph.put(buf[1]);
     waveformGraph.put(buf[2]);
     waveformGraph.put(buf[3]);
     waveformGraph.put(buf[4]);
    }
   }

   player.write(buf, 0, len);
  }

  player.close();
  ais.close();
 }

 public static void printFormat(AudioFormat format) {
  System.out.println(format.getEncoding() + " => "
    + format.getSampleRate()+" hz, "
    + format.getSampleSizeInBits() + " bit, "
    + format.getChannels() + " channel, "
    + format.getFrameRate() + " frames/second, "
    + format.getFrameSize() + " bytes/frame");
 }

// public static void record() throws LineUnavailableException,
//   InterruptedException {
//  AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 48000F, 16, 1, 2, 48000F, false);
//  Info recordDevInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
//
//  final TargetDataLine recordLine = (TargetDataLine) AudioSystem.getLine(recordDevInfo);
//  final SourceDataLine playLine = AudioSystem.getSourceDataLine(audioFormat);
//  
//  recordLine.open(audioFormat, recordLine.getBufferSize());
//  playLine.open(audioFormat, recordLine.getBufferSize());
//  
//  Thread recorder = new Thread() {
//   public void run() {
//    recordLine.start();
//    playLine.start();
//    
//    FloatControl fc = (FloatControl) playLine.getControl(FloatControl.Type.MASTER_GAIN);
//    double value = 2;
//    float dB = (float) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0);
//    fc.setValue(dB);
//    
//    try {
//     AudioInputStream in = new AudioInputStream(recordLine);
//     byte[] buf = new byte[recordLine.getBufferSize()];
//     int len;
//     while((len=in.read(buf)) != -1) {
//      playLine.write(buf, 0, len);
//     }
//    } catch (IOException e) {
//     e.printStackTrace();
//    } finally {
//     recordLine.stop();
//     playLine.stop();
//    }
//   };
//  };
//  recorder.start();
//  recorder.join();
// }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美制服中文字幕| 成人精品视频久久久久| 欧美日韩综合视频| 成人福利视频在线观看| 久久在线免费视频| 久久人人爽人人爽人人片av高请| 久久久黄色av| 欧美一性一乱一交一视频| 国产精品久久久av久久久| 欧美最猛性xxxxx亚洲精品| 北条麻妃99精品青青久久| 久久人体大胆视频| 亚洲成人在线视频播放| 亚洲网站视频福利| 欧美精品电影免费在线观看| 日韩视频免费观看| 亚洲精品国精品久久99热| 欧美一级淫片aaaaaaa视频| 亚洲欧美综合区自拍另类| 久久国产精彩视频| 丰满岳妇乱一区二区三区| 欧美激情二区三区| 国产高清视频一区三区| 国模视频一区二区| 日韩黄在线观看| 欧美精品在线播放| 国产一区二区三区视频| 国产精品久久久久国产a级| 亚洲一区二区免费在线| 青草青草久热精品视频在线网站| 精品国产欧美成人夜夜嗨| 国产精自产拍久久久久久| 日韩一二三在线视频播| 久久久久久久国产精品| 91成人精品网站| 538国产精品一区二区免费视频| 亚洲网在线观看| 久久精品久久精品亚洲人| 日本亚洲欧洲色α| 日韩电影中文字幕av| 日本人成精品视频在线| 国产精品一区二区三区毛片淫片| 俺也去精品视频在线观看| 欧美成人剧情片在线观看| 亚洲色图校园春色| 亚洲欧美中文另类| 国产一区二区三区网站| 日韩电影中文字幕在线观看| 成人a视频在线观看| 伊人久久大香线蕉av一区二区| 精品国产一区av| 精品视频一区在线视频| 亚洲成年网站在线观看| 国产欧美一区二区三区在线看| 中文字幕国内精品| 亚洲自拍小视频免费观看| 国产精品久久久久久亚洲影视| 欧美午夜无遮挡| 清纯唯美日韩制服另类| 亚洲欧美日韩在线一区| 亚洲最大在线视频| 26uuu亚洲国产精品| 亚洲成人黄色在线观看| 成人综合国产精品| 成人黄色中文字幕| 91久久久久久久久久久久久| 91国内在线视频| 国产精品2018| 亚洲人午夜精品免费| 欧美与黑人午夜性猛交久久久| 国内精品视频久久| 亚洲免费视频一区二区| 日韩精品免费综合视频在线播放| 91久久精品一区| 欧美日韩国产在线看| 亚洲色图av在线| 亚洲电影在线看| 2025国产精品视频| 久久久精品在线| 国产日产欧美精品| 日韩精品视频在线免费观看| 亚洲专区国产精品| 欧洲精品久久久| 91亚洲va在线va天堂va国| 亚洲精品成a人在线观看| 日韩国产精品视频| 97在线观看视频国产| 日韩精品视频中文在线观看| 欧美大片在线看免费观看| 日韩毛片在线看| 97免费在线视频| 欧美黑人性生活视频| 亚洲欧美999| 夜夜嗨av色综合久久久综合网| 一区二区三区日韩在线| 久色乳综合思思在线视频| 亚洲一区二区自拍| 亚洲国产高清福利视频| 亚洲人成欧美中文字幕| 国产精品www| 欧美亚洲另类激情另类| 操91在线视频| 欧美在线观看www| 国产精品高潮粉嫩av| 日韩久久免费视频| 国产一区二区三区毛片| 在线成人一区二区| 97在线精品视频| 久久精品国产一区| 92版电视剧仙鹤神针在线观看| 91精品视频在线免费观看| 日韩有码在线观看| 九九九热精品免费视频观看网站| 亚洲另类欧美自拍| 91久久精品日日躁夜夜躁国产| 91免费精品国偷自产在线| 欧美日韩国内自拍| 久久精品国产清自在天天线| 欧美巨乳美女视频| 狠狠躁夜夜躁人人躁婷婷91| 一区二区三区在线播放欧美| 亚洲美女av网站| 日韩理论片久久| 2019中文字幕在线免费观看| 亚洲精品福利免费在线观看| 日本精品性网站在线观看| 欧美美最猛性xxxxxx| 一区二区中文字幕| 国产日韩欧美另类| 国产精品成人观看视频国产奇米| 亚洲色图欧美制服丝袜另类第一页| 美女精品久久久| 日韩av在线播放资源| 欧美日韩不卡合集视频| 国产精品人人做人人爽| 欧美精品生活片| 亚洲精品小视频| 伊人av综合网| 亚洲成色777777在线观看影院| 粉嫩av一区二区三区免费野| 这里只有精品在线播放| 91久久精品美女高潮| 美女国内精品自产拍在线播放| 一区二区在线视频播放| 国产aaa精品| 国产69精品99久久久久久宅男| 国产精品欧美风情| 国产成人综合亚洲| 国产成人在线一区二区| 日韩在线精品视频| 国产91亚洲精品| 国产精品日本精品| 亚洲天堂网站在线观看视频| 亚洲美女动态图120秒| 亚洲综合大片69999| 国产精品中文字幕在线观看| 九九久久久久久久久激情| 亚洲午夜激情免费视频| 欧美刺激性大交免费视频| 欧美性猛交xxxx免费看漫画| 国产一区二区三区视频在线观看| 亚洲视频欧洲视频| 久久久久这里只有精品| 亚洲欧洲国产精品|