编写 play_mid.groovy 如下
import java.io.File;
import java.net.URL;
import java.util.*;
import java.applet.Applet;
import java.applet.AudioClip;
class PlayMid {
public static void main(String[] args) throws Exception {
if (args.length ==0){
println(" usage: groovy play_mid file1.mid ");
return;
}
File file = new File(args[0]);
if (!file.exists()) {
System.err.println(" file is not exists ");
return;
}
URL url = file.toURL();
println(url);
AudioClip audio = Applet.newAudioClip(url);
audio.play();
// 延时,用于播放音乐
//Thread.sleep(10000);
System.in.read();
audio.stop();
}
}
运行 groovy play_mid test1.mid
编写 PlayMidi.java 如下
import java.io.File;
import java.net.URI;
import java.util.*;
import java.applet.Applet;
import java.applet.AudioClip;
class PlayMidi {
public static void main(String[] args) throws Exception {
if (args.length ==0){
System.out.println(" usage: java PlayMidi file1.mid ");
return;
}
String f1 = args[0];
if (!f1.endsWith(".mid") && !f1.endsWith(".MID")){
System.out.println("Error: "+f1+" is not .mid file ");
return;
}
File file1 = new File(f1);
if (!file1.exists()){
System.out.println("Error: "+f1+" is not exists.");
return;
}
URI uri = file1.toURI();
System.out.println(uri);
long time1 = System.currentTimeMillis(); // start time
AudioClip audio = Applet.newAudioClip(uri.toURL());
audio.play();
// 延时,用于播放音乐
//Thread.sleep(10000);
System.in.read();
audio.stop();
long time2 = System.currentTimeMillis(); // end time
System.out.println("run time: " +(time2-time1) +" ms");
}
}
编译 javac -encoding utf-8 PlayMidi.java
SET CLASSPATH=.
运行 java PlayMidi happy_birthday.mid
或者 java -cp . PlayMidi happy_birthday.mid
happy_birthday.mid 参见:python:music21 解析 mid文件;生成 mid文件
编写 MidiPlay.java 如下
import java.io.*;
import java.util.*;
import javax.sound.midi.*;
public class MidiPlay {
// Midi文件播放
public static void main(String[] args) {
if (args.length ==0){
System.out.println(" usage: java MidiPlay file1.mid ");
return;
}
String f1 = args[0];
if (!f1.endsWith(".mid") && !f1.endsWith(".MID")){
System.out.println("Error: "+f1+" is not .mid file ");
return;
}
File file1 = new File(f1);
if (!file1.exists()){
System.out.println("Error: "+f1+" is not exists.");
return;
}
try {
// 假设我们有一个MIDI文件路径
//String midiFilePath = "path/to/your/midi/file.mid";
// 创建一个MIDI设备并打开它
Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
// 构建一个MIDI输入流来读取MIDI文件
InputStream fis = new FileInputStream(f1);
Sequence sequence = MidiSystem.getSequence(fis);
// 设置MIDI序列到播放器
sequencer.setSequence(sequence);
// 开始播放MIDI
sequencer.start();
// 等待MIDI播放完成或用户中断
while (sequencer.isRunning()) {
Thread.sleep(1000);
}
// 关闭MIDI设备和输入流
sequencer.stop();
sequencer.close();
fis.close();
} catch (InvalidMidiDataException ex) {
ex.printStackTrace();
System.out.println("MIDI数据无效,请检查MIDI文件格式是否正确。");
} catch (Exception e) {
e.printStackTrace();
}
}
}
编译 javac -encoding utf-8 MidiPlay.java
运行 java MidiPlay happy_birthday.mid