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 no ,未定义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格式。
关于vb.net - 创建每个样本值具有任意位的WAV文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193161/