自由飛翔

          我在仰望,java之上

          統(tǒng)計

          留言簿(2)

          我關(guān)注的blog

          閱讀排行榜

          評論排行榜

          java播放wav的基礎(chǔ)代碼(轉(zhuǎn)載)

           文章來源:http://hi.baidu.com/breezedancer/blog/item/7eebb499680d8f086e068cb9.html 

          import javax.sound.sampled.*;
          import java.io.*;
          public class TestMusic{
           
           private AudioFormat format;
              private byte[] samples;
           
           public static void main(String args[])throws Exception{
            TestMusic sound =new TestMusic("1.wav");
            InputStream stream =new ByteArrayInputStream(sound.getSamples());
                  // play the sound
                  sound.play(stream);
                  // exit
                  System.exit(0);
           }
           
              public TestMusic(String filename) {
                  try {
                      // open the audio input stream
                      AudioInputStream stream =AudioSystem.getAudioInputStream(new File(filename));
                      format = stream.getFormat();
                      // get the audio samples
                      samples = getSamples(stream);
                  }
                  catch (UnsupportedAudioFileException ex) {
                      ex.printStackTrace();
                  }
                  catch (IOException ex) {
                      ex.printStackTrace();
                  }
             }
             
             public byte[] getSamples() {
                  return samples;
              }
             
               private byte[] getSamples(AudioInputStream audioStream) {
                  // get the number of bytes to read
                  int length = (int)(audioStream.getFrameLength() * format.getFrameSize());

                  // read the entire stream
                  byte[] samples = new byte[length];
                  DataInputStream is = new DataInputStream(audioStream);
                  try {
                      is.readFully(samples);
                  }
                  catch (IOException ex) {
                      ex.printStackTrace();
                  }

                  // return the samples
                  return samples;
              }
           
           public void play(InputStream source) {

                  // use a short, 100ms (1/10th sec) buffer for real-time
                  // change to the sound stream
                  int bufferSize = format.getFrameSize() *
                      Math.round(format.getSampleRate() / 10);
                  byte[] buffer = new byte[bufferSize];

                  // create a line to play to
                  SourceDataLine line;
                  try {
                      DataLine.Info info =
                          new DataLine.Info(SourceDataLine.class, format);
                      line = (SourceDataLine)AudioSystem.getLine(info);
                      line.open(format, bufferSize);
                  }
                  catch (LineUnavailableException ex) {
                      ex.printStackTrace();
                      return;
                  }

                  // start the line
                  line.start();

                  // copy data to the line
                  try {
                      int numBytesRead = 0;
                      while (numBytesRead != -1) {
                          numBytesRead =
                              source.read(buffer, 0, buffer.length);
                          if (numBytesRead != -1) {
                             line.write(buffer, 0, numBytesRead);
                          }
                      }
                  }
                  catch (IOException ex) {
                      ex.printStackTrace();
                  }

                  // wait until all data is played, then close the line
                  line.drain();
                  line.close();

              }


          }



          Gavin

          posted on 2012-03-14 14:30 GavinMiao 閱讀(1478) 評論(0)  編輯  收藏 所屬分類: corejava

          主站蜘蛛池模板: 隆子县| 涞源县| 苍山县| 哈密市| 呈贡县| 鹰潭市| 谷城县| 交口县| 应城市| 宁城县| 华安县| 永新县| 连城县| 宜城市| 武平县| 桃江县| 成都市| 桂平市| 凤阳县| 肃南| 普兰县| 蒙自县| 峡江县| 墨玉县| 宜昌市| 绥中县| 陆良县| 托克托县| 肥城市| 扶余县| 柳江县| 高雄市| 乳山市| 临沧市| 宽城| 调兵山市| 织金县| 周至县| 贵德县| 明光市| 宁阳县|