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

如果样本太大,那么您将不得不使用多个线程将它们从磁盘中流出,这会更加困难。

您可以使所有样本大小相同。然后他们将保持同相。或者您可以使用时间戳在特定节拍触发它们。