MIDIPlayer.java
上传用户:wxknfb
上传日期:2015-07-21
资源大小:32k
文件大小:2k
源码类别:

midi

开发平台:

Java

  1. package midiplayer;
  2. import javax.sound.midi.*;
  3. import java.io.*;
  4. import java.net.*;
  5. /**
  6.  * <p>Title: MIDI播放器</p>
  7.  * <p>Description: 使用javax.sound.midi包中的类实现MIDI文件的播放</p>
  8.  * <p>Copyright: Copyright (c) 2004</p>
  9.  * <p>Company: 北京师范大学计算机系</p>
  10.  * @author 曾文琪
  11.  * @version 1.0
  12.  */
  13. public class MIDIPlayer {
  14.   private static String midiFile = "canyon.mid";
  15.   private static String midiURI = "http://.../canyon.mid";
  16.   private Sequence sequence =null;
  17.   public MIDIPlayer() {
  18.     this.loadAndPlay();
  19.   }
  20.   public void loadAndPlay(){
  21.     try {
  22.         sequence = MidiSystem.getSequence(new File(midiFile));
  23.         // 读网络地址URL中MIDI文件
  24. //        sequence = MidiSystem.getSequence(new URL("http://hostname/midifile"));
  25.         Sequencer sequencer = MidiSystem.getSequencer();
  26.         sequencer.open();
  27.         sequencer.setSequence(sequence);
  28.         double durationInSecs = sequencer.getMicrosecondLength() / 1000000.0;
  29.         System.out.println("the duration of this audio is "+durationInSecs+"secs.");
  30.         double seconds = sequencer.getMicrosecondPosition() / 1000000.0;
  31.         System.out.println("the Position of this audio is "+seconds+"secs.");
  32.         if (sequencer instanceof Synthesizer) {
  33.                 Synthesizer synthesizer = (Synthesizer)sequencer;
  34.                 MidiChannel[] channels = synthesizer.getChannels();
  35.                 double gain = 0.9D;
  36.                 for (int i=0; i<channels.length; i++) {
  37.                     channels[i].controlChange(7, (int)(gain * 127.0));
  38.                 }
  39.             }
  40.         sequencer.start();
  41.         Thread.currentThread().sleep(5000);
  42.         seconds = sequencer.getMicrosecondPosition() / 1000000.0;
  43.         System.out.println("the Position of this audio is "+seconds+"secs.");
  44.         sequencer.addMetaEventListener(
  45.         new MetaEventListener() {
  46.             public void meta(MetaMessage event) {
  47.                 if (event.getType() == 47) {
  48.                     System.out.println("Sequencer is done playing.");
  49.                 }
  50.             }
  51.         });
  52.     }catch (MalformedURLException e) {
  53.     }catch (IOException e) {
  54.     }catch (MidiUnavailableException e) {
  55.     }catch (InvalidMidiDataException e) {
  56.     }catch (InterruptedException e){
  57.     }
  58.   }
  59.   public static void main(String[] args) {
  60.     MIDIPlayer midiplayer = new MIDIPlayer();
  61.   }
  62. }