Speex Voice ACM Codec 1.0.1.1 コーデックをインストールしましたが、この NSpeex(C#) パッケージの C# コードで記述されているものとは異なる .wav ヘッダーがあるようです。
「Speex Voice ACM Codec 1.0.1.1」で作成した .wav ファイルを読み取って正常にデコードできますが、.wav ファイルを作成すると、「Speex Voice ACM Codec 1.0.1.1」がヘッダーを認識しません。Hexエディタで確認したところ、.wavヘッダーに「Speex Voice ACM Codec 1.0.1.1」が作成するバイトと作成していないバイトがあり、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 クラスのコードにあるものではありません。
Hex エディターでは、(上記の部分の後に) 「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};
しかし、それが何なのか、「Speex Voice ACM Codec 1.0.1.1」に対応する .wav ヘッダーを作成する方法がわかりません。繰り返しますが、彼らの .wav ファイルをデコードし、デコードできる .wav ファイルを作成できますが、そのコーデックは私の .wav ヘッダーを認識しないようです。
Speex は「オープン ソース」であるはずですが、誰かが .wav (speex) ヘッダーの秘密のバイトを明らかにできますか?