playshortmidi.java

来自「《精通JAVA手机游戏与应用程序设计》随书光盘」· Java 代码 · 共 88 行

JAVA
88
字号

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class PlayShortMIDI extends MIDlet implements CommandListener {
	private Player mp;

	private Display display;

	private List list;

	private Command exitCommand = new Command("Exit", Command.EXIT, 2);

	private Command playCommand = new Command("Play", Command.ITEM, 1);

	private byte[] niceChord = new byte[] { 0x2B, 0x40, 0x44, 0x4C, 0x53, 0x58,
			0x23, 0x3B, 0x32, 0x1F };
	

	public PlayShortMIDI() {
		display = Display.getDisplay(this);
		list = new List("MIDI例子", List.IMPLICIT);
	}

	public void startApp() {
		list.addCommand(exitCommand);
		list.addCommand(playCommand);
		list.setCommandListener(this);

		list.append("播放单个音符", null);		

		display.setCurrent(list);
	}

	public void destroyApp(boolean unconditional) {
	}

	public void pauseApp() {
	}

	public void commandAction(Command c, Displayable s) {
		if (c == exitCommand) {
			destroyApp(false);
			notifyDestroyed();
		}
		if (c == playCommand) {			
				midiShort();				
			}		
	}

	private void midiShort() {
		try {
			MIDIControl mc = getMIDIControl();
			// some notes on channel 0
			// 0x90: Note On
			for (int i = 0; i < niceChord.length; i++) {
				// Note On, note number, velocity
				mc.shortMidiEvent(0x90, niceChord[i], 127);
			}
			// some drums on channel 9
			mc.shortMidiEvent(0x99, 35, 127); // bass drum
			mc.shortMidiEvent(0x99, 35, 0);
			mc.shortMidiEvent(0x99, 58, 127); // vibraslap
			mc.shortMidiEvent(0x99, 58, 0);
			mc.shortMidiEvent(0x99, 57, 127); // crash cymbal
			mc.shortMidiEvent(0x99, 57, 0);
			Thread.sleep(200);
			// 关闭所有音符 ,第3个参数传递0表示关闭音符
			for (int i = 0; i < niceChord.length; i++) {
				mc.shortMidiEvent(0x90, niceChord[i], 0);
			}
		} catch (Exception ex) {

		}
	}
	

	MIDIControl getMIDIControl() throws Exception {
		if (mp == null) {
			mp = Manager.createPlayer(Manager.MIDI_DEVICE_LOCATOR);
			mp.prefetch();
		}
		return (MIDIControl) mp
				.getControl("javax.microedition.media.control.MIDIControl");
	}
}

⌨️ 快捷键说明

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