【发布时间】:2011-12-06 15:26:25
【问题描述】:
我正在尝试制作一个从 midi 端口(硬件)读取并将事件转发到软件合成器的简单应用程序。除了软合成器不时停止播放外,它主要工作。我可以在日志中看到正在转发的 midi 消息,我可以在调试中跟踪并看到事件到达了合成器接收器中的本机代码,但由于某种原因,合成器没有播放音符。如果您等待,则声音再次播放,然后停止,然后再次播放...
这是一个显示问题的演示应用程序。如果您在控制台中按住 enter 按钮,您将反复听到一个音符。一段时间后(可能不到一分钟),声音将停止(如果您按住按钮,则事件),然后它会回来。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Synthesizer;
public class TestMidi2 {
public static void main( String[] args ) throws Exception {
Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
boolean on = true;
while ( in.readLine() != null ) {
if ( on ) {
synth.getChannels()[0].noteOn( 45, 127 );
} else {
synth.getChannels()[0].noteOff( 45 );
}
on = !on;
}
}
}
如果这有所作为(我猜它确实如此),我在 MacOS X lion 上。
有什么想法吗?解决方法?我想尝试其他软件合成器,但找不到。我也愿意尝试硬件 midi 合成器,只要他们能弹基本的钢琴、长笛和吉他(我不需要任何专业,只要好的声音)。
谢谢!
【问题讨论】: