この質問を投稿する前に、問題を理解しました。それでも、これは他の誰かを助けるかもしれないと思うので、とにかく投稿します。これを行うためのより良い方法またはよりエレガントな方法を誰かが知っている場合は、回答を投稿してください。私が同意する場合は、もちろんあなたの回答を受け入れます。これが私の元の問題です:
私はJSynで動作するように以下を取得しようとしています:
2 つのチャネルで 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) {}
}
}
残念ながら、これはうまくいきません...