⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mididemo.java

📁 这是《Java案例精粹150例(上册)》一书配套的源代码。
💻 JAVA
字号:
import javax.sound.midi.*;
import java.io.*;
import java.net.*;

public class MidiDemo {
	private static String midiFile = "sound\\trippygaia1.mid";
	//private static String midiURI = "http://hostname/midifile";
	private Sequence sequence = null;

	public MidiDemo() {
		this.loadAndPlay();
	}

	public void loadAndPlay() {
		try {
			// 从文件中读取
			sequence = MidiSystem.getSequence(new File(midiFile));
			// 从URL中读取
			// sequence = MidiSystem.getSequence
			//                (new URL("http://hostname/midifile"));

			// 为midi序列创建一个sequencer对象
			Sequencer sequencer = MidiSystem.getSequencer();
			sequencer.open();
			sequencer.setSequence(sequence);

			// 计算midi播放持续的时间
			double durationInSecs = sequencer.getMicrosecondLength() / 1000000.0;
			System.out.println("the duration of this audio is "
					+ durationInSecs + "secs.");

			// 计算Midi Sequencer中播放的当前位置
			double seconds = sequencer.getMicrosecondPosition() / 1000000.0;
			System.out.println("the Position of this audio is " + seconds
					+ "secs.");

			// 设置Midi声音播放的音量
			if (sequencer instanceof Synthesizer) {
				Synthesizer synthesizer = (Synthesizer) sequence;
				MidiChannel[] channels = synthesizer.getChannels();

				// gain 的值在0和1之间(loudest)
				double gain = 0.9D;
				for (int i = 0; i < channels.length; i++) {
					channels[i].controlChange(7, (int) (gain * 127.0));
				}
			}

			// 开始播放
			sequencer.start();

			// 计算当前的Midi Sequencer播放位置
			Thread.currentThread().sleep(5000);
			seconds = sequencer.getMicrosecondPosition() / 1000000.0;
			System.out.println("the Position of this audio is " + seconds
					+ "secs.");

			// 添加媒体信息的监听器
			sequencer.addMetaEventListener(new MetaEventListener() {
				public void meta(MetaMessage event) {
					if (event.getType() == 47) {
						System.out.println("Sequencer is done playing.");
					}
				}
			});
		} catch (MalformedURLException e) {
		} catch (IOException e) {
		} catch (MidiUnavailableException e) {
		} catch (InvalidMidiDataException e) {
		} catch (InterruptedException e) {
		}
	}

	public static void main(String[] args) {
		MidiDemo midi = new MidiDemo();

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -