- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在发布这个问题之前我已经解决了这个问题。尽管如此,我认为这可能对其他人有帮助,所以无论如何我都会发布它。如果有人知道更好或更优雅的方法来做到这一点,请发布答案。如果我同意,我当然会接受你的答案。这是我原来的问题:
我正在尝试让以下内容与 JSyn 一起使用:
我想在两个 channel 上播放 800Hz 正弦波,并随时打开或关闭各个 channel 。例如,我想要以下序列:
time 0s 0.3s 0.8s 1s 1s 1.1s 1.5s
left |--------------------| |-----------|
right |----| |------------------------|
我可以在一个或两个 channel 上生成正弦波,但我还没有弄清楚如何打开/关闭它们。这是一些代码:
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) {}
}
}
不幸的是,这不起作用......
最佳答案
第一个示例不起作用的原因是 JSyn 通过连接的单元生成器“拉取”数据。
start()方法将一个单元添加到由引擎直接执行的单元列表中。你start()链的末端,例如LineOut。当一个单元执行时,它会从连接到其输入的任何单元请求数据。这些单元反过来向与其连接的任何单元请求数据。这保证了单元按照最小化延迟的顺序执行。 JSyn 检查循环连接以防止无限循环。
即使您 stop()ped 正弦振荡器,LineOut 仍在拉动它们。所以他们发出了声音。
不要在振荡器上调用 start() 或 stop(),而是调用 setEnabled(f)。这将阻止数据的拉取。在第一个示例中尝试以下代码片段:
sineOsc1.setEnabled( false ); // begin disabled
sineOsc2.setEnabled( false );
lineOut.start();
sineOsc1.setEnabled(true); // start left
sleep(1000);
sineOsc2.setEnabled(true); // after 1s, start right
sleep(1000);
sineOsc1.setEnabled( false ); // after 1s, stop left
sleep(1000);
sineOsc2.setEnabled( false ); // after 1s, stop
另一种方法是使用一个振荡器并通过乘法单元将其连接到 LineOut 的每个 channel 。然后,您可以通过乘以 1.0 或 0.0 来打开或关闭该 channel 上的正弦。这允许您乘以标量,例如。 0.5,如果你想一半的话。
sineOsc ---> multiply1 ---> lineOut(0) // left channel `--> multiply2 ---> lineOut(1) // right channel
我意识到 setEnabled() 和 start() 方法没有很好的文档记录。我现在就解决这个问题。
关于java - JSyn:两个 channel 上的正弦波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15042555/
我写的函数有问题。想法是使用 taylor 展开而不是 js 数学对象来计算 sin 和 cosin 值(在 radians 上运行) .这些是方程式: sin(x) = (x^1)/1! - (x^
我不知道这是编程还是数学问题,但我整理了一些FFT的简短示例。我加载了440hz的波并在顶部添加了一些正弦波,但是由于某种原因,频谱中存在一个我不理解的“波”。 据我了解,频谱应该具有相同的| Y(f
这个问题在这里已经有了答案: Java Math.cos(Math.toRadians()) returns weird values (4 个答案) 关闭 10 年前。 我正在编写一个程序,我必须
我想在 ios4 中实现一个正弦和余弦计算器: if([operation isEqual:@"sin"]){ operand = (operand*M_PI/180.0); oper
我使用 256 个元素为 VHDL 制作了一个正弦 LUT。 我使用 MIDI 输入,因此值范围为 8.17Hz(注 #0)到 12543.85z(注 #127)。 我有另一个 LUT 计算必须发送到
我想在ios4中实现一个正弦和余弦计算器: if([operation isEqual:@"sin"]){ operand = (operand*M_PI/180.0); operan
我是一名优秀的程序员,十分优秀!