Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AudioContext';s频率数据与OfflineAudioContext有很大差异;s频率数据_Javascript_Web Audio Api - Fatal编程技术网

Javascript AudioContext';s频率数据与OfflineAudioContext有很大差异;s频率数据

Javascript AudioContext';s频率数据与OfflineAudioContext有很大差异;s频率数据,javascript,web-audio-api,Javascript,Web Audio Api,这个标题基本上解释了我的问题。我一直在比较使用在线和离线音频上下文捕获的频率数据。他们似乎有很大的不同,所以我把这些放在一起以显示差异 基本上只需上传任何音频文件,OfflineAudioContext就会立即将其拾取并开始渲染。每当渲染达到歌曲的播放秒标记5时,它将输出当前频率数据。完成OfflineAudioContext的渲染后,您将看到页面上的音频控件得到更新,您可以播放歌曲。一旦歌曲达到5秒,使用在线AudioContext,分析仪的频率数据将输出到屏幕 你可以看到,这两首歌之间的频率

这个标题基本上解释了我的问题。我一直在比较使用在线和离线音频上下文捕获的频率数据。他们似乎有很大的不同,所以我把这些放在一起以显示差异

基本上只需上传任何音频文件,OfflineAudioContext就会立即将其拾取并开始渲染。每当渲染达到歌曲的播放秒标记5时,它将输出当前频率数据。完成
OfflineAudioContext
的渲染后,您将看到页面上的音频控件得到更新,您可以播放歌曲。一旦歌曲达到5秒,使用在线
AudioContext
,分析仪的频率数据将输出到屏幕


你可以看到,这两首歌之间的频率数据,至少对于我刚才提到的歌曲来说,变化很大。不确定我是否完全理解
OfflineAudioContext
或者它是什么,但是如果有人遇到过类似的事情或者对这里发生的事情有任何想法,我将非常感谢您提供的任何信息。

假设您的测试文件是某种音乐文件,那么我希望结果会有所不同。除非您可以同时调用
getByteFrequencyData
,否则您将得到不同的结果,因为
AnalyserNode
中的数据将不同。由于
getByteFrequencyData
是从主线程调用的,并且必须从音频线程获取数据,因此很难确切地知道您拥有哪些数据


如果必须为脱机上下文和实时上下文获取相同的数据,则应使用
ScriptProcessorNode
AudioWorkletNode
来确保同时获取频率数据。(但要保持一致;在这两种上下文中都使用
ScriptProcessorNode
AudioWorkletNode

如果有人遇到同样的问题,我最终找到了问题所在。每当我创建脱机音频上下文时,我都会错误地初始化它。我是这么做的

let offline = new OfflineAudioContext(2, 44100 * buffer.duration, 44100);
当我应该做的时候

let offline = new OfflineAudioContext(buffer.numberOfChannels, buffer.length, buffer.sampleRate);

在我做了那个改变之后,离线上下文和实时上下文之间的频率数据值看起来更接近了。

我决定检验一下你的理论。我在Audacity中生成了一个440hz的音调,持续了30秒,然后运行了一遍。我仍然在离线上下文和实时上下文之间得到不同的结果。这里是MP3下载链接:不知道Audacity是否能做到这一点,但也许可以使用Matlab或倍频程对波形中不同点的正弦波进行FFT。FFT结果将根据进行FFT的时间而变化。