我正在用 Java 制作一个 DAW,实际上它比这更基本,我以我曾经拥有的一台旧的 Tascam 4-Track 录音机为模型。我试图在录制时监控音频,同时尽可能减少两者之间的延迟(延迟)。如果我在同一个线程中写入音频字节,我正在读取它们会有大量的延迟(如果你想查看我拥有的代码,我会发布它,但它似乎无关紧要,因为我认为它需要重写) . 我一直在考虑做的是使用生产者、消费者线程和队列来存储它们之间的字节块。所以我的生产者线程会从TargetDataLine
并将它们存储在队列中,可能使用返回读取的字节数的方法,以便我可以在我的 while 循环中检查 EOF。并创建一个并发线程,该线程获取存储在队列中的字节块(当它们是要写入的字节时)并将它们写入SourceDataLine
. 我的想法是同时运行的两个线程将能够几乎在读取字节的同时写入字节,或者至少比我现在的更好,但我想知道其他人是如何解决这个问题的。
此外,如果队列中没有字节,我还需要确保我的消费者线程等待,并在添加字节以再次开始写入字节时收到通知,如果有人会发布一个同步两个线程的正确方法的示例,我会欣赏它。我知道它们必须在同步代码块中,我应该使用多个锁吗?我不是要一个特定于音频的示例,只是一个将某些内容添加到集合然后将其删除的一般示例,感谢您提供任何帮助。谢谢。