JAVA midichannel_java中playmidi

package imusic;

import javax.sound.midi.*;

import javax.sound.sampled.*;

import org.omg.CORBA.PUBLIC_MEMBER;

import java.io.*;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2003

*

Company: SinoSoft

* @author pete

* @version 1.0

*/

public class PlayMidi {

File sound;

Sequence seq;

Sequencer midi;

public PlayMidi(String f){

try {

sound=new File(f);

seq=MidiSystem.getSequence(sound);

midi=MidiSystem.getSequencer();

midi.open();

midi.setSequence(seq);

}

catch (Exception ex) {

}

}

public void playMid(){

synchronized(this){

midi.start();

try {

Thread.sleep(8000);

}

catch (InterruptedException ex) {

}

}

}

public void stopMidi(){

midi.stop();

}

public static void main(String[] args) {

final PlayMidi playMidi1 = new PlayMidi("danyuan.mid");

Thread play1 = new Thread(

new Runnable(){

public void run(){

playMidi1.playMid();

}},"play");

Thread play2 = new Thread(

new Runnable(){

public void run(){

playMidi1.stopMidi();

}},"stop");

play1.run();//都在main这个线程中

play2.run();

System.out.println("main over!");

}

}

/*public class PlayMidi {

private static String filestr = "/sound/danyuan.mid";

// private static String midiURI = "http://hostname/midifile";

private Sequence sequence =null;

public PlayMidi() {

this.loadAndPlay();

}

public void loadAndPlay(){

try {

// From file

//     File midiFile=new File(PlayMidi.class.getResource(filestr).getFile());

//jar包只能访问播放JAR文件中的声音文件一般是将声音文件处理成流的形式

InputStream midiFile = this.getClass().getResourceAsStream(filestr);

sequence = MidiSystem.getSequence(midiFile);

// From URL

// sequence = MidiSystem.getSequence(new URL("http://hostname/midifile"));

// Create a sequencer for the sequence

Sequencer sequencer = MidiSystem.getSequencer();

sequencer.open();

sequencer.setSequence(sequence);

// Determining the Duration of a Midi Audio File

double durationInSecs = sequencer.getMicrosecondLength() / 1000000.0;

System.out.println("the duration of this audio is "+durationInSecs+"secs.");

//Determining the Position of a Midi Sequencer

double seconds = sequencer.getMicrosecondPosition() / 1000000.0;

System.out.println("the Position of this audio is "+seconds+"secs.");

//Setting the Volume of Playing Midi Audio

if (sequencer instanceof Synthesizer) {

Synthesizer synthesizer = (Synthesizer)sequencer;

MidiChannel[] channels = synthesizer.getChannels();

// gain is a value between 0 and 1 (loudest)

double gain = 0.9D;

for (int i=0; i

channels[i].controlChange(7, (int)(gain * 127.0));

}

}

// Start playing

sequencer.start();

//Determining the Position of a Midi Sequencer

Thread.currentThread().sleep(5000);

seconds = sequencer.getMicrosecondPosition() / 1000000.0;

System.out.println("the Position of this audio is "+seconds+"secs.");

//Add a listener for meta message events

sequencer.addMetaEventListener(

new MetaEventListener() {

public void meta(MetaMessage event) {

// Sequencer is done playing

if (event.getType() == 47) {

System.out.println("Sequencer is done playing.");

}

}

});

}

catch (MalformedURLException e) {

}

catch (IOException e1) {

}catch (MidiUnavailableException e2) {

}catch (InvalidMidiDataException e3) {

}catch (InterruptedException e4) {

}

}

public static void main(String[] args) {

PlayMidi midi = new PlayMidi();

}

}*/

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值