Java MIDI音乐播放代码

本文介绍了使用Java的MidiSystem类和Seqencer类来播放MIDI音乐的方法。MidiSystem管理MIDI播放设备,Seqence代表MIDI序列,可以从文件或URL加载。通过实例代码展示了如何播放MIDI序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在MIDI的播放中,一个类是比较重要的,那就是MidiSystem类,它负责整个MIDI播放设备等的管理,其实就是Seqencer,它就是一个MIDI播放设置,用于播放MIDI序列的,还有一个类叫Seqence,它就是MIDI的序列,MIDI的序列可以自己由程序生成,也可以从文件中或者URL中读取。

  下面我们来看一个例子吧:

/*
 * Test5.java
 *
 * Created on 2007-9-22, 11:16:22
 *
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 
*/

package  test1;

import  java.io.File;
import  java.io.IOException;
import  java.io.InputStream;
import  java.util.Hashtable;
import  java.util.Map;
import  java.util.logging.Level;
import  java.util.logging.Logger;
import  javax.sound.midi.InvalidMidiDataException;
import  javax.sound.midi.MidiSystem;
import  javax.sound.midi.MidiUnavailableException;
import  javax.sound.midi.Sequence;
import  javax.sound.midi.Sequencer;

/**
 *
 * 
@author  hadeslee
 
*/
public   class  Test5  implements  Runnable{

    
private  Sequencer midi;
    
private  String[] names = { " 1.mid " , " 2.mid " , " 3.mid " , " 4.mid " , " 5.mid " };
    
private   int  i;
    
private  Map < String,Sequence >  map;
    
public  Test5(){
        initMap();
        
new  Thread( this ).start();
    }
    
private   void  initMap(){
        
try  {
            map 
=   new  Hashtable < String, Sequence > ();
            midi 
=  MidiSystem.getSequencer( false );
            midi.open();
            
for  (String s : names) {
                
try  {
                    Sequence s1 
=  MidiSystem.getSequence( new  File(s));
                    map.put(s, s1);
                } 
catch  (InvalidMidiDataException ex) {
                    Logger.getLogger(Test5.
class .getName()).log(Level.SEVERE,  null , ex);
                } 
catch  (IOException ex) {
                    Logger.getLogger(Test5.
class .getName()).log(Level.SEVERE,  null , ex);
                }
            }
        } 
catch  (MidiUnavailableException ex) {
            Logger.getLogger(Test5.
class .getName()).log(Level.SEVERE,  null , ex);
        }
        
    }
    
private   void  createPlayer(String name){
        
try  {

            Sequence se
= map.get(name);

            midi.setSequence(se);
            midi.start();

            
        }
catch  (InvalidMidiDataException ex) {
            Logger.getLogger(Test5.
class .getName()).log(Level.SEVERE,  null , ex);
        }
        
    }
    
public   void  run(){
        
while ( true ){
            
try  {
                System.out.println(
" 换文件了. " + ( ++ i));
                String name
= names[( int )(Math.random() * names.length)];
                createPlayer(name);
                Thread.sleep(
10000 );
                
            } 
catch  (InterruptedException ex) {
                Logger.getLogger(Test5.
class .getName()).log(Level.SEVERE,  null , ex);
            }
        }
    }
    
public   static   void  main(String[] args) {
        
new  Test5();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值