【问题标题】:Extracting SMPTE timecode from audio stream从音频流中提取 SMPTE 时间码
【发布时间】:2010-01-20 04:23:10
【问题描述】:

我正在开发一个录音系统。我的任务涉及从同步器设备生成的音频输入流中提取 SMPTE 时间码。我正在使用 ASIO SDK 来获取每个回调缓冲区的时间码,但它始终为零。

也许有人在 ASIO SDK(或任何其他可用于从音频流中提取 SMPTE 时间码的平台/sdk)方面有经验可以帮助我?

问候, 本

【问题讨论】:

    标签: audio-recording


    【解决方案1】:

    LTC 很简单,所以如果不出意外,您可以只扫描音频流中的 LTC 数据as documented on wikipedia。每个 80 位帧以 0011 1111 1111 1101 结束,只需扫描该字节序列以进行同步,然后将在该同步序列之后开始的缓冲区数据转换为 80 位 struct timecode_t 元素的数组。如果您的缓冲区大小为 80 的倍数,您的计算会更容易(但您确实需要测试同步丢失,因为声卡会因溢出而丢失位)。

    困难的部分是,如果我没记错的话,时间码“位”与采样音频流的位不同,因此您必须实现逻辑来检测位序列。这可以只是一个 for 循环检查正确的信号变化并在适当的情况下将位附加到缓冲区(然后在缓冲区已满时调用函数来解释缓冲区)。

    【讨论】:

    • 嗨贾斯汀,感谢您的回复。我的问题是:ASIO 驱动程序总是返回我 timecode=0,所以我无法使用您建议的方式对其进行解码。 ASIO 驱动程序将音频流与时间码分开返回。驱动程序信息结构中的“tcSamples”字段似乎是我唯一可以查找时间码的地方,而且它始终为 0。所以,我只是不知道下一步该做什么......
    • SMPT LTC 数据是音频流。您需要解码该音频流以获取数据。您可以将缓冲区交给一些库,它们会返回一个结构,或者您可以按照我的建议执行并自己实现。如果您的项目可以使用 lgpl 库,ltcsmpte.sourceforge.net 可能会起作用,或者它可能仅适用于 Linux(我的经验几乎都是 Linux)。或者你可以找到一个做同样事情的 Windows 库。
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2021-09-18
    • 2011-06-22
    相关资源
    最近更新 更多