一个简单的播放器的采样声音文件 : 声音 « 开发相关类 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 开发相关类 » 声音屏幕截图 
一个简单的播放器的采样声音文件
 

/*
 *
 * Copyright (c) 1999 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free,
 * license to use, modify and redistribute this software in 
 * source and binary code form, provided that i) this copyright
 * notice and license appear on all copies of the software; and 
 * ii) Licensee does not utilize the software in a manner
 * which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty
 * of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS
 * AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE 
 * HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR 
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT
 * WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT
 * OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, 
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS
 * OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY
 * TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGES.

 This software is not designed or intended for use in on-line
 control of aircraft, air traffic, aircraft navigation or
 aircraft communications; or in the design, construction,
 operation or maintenance of any nuclear facility. Licensee 
 represents and warrants that it will not use or redistribute 
 the Software for such purposes.
 */

/*  The above copyright statement is included because this 
 * program uses several methods from the JavaSoundDemo
 * distributed by SUN. In some cases, the sound processing methods
 * unmodified or only slightly modified.
 * All other methods copyright Steve Potts, 2002
 */

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.Vector;

import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MetaEventListener;
import javax.sound.midi.MetaMessage;
import javax.sound.midi.MidiChannel;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.Synthesizer;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;

/**
 * A simple player for sampled sound files.
 
 
 @author Steve Potts
 */
public class SimpleSoundPlayer implements Runnable, LineListener, MetaEventListener {

  final int bufSize = 16384;

  Vector sounds = new Vector();

  Thread thread;

  Sequencer sequencer;

  boolean midiEOM, audioEOM;

  Synthesizer synthesizer;

  MidiChannel channels[];

  Object currentSound;

  String currentName;

  double duration;

  int num;

  boolean bump;

  boolean paused = false;

  String errStr;

