如何以特定位深度渲染?
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
是什么。
如何 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
是什么。