您正在寻找的用于流式传输传入音频数据的类是 TargetDataLine。
如果要混合音频,首先需要从字节中导出 PCM。 PCM 值可以简单地加在一起(尽管通常会应用最大值和最小值来防止溢出值,这听起来非常可怕),并将结果定向到 SourceDataLine。
我想最棘手的部分是以有序的方式阅读各行。我的第一个猜测是创建多个 FIFO 缓冲区,从您的各种传入线路(每个传入线路一个 FIFO)读取。然后,另一个线程可以有序地、按需轮询这些缓冲区中的数据。包含这些缓冲区的主要原因是允许混合发生而不受各种贡献线的输入速率的任何变幻莫测的影响。这样,如果一条线路滞后,就不会有阻塞整个作品的风险,该线路的缓冲区可以简单地呈现 0 值,并且混合线程可以不间断地向扬声器发送数据。
像 ConcurrentLinkedQueue 这样的东西可能是最好的,因为您需要让服务器输入和混合器线程访问缓冲区。
不过,出于某种原因,我从未见过多个演讲者进行现场混音的聊天。通常一次只允许一条线路处于活动状态。如果你试图让它与现场混音一起工作,我很想听听它是如何进行的。我怀疑为什么没有这样做有充分的实际原因。
我已将这种缓冲方案与一条麦克风输入线一起使用。缓冲区使我能够成功地将这些数据与来自 .wav 文件和 PC 上的合成器线路的实时回放混合在一起。我还没有尝试过从插座输入音频。
本文链接:https://www.f2er.com/78567.html