自由飛翔

          我在仰望,java之上

          統計

          留言簿(2)

          我關注的blog

          閱讀排行榜

          評論排行榜

          java播放wav的基礎代碼(轉載)

           文章來源: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

          主站蜘蛛池模板: 水城县| 南雄市| 静海县| 台山市| 普格县| 云安县| 贵南县| 抚远县| 蓝山县| 遵化市| 逊克县| 荥阳市| 祥云县| 吉隆县| 普兰县| 甘孜县| 盐池县| 霍州市| 秀山| 呼图壁县| 马山县| 邹城市| 霞浦县| 恭城| 祁东县| 高雄市| 天祝| 周口市| 云和县| 金沙县| 神池县| 谷城县| 临洮县| 临江市| 衡阳市| 都安| 瓦房店市| 菏泽市| 宜章县| 南澳县| 武陟县|