【问题标题】:Solving latency between AVPlayer and NSSound解决 AVPlayer 和 NSSound 之间的延迟
【发布时间】:2014-05-31 04:37:06
【问题描述】:

在 AVFoundation 和简单的 [NSSound 播放] 之间,我遇到了似乎取决于计算机的延迟。 我的程序正在播放 AVPlayer 内排列的一个视频轨道和 3 个音频轨道。这工作得很好。独立地,该程序根据乐谱中的信息为小节的每个节拍生成一个节拍器。这两个节拍器声音是非常短的文件,我将它们加载到 NSSound 中并使用 [NSSound play] 来播放它们。我注意到我必须将节拍器播放移动大约 90 毫秒,以便完美同步。部分原因可能是节拍器的影响位于节拍器文件中的确切时刻,但如果这是唯一的原因,那么这种延迟在所有 Mac 计算机上都是相同的。但是,在不同的 Mac 上,必须调整此延迟。由于它是与音乐同步的节拍器节拍,因此非常关键,因为轻微的移动会使它听起来偏离节拍。有没有办法直接从 AVFoundation API 计算这个延迟?或者补偿它或以其他方式播放节拍器,以便在 AVPlayer 和 NSSound 播放之间没有延迟?我将不胜感激有关此的一些链接或想法。 谢谢 ! 多米尼克 琶音音乐,比利时

【问题讨论】:

  • 你没有提到你是如何安排声音的。听起来好像您可能正在使用 NSTimer - 它有各种各样的问题。如果这个问题成为如何可靠地安排节拍器声音的问题之一,那么我之前已经在这里回答过几次了。让我看看能不能找到答案。
  • 谢谢马尔科。为了安排声音播放,我确实使用了一个 NSTimer,但我将它设置在一个单独的线程中,并使用它自己的事件循环,仅此而已。这种方式非常稳定,没有故障。唯一的问题是找到如何计算我必须添加或减去这个节拍器播放的延迟,因为它似乎依赖于机器。该线程正在观察 AVPlayer 时间值,并在适当的时候触发声音播放。

标签: macos audio avfoundation latency


【解决方案1】:

我建议查看低级音频库来管理和即时播放您的音乐。 BASS 是一个基于音频单元的低级库,可以对您的流进行精细、精确和快速的控制。通过操作缓冲区,并可能创建混音器流(请参阅文档),您应该能够立即在任何设备上播放声音。具体来说,考虑预先缓冲声音并将其保存在内存中,因为它是一个短声音。

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多