AudioContext 的频率数据与 OfflineAudioContext 的频率数据差异很大
AudioContext's frequency data differs greatly from OfflineAudioContext's frequency data
标题基本上说明了我的问题。我一直在比较使用在线和离线音频上下文捕获的频率数据。它们似乎有很大的不同,所以我把这个 MWE 放在一起来显示差异。
基本上只要上传任何音频文件,OfflineAudioContext
就会立即拾取并开始渲染。每当渲染达到歌曲的播放秒数 5 时,它就会输出当前的频率数据。 OfflineAudioContext
完全完成渲染后,您会看到页面上的音频控件得到更新,您可以播放歌曲。一旦歌曲达到 5 秒,使用在线 AudioContext
,分析仪的频率数据将输出到屏幕。
您将能够看到两者之间的频率数据,至少对于我一直投入的歌曲而言,差异很大。不确定我是否没有完全理解 OfflineAudioContext
或者它是什么,但是如果有人 运行 有类似的东西或者对这里发生的事情有任何想法,我将不胜感激你能提供的任何信息.
假设您的测试文件是某种音乐文件,那么我希望结果会有所不同。除非你能同时调用getByteFrequencyData
,否则你会得到不同的结果,因为AnalyserNode
中的数据会不同。由于 getByteFrequencyData
是从主线程调用的,并且必须从音频线程获取数据,因此很难确切知道您拥有什么数据。
如果你必须为离线上下文和实时上下文获取相同的数据,你应该使用ScriptProcessorNode
或AudioWorkletNode
来保证你同时获取频率数据。 (但要保持一致;在两种情况下都使用 ScriptProcessorNode
或 AudioWorkletNode
。)
如果有人遇到同样的事情,我终于弄清楚问题出在哪里了。每当我创建 OfflineAudioContext
时,我都会错误地初始化它。我在做这个
let offline = new OfflineAudioContext(2, 44100 * buffer.duration, 44100);
当我应该做的时候
let offline = new OfflineAudioContext(buffer.numberOfChannels, buffer.length, buffer.sampleRate);
在我进行更改后,离线上下文和实时上下文之间的频率数据值看起来更接近了。
标题基本上说明了我的问题。我一直在比较使用在线和离线音频上下文捕获的频率数据。它们似乎有很大的不同,所以我把这个 MWE 放在一起来显示差异。
基本上只要上传任何音频文件,OfflineAudioContext
就会立即拾取并开始渲染。每当渲染达到歌曲的播放秒数 5 时,它就会输出当前的频率数据。 OfflineAudioContext
完全完成渲染后,您会看到页面上的音频控件得到更新,您可以播放歌曲。一旦歌曲达到 5 秒,使用在线 AudioContext
,分析仪的频率数据将输出到屏幕。
您将能够看到两者之间的频率数据,至少对于我一直投入的歌曲而言,差异很大。不确定我是否没有完全理解 OfflineAudioContext
或者它是什么,但是如果有人 运行 有类似的东西或者对这里发生的事情有任何想法,我将不胜感激你能提供的任何信息.
假设您的测试文件是某种音乐文件,那么我希望结果会有所不同。除非你能同时调用getByteFrequencyData
,否则你会得到不同的结果,因为AnalyserNode
中的数据会不同。由于 getByteFrequencyData
是从主线程调用的,并且必须从音频线程获取数据,因此很难确切知道您拥有什么数据。
如果你必须为离线上下文和实时上下文获取相同的数据,你应该使用ScriptProcessorNode
或AudioWorkletNode
来保证你同时获取频率数据。 (但要保持一致;在两种情况下都使用 ScriptProcessorNode
或 AudioWorkletNode
。)
如果有人遇到同样的事情,我终于弄清楚问题出在哪里了。每当我创建 OfflineAudioContext
时,我都会错误地初始化它。我在做这个
let offline = new OfflineAudioContext(2, 44100 * buffer.duration, 44100);
当我应该做的时候
let offline = new OfflineAudioContext(buffer.numberOfChannels, buffer.length, buffer.sampleRate);
在我进行更改后,离线上下文和实时上下文之间的频率数据值看起来更接近了。