如何以特定位深度渲染?

How to render in a specific bit depth?

如何 OfflineAudioContext.startRendering() 输出包含我选择的位深度(16 位或 24 位)的 AudioBuffer?我知道我可以使用 AudioContext.sampleRate 轻松设置输出的采样率,但是如何设置位深度?

我对音频处理的理解非常有限,所以可能并不像我想的那么简单。

编辑#1:

实际上,AudioContext.sampleRate 是只读的,所以如果您知道如何设置输出的采样率,那也很好。

编辑#2:

我猜采样率是在编码 WAV 中的通道数之后插入的(在 DataView 中)

您不能直接执行此操作,因为 WebAudio 仅适用于 floating-point 值。你必须自己做。基本上从离线上下文中获取输出并将每个样本乘以 32768(16 位)或 8388608(24 位)并舍入为整数。这假设上下文的输出在 -1 到 1 的范围内。如果不是,您将不得不进行额外的缩放。最后,您可能希望将最终结果除以 32768 (8388608) 以获得 floating-point 个数字。这取决于最终的应用程序是什么。

对于编辑 #1,答案是当您构造 OfflineAudioContext 时,您必须指定采样率。将其设置为您想要的速率。不确定 AudioContext.sampleRate 与此有什么关系。

对于编辑 #2,没有足够的信息来回答,因为您没有说明 DataView 是什么。