在發佈此問題之前,我已經計算出問題了。不過,我認爲這可能會幫助其他人,所以我仍然發佈它。如果有人知道更好或更優雅的方式來做到這一點,請發表一個答案。如果我同意,我當然會接受你的回答。這是我原來的問題:JSyn:兩個通道上的正弦波
我試圖讓下面用JSyn工作:
我想在兩個通道發揮800Hz的正弦波,開啓或關閉時,我想單獨的通道。所以,舉例來說,我想下面的順序:
time 0s 0.3s 0.8s 1s 1s 1.1s 1.5s
left |--------------------| |-----------|
right |----| |------------------------|
我可以生成在任何一個正弦波,或兩個通道,但我還沒有想出如何將它們開/關。下面是一些代碼:
import com.jsyn.JSyn;
import com.jsyn.Synthesizer;
import com.jsyn.unitgen.LineOut;
import com.jsyn.unitgen.SineOscillator;
public class MusicTest {
public static void main(String[] args) {
playSound();
}
public static void playSound() {
Synthesizer synth = JSyn.createSynthesizer();
try {
synth.start();
SineOscillator sineOsc1 = new SineOscillator(500, 0.2);
SineOscillator sineOsc2 = new SineOscillator(500, 0.2);
LineOut lineOut= new LineOut();
synth.add(lineOut);
synth.add(sineOsc1);
synth.add(sineOsc2);
sineOsc1.output.connect(0, lineOut.input, 0); // left channel
sineOsc2.output.connect(0, lineOut.input, 1); // right channel
lineOut.start();
sineOsc1.start(); // start left
sleep(1000);
sineOsc2.start(); // after 1s, start right
sleep(1000);
sineOsc1.stop(); // after 1s, stop left
sleep(1000);
sineOsc2.stop(); // after 1s, stop
lineOut.stop();
} finally {
synth.stop();
}
}
private static void sleep(int ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {}
}
}
不幸的是,這並不工作...
非常感謝philburk的解釋。你的解決方案肯定比我的看起來更清潔今晚我會嘗試一下。 – brimborium 2013-02-25 16:42:52
好的,我能夠測試它,並且您的解決方案完美無缺。 (其實,我沒有期望從JSyn的創建者那裏獲得^^)再次感謝您的幫助。 – brimborium 2013-02-27 13:42:27