我正在将webaudio与javascript一起使用,并且这个简单的示例(与google-chrome一起使用)
数据从麦克风实时收集到一个阵列中。
然后,我们将真实时间(t1
)与数据花费的时间(t2
)进行比较,它们之间的差异为固定比率t2/t1 = 1.4
。
备注:这里,真实时间t1表示由时钟测量的持续时间,即通过函数Date()。getTime();获得,而 时间t2 = N * Dt,其中N是从麦克风获得的数据数量,Dt = 1 /(采样率)= 1/44100秒。是两个数据之间的时间。
我的问题是:这是否意味着采样数据速率不是 44100Hz ,而是 30700Hz * 2 (即具有两个通道)? 还是数据中的某些重复?
请问另一个相关的问题:在这种实时采集过程中,是否有办法检查我们是否没有丢失任何数据?
答案 0 :(得分:1)
快速浏览一下测试代码,您正在使用AnalyserNode
来确定t2
,然后通过rAF调用函数F3()
。大约每16.6 ms或732个采样(在44.1 kHz下)发生一次。但是每次将t2递增N = 1024帧。因此,您的t2值大约是实际帧数的1.4倍。 (这实际上是您得到的!)
如果您真的想测量已收到的样本数量,则必须在音频图表中进行同步处理,因此请使用ScriptProcessorNode
或AudioWorklet
来计数已获取的数据样本数量处理。然后,您可以将t2增加正确的数量。这应该更接近您的t1值。但是请注意,驱动t1值的时钟很可能与驱动音频系统的音频时钟不同。它们会随着时间的推移而漂移,尽管只要您连续几天不运行此漂移,漂移可能会很小。