gpt4 book ai didi

android - 在 android 中读取原始音频并提取 SMPTE 时间码

转载 作者:行者123 更新时间:2023-11-29 22:03:53 25 4
gpt4 key购买 nike

我正在尝试从 android 中的音频输入流中提取 SMPTE 时间码 ( wikipedia )。

如此处所述https://stackoverflow.com/a/2099226第一步是扫描输入流字节序列 0011111111111101 以进行同步。但是如何使用 AudioRecord 类做到这一点呢?

最佳答案

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

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

然后,您需要找到每个时钟周期的开始。您可以做一些花哨的事情,例如自相关或 PLL 算法,但我怀疑从 SMPTE 标准中了解大致的时钟速率并能够上下调整几个百分点就足够了——也许更好。因此,只需根据规范查找重复转换即可。如果您怀疑您的时间码高度扭曲,那么做一些奇特的事情会有所帮助(如果您有一个非常旧的磁带机或者您想要以非常高/低的速度同步,可能会出现这种情况,但 LTC 并不是为此而设计的。那是更多 VTC 的域名。)。

确定时钟后,您需要针对每个时钟节拍确定信号中的转换是否发生在时钟周期开始时。每个时钟滴答在中间都会有一个转换,但开始时的转换表示 0 位。这就是 BMC 在单个流中传输时钟和数据的方式。这允许您创建一个新的实际 SMPTE 数据流。

现在您已将 BMC 解码为 SMPTE 流。下一步是查找同步代码。查看维基百科上的规范以及我对 SMPTE 的内存,我断言找到单个同步代码是不够的,这可能在 80 位 block 的其他地方偶然或巧合地发生。相反,您必须以正确的间隔连续找到几个。然后您可以将数据读取到 80 位 SMPTE block 中,并且在读取时,您必须继续验证同步代码。如果您没有在预期的位置看到一个,请从头开始搜索。

最后,解码后,您将不得不想出一些“飞轮”方式,因为您几乎肯定不会一直正确读取所有数据(没有校验和!)。这就是野兽的本性。

关于android - 在 android 中读取原始音频并提取 SMPTE 时间码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com