Java JSyn 循环站
Java JSyn Loopstation
我正在尝试在 JSyn 中编写一个 loopstation 程序,灵感来自 this。我的想法是,我可以录制到 Wav 文件并从程序中播放它们。在我尝试同时对多个文件执行此操作之前,它一直很有效。
我该如何处理?
我无法创建多个合成器引擎,否则会出现错误,因此我创建了一个 class 以及我的线路输出和我的合成器。但是如果音频只在合成器休眠时播放,我如何同时播放多个文件?
System.out.println("queue the sample");
samplePlayer.dataQueue.queue(sample);
System.out.println("queued the sample");
// Wait until the sample has finished playing.
do {
mySynth.sleepFor(1); //synth has to sleep while sample is being played
} while (samplePlayer.dataQueue.hasMore()); //this seems to always return true -> synth never wakes up & the program crashes
这是改编自 JSyn 库中包含的示例。我自己的大部分编码都基于 JSyn Programmer's Guide
这就是 GUI 的样子(在 Java Swing 中编程)。它响应鼠标和小键盘。这行得通。
我的输出的构造函数class。这包含合成器和线路输出。
public OutputMix() {
filePath = sampleMachineFrame.filePath; //string containing path to location for sample files
mySynth = JSyn.createSynthesizer();
myLineOut = new LineOut();
mySynth.add(myLineOut);
recorder = new RecordMic[10]; //one recorder for each button (my own class)
player = new PlayFromWav[10]; //one player for each button (my own class)
}
录音绝对没问题。我什至可以开始重叠录音(即一次录制到两个文件)并使用外部程序播放它们。
但是,当我尝试 播放 时, 合成器永远不会唤醒 而且我也在努力想象 我将如何播放多个一次归档 。
感谢您的帮助:)
一般来说,除非您正在对事件进行排序,否则您不想在程序中休眠。只需将响应 Button 事件的样本排队,然后让它们 运行.
如果文件足够小,那么您可以将它们加载到内存中。然后您可以随时将多个文件排队。您可能需要增加 Java 虚拟机的堆大小。
这里有一个例子:https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/PlaySample.java
如果样本太大,那么您将不得不使用多个线程将它们从磁盘中流出,这会更加困难。
您可以使所有样本大小相同。然后他们将保持同相。或者您可以使用时间戳在特定节拍触发它们。
我正在尝试在 JSyn 中编写一个 loopstation 程序,灵感来自 this。我的想法是,我可以录制到 Wav 文件并从程序中播放它们。在我尝试同时对多个文件执行此操作之前,它一直很有效。 我该如何处理? 我无法创建多个合成器引擎,否则会出现错误,因此我创建了一个 class 以及我的线路输出和我的合成器。但是如果音频只在合成器休眠时播放,我如何同时播放多个文件?
System.out.println("queue the sample");
samplePlayer.dataQueue.queue(sample);
System.out.println("queued the sample");
// Wait until the sample has finished playing.
do {
mySynth.sleepFor(1); //synth has to sleep while sample is being played
} while (samplePlayer.dataQueue.hasMore()); //this seems to always return true -> synth never wakes up & the program crashes
这是改编自 JSyn 库中包含的示例。我自己的大部分编码都基于 JSyn Programmer's Guide
这就是 GUI 的样子(在 Java Swing 中编程)。它响应鼠标和小键盘。这行得通。
我的输出的构造函数class。这包含合成器和线路输出。
public OutputMix() {
filePath = sampleMachineFrame.filePath; //string containing path to location for sample files
mySynth = JSyn.createSynthesizer();
myLineOut = new LineOut();
mySynth.add(myLineOut);
recorder = new RecordMic[10]; //one recorder for each button (my own class)
player = new PlayFromWav[10]; //one player for each button (my own class)
}
录音绝对没问题。我什至可以开始重叠录音(即一次录制到两个文件)并使用外部程序播放它们。 但是,当我尝试 播放 时, 合成器永远不会唤醒 而且我也在努力想象 我将如何播放多个一次归档 。 感谢您的帮助:)
一般来说,除非您正在对事件进行排序,否则您不想在程序中休眠。只需将响应 Button 事件的样本排队,然后让它们 运行.
如果文件足够小,那么您可以将它们加载到内存中。然后您可以随时将多个文件排队。您可能需要增加 Java 虚拟机的堆大小。
这里有一个例子:https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/PlaySample.java
如果样本太大,那么您将不得不使用多个线程将它们从磁盘中流出,这会更加困难。
您可以使所有样本大小相同。然后他们将保持同相。或者您可以使用时间戳在特定节拍触发它们。