我正在試圖製作一個簡單的應用程序,可以從midi端口(硬件)讀取並將事件轉發到軟件合成器。它主要工作,除了軟合成器不時播放。我可以看到midi消息在日誌中轉發,我可以在調試中跟蹤並查看事件到達合成器接收器中的本機代碼,但由於某種原因,合成器不會播放該註釋。如果你等待聲音再次播放,然後停止,然後再播放...爲什麼mac midi合成器在mac上停止播放音符
這是一個演示應用程序,顯示問題。如果您在控制檯中按住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獅子,如果這有所作爲(我猜是這樣)。
有什麼想法?解決方法?我想嘗試其他軟件合成器,但找不到任何。我也願意嘗試硬件midi合成器,只要他們可以演奏基本的鋼琴,長笛和吉他(我不需要任何東西,只是體面的聲音)。
謝謝!
感謝您的答覆。我所做的是使用「音頻MIDI設置」實用程序設置虛擬MIDI連接,並使用邏輯表達式作爲合成器。缺點是你需要一個外部軟件合成器($$,除非你使用的車庫頻帶是有限的,因爲它讀取所有midi輸入設備),但是你的聲音比一般midi音色庫中的更好。 –
該死的我以爲這只是我!有一天我提交了一個關於這個問題的錯誤報告。 – Ben
自Java 6以來,有一種替代品可用:Gervill。 它工作正常,可以加載soundbanks,因此,提供了很大的靈活性。 在Java <7中,它可以通過以下VM參數激活: -Dsun.sound.useNewAudioEngine = true Java 7不再需要此參數。 –