我们是否使用webaudio中的createMediaStreamSource获取所有数据?

时间:2018-11-27 12:53:22

标签: javascript real-time web-audio microphone

我正在将webaudio与javascript一起使用,并且这个简单的示例(与google-chrome一起使用)

https://www-fourier.ujf-grenoble.fr/~faure/enseignement/javascript/code/web_audio/ex_microphone_to_array/

数据从麦克风实时收集到一个阵列中。 然后,我们将真实时间(t1)与数据花费的时间(t2)进行比较,它们之间的差异为固定比率t2/t1 = 1.4

备注:这里,真实时间t1表示由时钟测量的持续时间,即通过函数Date()。getTime();获得,而 时间t2 = N * Dt,其中N是从麦克风获得的数据数量,Dt = 1 /(采样率)= 1/44100秒。是两个数据之间的时间。

我的问题是:这是否意味着采样数据速率不是 44100Hz ,而是 30700Hz * 2 (即具有两个通道)? 还是数据中的某些重复?

请问另一个相关的问题:在这种实时采集过程中,是否有办法检查我们是否没有丢失任何数据?

1 个答案:

答案 0 :(得分:1)

快速浏览一下测试代码,您正在使用AnalyserNode来确定t2,然后通过rAF调用函数F3()。大约每16.6 ms或732个采样(在44.1 kHz下)发生一次。但是每次将t2递增N = 1024帧。因此,您的t2值大约是实际帧数的1.4倍。 (这实际上是您得到的!)

如果您真的想测量已收到的样本数量,则必须在音频图表中进行同步处理,因此请使用ScriptProcessorNodeAudioWorklet来计数已获取的数据样本数量处理。然后,您可以将t2增加正确的数量。这应该更接近您的t1值。但是请注意,驱动t1值的时钟很可能与驱动音频系统的音频时钟不同。它们会随着时间的推移而漂移,尽管只要您连续几天不运行此漂移,漂移可能会很小。