![设置延迟后在单独的播放设备上重复播放音频](https://linux22.com/image/1581833/%E8%AE%BE%E7%BD%AE%E5%BB%B6%E8%BF%9F%E5%90%8E%E5%9C%A8%E5%8D%95%E7%8B%AC%E7%9A%84%E6%92%AD%E6%94%BE%E8%AE%BE%E5%A4%87%E4%B8%8A%E9%87%8D%E5%A4%8D%E6%92%AD%E6%94%BE%E9%9F%B3%E9%A2%91.png)
首先我解释一下这个场景:我希望将一台 PC 连接到游戏 CS:GO 中的观众服务器,同时加入同一台机器上游戏玩家的语音通信服务器 (discord),然后使用 OBS 流式传输屏幕。
问题在于:观众服务器的运行有固定的延迟 - 我们就说 120 秒吧(显然是为了避免作弊),这意味着,只需将来自 Discord 的声音与连接到服务器的屏幕产生的图像一起传输,就会导致音频比图像提前 120 秒。
我正在寻找一种方法来选择虚拟声卡作为来自 Discord 的音频的输出设备。然后将音频延迟 120 秒,然后将其输出到在 OBS 上流式传输的设备上。
因此,最终得到的流将具有观众对游戏的视角,并且玩家游戏中的音频将(在某种程度上)正确同步。
这可能吗?到目前为止,我还没有找到有关该主题的任何内容。
答案1
我最终采用了以下解决方案:
事实证明,流行的媒体播放器 VLC 具有内置的此功能。我在这里找到了答案:https://softwarerecs.stackexchange.com/questions/35552/record-a-sound-and-play-it-back-after-a-user-defined-delay
处理声音时,我使用 VoiceMeeter 虚拟声音设备作为 Discord 的输出,并在 VLC 中选择 Voicemeeter 作为选定的输入设备。VLC 在默认声音设备(与游戏客户端使用的设备相同)上播放“回声”,从而匹配图像和音频。
答案2
OBS 自己的接口允许你添加最多 20 秒的延迟到您的音频接口,在主屏幕上“混音器”配置轮下的“高级音频属性”下。
但是,既然你提到了 120 秒,那还不够。你尝试使用均衡器 APO增加更多延迟。
来自维基文档:
延迟(自 0.9 版起)
(...)描述:将所选通道上的音频延迟 t 毫秒或 n 个样本。应优先选择毫秒,因为它们将提供与采样率无关的相等延迟。
理论上应该可以。 (但它可以就像 OBS 一样,它可以添加的延迟量是有限的。
但请注意,添加声音延迟也意味着在播放之前将所有延迟的秒数存储在 RAM 内存中,因此根据延迟量和软件使用的音频格式/编解码器,这可能意味着大量内存。
我猜这可能是 OBS 限制的一个原因,尽管我认为这应该由用户自行决定。
至于虚拟声卡输入和输出之间的接口,你可以使用免费版本的虚拟音频线。