JSyn DualOscilloscope 我声卡上两条开线
JSyn DualOscilloscope Two open line on my sound card
我创建了一个小程序来录制声音(我使用带有 TargetDataLine 的 JavaSound 来访问我的声卡)。
我用 JSYN 的 class "DualOscilloscope.java" 做了一些测试,以获得声音的视觉效果。
问题是他们的 class 打开了一条带有“ Synthesizer ” 的线路,所以我和我的声卡上有两行点击触发了异常(因为你不能在声卡上打开两行)。
是否可以使用我实例化我的 TargetDataLine 来初始化 JSYN 的合成器?
源代码class DualOscilloscope(作者Phil Burk)
protected void startAudio(int itemIndex) {
// Both stereo.
int numInputChannels = deviceMaxInputs.get(itemIndex);
if (numInputChannels > 2)
numInputChannels = 2;
int inputDeviceIndex = deviceIds.get(itemIndex);
synth.start(16000, inputDeviceIndex, numInputChannels, AudioDeviceManager.USE_DEFAULT_DEVICE, 0);
channel1.output.connect(pass1.input);
// Only connect second channel if more than one input channel.
if (numInputChannels > 1) {
channel2.output.connect(pass2.input);
}
// We only need to start the LineOut. It will pull data from the
// channels.
scope.start();
JSyn 当前不支持传递 TargetDataLine。但是,您可以根据 GitHub 上的源代码实现自己的 AudioDeviceManager。将 JavaSoundAudioDevice.java 替换为使用您的 TargetDataLine 而不是创建新的。
一种更简单的方法是让 JSyn 打开音频输入,然后在您的程序中使用该输入。不要打开您自己的 TargetDataLine。
您可以使用 JSyn 处理音频或将其保存为 WAVE 文件。如果您需要进行自定义处理,那么您可以编写一个自定义单位生成器。或者您可以使用 AudioStreamReader 将音频数据流式传输到您自己的线程。
AudioStreamReader reader = new AudioStreamReader(synth, 2); // stereo
lineIn.connect(0, read.getInput(), 0);
lineIn.connect(1, read.getInput(), 1);
然后您可以从 reader 而不是从您自己的 TargetDataLine 中读取数据。
reader.read(buffer, start, count);
我创建了一个小程序来录制声音(我使用带有 TargetDataLine 的 JavaSound 来访问我的声卡)。 我用 JSYN 的 class "DualOscilloscope.java" 做了一些测试,以获得声音的视觉效果。 问题是他们的 class 打开了一条带有“ Synthesizer ” 的线路,所以我和我的声卡上有两行点击触发了异常(因为你不能在声卡上打开两行)。 是否可以使用我实例化我的 TargetDataLine 来初始化 JSYN 的合成器?
源代码class DualOscilloscope(作者Phil Burk)
protected void startAudio(int itemIndex) {
// Both stereo.
int numInputChannels = deviceMaxInputs.get(itemIndex);
if (numInputChannels > 2)
numInputChannels = 2;
int inputDeviceIndex = deviceIds.get(itemIndex);
synth.start(16000, inputDeviceIndex, numInputChannels, AudioDeviceManager.USE_DEFAULT_DEVICE, 0);
channel1.output.connect(pass1.input);
// Only connect second channel if more than one input channel.
if (numInputChannels > 1) {
channel2.output.connect(pass2.input);
}
// We only need to start the LineOut. It will pull data from the
// channels.
scope.start();
JSyn 当前不支持传递 TargetDataLine。但是,您可以根据 GitHub 上的源代码实现自己的 AudioDeviceManager。将 JavaSoundAudioDevice.java 替换为使用您的 TargetDataLine 而不是创建新的。
一种更简单的方法是让 JSyn 打开音频输入,然后在您的程序中使用该输入。不要打开您自己的 TargetDataLine。
您可以使用 JSyn 处理音频或将其保存为 WAVE 文件。如果您需要进行自定义处理,那么您可以编写一个自定义单位生成器。或者您可以使用 AudioStreamReader 将音频数据流式传输到您自己的线程。
AudioStreamReader reader = new AudioStreamReader(synth, 2); // stereo
lineIn.connect(0, read.getInput(), 0);
lineIn.connect(1, read.getInput(), 1);
然后您可以从 reader 而不是从您自己的 TargetDataLine 中读取数据。
reader.read(buffer, start, count);