  public void open() {
    try {
      sequencer = MidiSystem.getSequencer();

      if (sequencer instanceof Synthesizer) {
        synthesizer = (Synthesizersequencer;
        channels = synthesizer.getChannels();
      }

    catch (Exception ex) {
      ex.printStackTrace();
      return;
    }
    sequencer.addMetaEventListener(this);

  }

  public void close() {
    if (sequencer != null) {
      sequencer.close();
    }
  }

  private void addSound(File file) {
    sounds.add(file);
  }

  public boolean loadSound(Object object) {
    duration = 0.0;

    currentName = ((Fileobject).getName();
    try {
      currentSound = AudioSystem.getAudioInputStream((Fileobject);
    catch (Exception e1) {
      try {
        FileInputStream is = new FileInputStream((Fileobject);
        currentSound = new BufferedInputStream(is, 1024);
      catch (Exception e3) {
        e3.printStackTrace();
        currentSound = null;
        return false;
      }
      // }
    }

    // user pressed stop or changed tabs while loading
    if (sequencer == null) {
      currentSound = null;
      return false;
    }

    if (currentSound instanceof AudioInputStream) {
      try {
        AudioInputStream stream = (AudioInputStreamcurrentSound;
        AudioFormat format = stream.getFormat();

        /**
         * we can't yet open the device for ALAW/ULAW playback, convert
         * ALAW/ULAW to PCM
         */

        if ((format.getEncoding() == AudioFormat.Encoding.ULAW)
            || (format.getEncoding() == AudioFormat.Encoding.ALAW)) {
          AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
              format.getSampleRate(), format.getSampleSizeInBits() 2, format.getChannels(),
              format.getFrameSize() 2, format.getFrameRate()true);
          stream = AudioSystem.getAudioInputStream(tmp, stream);
          format = tmp;
        }
        DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat()((intstream
            .getFrameLength() * format.getFrameSize()));

        Clip clip = (ClipAudioSystem.getLine(info);
        clip.addLineListener(this);
        clip.open(stream);
        currentSound = clip;
        // seekSlider.setMaximum((int) stream.getFrameLength());
      catch (Exception ex) {
        ex.printStackTrace();
        currentSound = null;
        return false;
      }
    else if (currentSound instanceof Sequence || currentSound instanceof BufferedInputStream) {
      try {
        sequencer.open();
        if (currentSound instanceof Sequence) {
          sequencer.setSequence((SequencecurrentSound);
        else {
          sequencer.setSequence((BufferedInputStreamcurrentSound);
        }

      catch (InvalidMidiDataException imde) {
        System.out.println("Unsupported audio file.");
        currentSound = null;
        return false;
      catch (Exception ex) {
        ex.printStackTrace();
        currentSound = null;
        return false;
      }
    }

    duration = getDuration();

    return true;
  }

  public void playSound() {
    midiEOM = audioEOM = bump = false;
    if (currentSound instanceof Sequence || currentSound instanceof BufferedInputStream
        && thread != null) {
      sequencer.start();
      while (!midiEOM && thread != null && !bump) {
        try {
          thread.sleep(99);
        catch (Exception e) {
          break;
        }
      }
      sequencer.stop();
      sequencer.close();
    else if (currentSound instanceof Clip) {
      Clip clip = (ClipcurrentSound;
      clip.start();
      try {
        thread.sleep(99);
      catch (Exception e) {
      }
      while ((paused || clip.isActive()) && thread != null && !bump) {
        try {
          thread.sleep(99);
        catch (Exception e) {
          break;
        }
      }
      clip.stop();
      clip.close();
    }
    currentSound = null;
  }

  public double getDuration() {
    double duration = 0.0;
    if (currentSound instanceof Sequence) {
      duration = ((SequencecurrentSound).getMicrosecondLength() 1000000.0;
    else if (currentSound instanceof BufferedInputStream) {
      duration = sequencer.getMicrosecondLength() 1000000.0;
    else if (currentSound instanceof Clip) {
      Clip clip = (ClipcurrentSound;
      duration = clip.getBufferSize()
          (clip.getFormat().getFrameSize() * clip.getFormat().getFrameRate());
    }
    return duration;
  }

  public void update(LineEvent event) {
    if (event.getType() == LineEvent.Type.STOP && !paused) {
      audioEOM = true;
    }
  }

  public void meta(MetaMessage message) {
    if (message.getType() == 47) { // 47 is end of track
      midiEOM = true;
    }
  }

  private void reportStatus(String msg) {
    if ((errStr = msg!= null) {
      System.out.println(errStr);
    }
  }

  public Thread getThread() {
    return thread;
  }

  public void start() {
    thread = new Thread(this);
    thread.setName("SimpleSamplePlayer");
    thread.start();
  }

  public void stop() {
    if (thread != null) {
      thread.interrupt();
    }
    thread = null;
  }

  public void run() {
    for (; num < sounds.size() && thread != null; num++) {
      if (loadSound(sounds.get(num)) == true) {
        playSound();
      }
      // take a little break between sounds
      try {
        thread.sleep(222);
      catch (Exception e) {
        break;
      }
    }
    num = 0;

    thread = null;
    currentName = null;
    currentSound = null;
    System.out.println("Press <ctrl-c> to exit");
  }

  public void loadSounds(String name) {
    try {
      File file = new File(name);
      if (file != null && file.isDirectory()) {
        String files[] = file.list();
        for (int i = 0; i < files.length; i++) {
          File leafFile = new File(file.getAbsolutePath(), files[i]);
          addSound(leafFile);
        }
      }
    catch (Exception e) {
      System.out.println("Exception " + e);
    }
  }

  public static void main(String args[]) {
    // every file in this directory will be played
    String media = "c:/unleashed/ch18/sounds";

    final SimpleSoundPlayer ssp = new SimpleSoundPlayer();
    ssp.open();

    // we first load the sound file names in a vector
    ssp.loadSounds(media);

    // Then we start a thread to play the sounds
    ssp.start();

    // We have to wait for a while so that the process doesn't
    // terminate, killing the playing thread
    try {
      Thread.sleep(500000);
    catch (Exception e) {
      System.out.println("Interrupted");
    }

    // close and exit
    ssp.close();
    System.exit(0);
  }

}

   
  
Related examples in the same category
1. 播放声音
2. Duke演讲
3. Duke演讲试验
4. Sound Applet
5. 声音播放器
6. 简单程序尝试声音
7. Sound Application Sound Application
8. 一个例子装载和剪辑播放声音一个例子装载和剪辑播放声音
9. 一个例子,播放声音的回声滤波器
10. 流Filter3dTest演示Filter3d功能
11. 声音管理试验声音管理试验
12. 一个例子可以播放MIDI序列
13. 确定何时音频播放器播放完毕
14. 设置音量采样音频播放器
15. 确定位置的采样音频播放器
16. 从网址加载音频文件
17. 播放音频流采样
18. 确定该文件格式的音频文件采样
19. 加载和播放音频采样
20. 确定位置的一个MIDI音序器
21. 不断播放采样音频文件
22. 加载图像和声音的jar文件
23. 确定一个MIDI音频文件期限
24. MIDI音频播放器
25. 捕捉音频录音与Java的API
26. 负载和发挥MIDI音频
27. 播放音频流MIDI
28. 确定何时一个MIDI音频播放器播放完毕
29. 浮点控制组件
30. 这是一个简单的程序来记录声音和回播他们
31. 确定一个MIDI音频文件的期限
32. 载入中和音频播放MIDI
33. 确定一个MIDI音频文件文件格式
34. 从一个JAR文件播放音频文件
35. 设置音量播放MIDI音频
36. 制作您自己的Java Media Player,播放媒体文件
37. 确定编码,采样音频文件
38. 确定期限抽样音频文件
39. 音频声音:实现java.applet.AudioClip
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.