我已经安装了 Speex Voice ACM Codec 1.0.1.1 编解码器,它们似乎有不同的 .wav 标头,然后是此 NSpeex(C#) 包中的 C# 代码中描述的标头。
我可以读取使用“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件,并成功解码它们,但是当我创建 .wav 文件时,“Speex Voice ACM Codec 1.0.1.1”无法识别我的标题。我检查了十六进制编辑器,“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 标头中有一些字节,我没有创建,它们与 NSpeex.PcmWaveWriter 类中的不同。
所以,我同意这部分:
raf.Write(WAVE_FORMAT_SPEEX); // Format tag: Speex
raf.Write((short)channels); // Number of channels
raf.Write(sampleRate); // Sampling frequency
raf.Write((CalculateEffectiveBitrate(mode, channels, quality) + 7) >> 3); // Average bytes per second
raf.Write((short)CalculateBlockSize(mode, channels, quality)); // Blocksize of data
raf.Write((short)quality); // Bits per sample
但是,其余的不是 NSpeex.PcmWaveWriter 类的代码。
在十六进制编辑器中,我在“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件中看到(在上述部分之后):
//byte[] speexSpecific ={
// 0x00, 0x01, 0x02, 0x00,0x0a, 0x00,
// 0x00, 0x00, 0xf4, 0x01,
// 0x03, 0x00, 0x00, 0x00};
但我不知道那是什么以及如何创建 .wav 标头以与“Speex Voice ACM Codec 1.0.1.1”兼容。同样,我可以解码他们的 .wav 文件,并创建我可以解码的 .wav 文件,但该编解码器似乎无法识别我的 .wav 标头。
Speex 应该是“开源”的,有人可以透露 .wav (speex) 标头中的秘密字节吗?