创建每个样本值具有任意位的 WAV 文件?

Creating a WAV file with an arbitrary bits per sample value?

WAV 文件是否允许任意数量的 bitsPerSample?

我无法让它与小于 8 的任何东西一起工作。我不确定如何为一件事定义 blockAlign

Dim ss As New Speech.Synthesis.SpeechSynthesizer
Dim info As New Speech.AudioFormat.SpeechAudioFormatInfo(AudioFormat.EncodingFormat.Pcm, 5000, 4, 1, 2500, 1, Nothing) ' FAILS
ss.SetOutputToWaveFile("TEST4bit.wav", info)
ss.Speak("I am 4 bit.")
My.Computer.Audio.Play("TEST4bit.wav")

AFAIK ,4 位 PCM 格式是 未定义,拥有 16 个音量级别的音频没有多大意义;质量会很糟糕。

虽然技术上可行,但我知道没有像样的软件(例如 Wavelab)支持它,但您自己的播放器可以。

公式:blockAlign = channels * (bitsPerSample / 8)

所以对于单声道 4 位它将是:blockAlign = 1 * ((double)4 / 8) = 0.5

请注意 double 的用法对于不以 0 结束是必要的。

但是如果你看下面的块对齐定义,0.5 字节的对齐真的没有多大意义,必须在位级别工作(痛苦且无用,因为在这种质量下,未压缩的 PCM 听起来会很糟糕):

wBlockAlign

波形数据的块对齐(以字节为单位)。回放 软件需要处理多个 wBlockAlign 字节的数据 一个时间,所以 wBlockAlign 的值可以用于缓冲 对齐.

参考:

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf 第 59 页

解决方法:

如果你真的需要4位,切换到ADPCM格式。