2012-07-02 29 views

回答

2

答案并不真实。您获得的音频信号是一个调制载波,并从中提取SMPTE位是一个多步骤过程:您通过麦克风或音频输入的原始数据不会对应SMPTE时间码。因此,您需要解码音频,这并不简单。

第一步是将您的音频信号从biphase mark code转换。我自己并没有实现SMPTE读卡器,但您知道SMPTE标准的时钟速率,所以我要做的第一件事是仔细过滤以消除背景噪音,因为它听起来像是从音频中取出音频麦克风。温和的高通以消除任何直流偏移应该做,并且温和的低频对于高频噪声也应该有帮助。 (你可以使用宽带通)

然后,你需要找到每个时钟周期的开始。你可以做一些像自相关或PLL算法那样的花式,但我怀疑知道SMPTE标准的大致时钟速率并能够上下调整百分之几就足够了 - 也许会更好。所以,根据规格寻找重复的转换。如果你怀疑你的时间码高度扭曲(如果你有一个非常古老的磁带卡,或者你想以非常高/低的速度进行同步,那么做一些奇特的事情会有所帮助,但是LTC并不是真正为此设计的。更多VTC的领域。)。

一旦确定了时钟,就需要为每个时钟周期确定是否在时钟周期开始时发生信号转换。每个时钟节拍在中间会有一个转换,但是开始时的转换指示一个0位。这就是BMC如何在单一流中传输时钟和数据的方式。这使您可以创建新的实际SMPTE数据流。

现在,您已将BMC解码为SMPTE流。下一步是查找同步代码。从维基百科的规格和我对SMPTE的记忆中,我可以断言找到一个同步代码是不够的,这可能是由于80位数据块中的其他地方偶然发生或偶然发生的。相反,您必须以正确的间隔连续找几个。然后,您可以将数据读入80位SMPTE模块,并且在您阅读的过程中,您必须继续验证同步代码。如果您没有看到您期望的地方,请从头开始搜索。

最后,一旦你解码了,你将不得不想出一些方法来“飞轮”,因为你几乎肯定不会一直读取所有数据(没有校验和!)。那是野兽的本质。

+0

哇,谢谢你这个澄清的答案。你认为libsmpte(https://ltcsmpte.svn.sourceforge.net/svnroot/ltcsmpte/libltcsmpte/trunk/)是否具有解调功能?你知道任何可能有帮助的Java库吗? – joafeldmann

+0

我可能会误读,但看起来像这样,http://ltcsmpte.sourceforge.net/,该库*被设计成可以做你想做的。恐怕我不知道有任何Java库可以帮助您,但您可能会发现某些内容是您搜索双相标记代码或相关术语,然后在其上编写您自己的SMPTE阅读器。 –