【问题标题】:Issue with .Wav Speex header content.Wav Speex 标头内容问题
【发布时间】:2013-03-28 21:47:27
【问题描述】:

我已经安装了 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) 标头中的秘密字节吗?

【问题讨论】:

    标签: c# speex wav riff


    【解决方案1】:

    我找到了!这正好解释了我丢失的 14 个字节(检查 SPEEX_WFX_EXTRA_BYTES=14)

    //typedef struct tWAVEFORMATEX
    //{
    //    WORD        wFormatTag;         /* format type */
    //    WORD        nChannels;          /* number of channels (i.e. mono, stereo...) */
    //    DWORD       nSamplesPerSec;     /* sample rate */
    //    DWORD       nAvgBytesPerSec;    /* for buffer estimation */
    //    WORD        nBlockAlign;        /* block size of data */
    //    WORD        wBitsPerSample;     /* number of bits per sample of mono data */
    //    WORD        cbSize;             /* the count in bytes of the size of */
    //                                    /* extra information (after cbSize) */
    //} WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX;
    
    //#define WAVE_FORMAT_SPEEX                           0xa109  
    //#define SPEEXWAVEFORMAT_VERSION 0x0100    // 1.0 
    //#define SPEEX_WFX_EXTRA_BYTES   14 
    
    ///* 
    //    wfx.wFormatTag = WAVE_FORMAT_SPEEX 
    //    wfx.nChannels = 1,2 
    //    wfx.nSamplesPerSec = 8000,16000,32000 
    //    wfx.nAvgBytesPerSec = ... 
    //    wfx.nBlockAlign = CBR? ... : 1 
    //    wfx.wBitsPerSample = 16 
    //    wfx.cbSize = SPEEX_WFX_EXTRA_BYTES 
    
    //    For VBR: 
    //    wfx.nAvgBytesPerSec = SPEEX_BITRATE_24600; 
    //*/ 
    
    //typedef struct speexwaveformat_tag 
    //{ 
    //    WAVEFORMATEX    wfx; 
    
    //    WORD nVersion;        // SPEEXWAVEFORMAT_VERSION 
    //    WORD nFramesPerBlock;// 1.. 
    //    WORD nQuality;        // 0..10 
    //    WORD nMode;           // SPEEX_MODE_... 
    //    WORD nVbrQuality; // 0..1000 ,float [0.00 , 10.00] 
    //    WORD nComplexity; // 1..10 
    //    WORD nFlags;      // SPEEX_FLAG_... 
    //} SPEEXWAVEFORMAT;            
    // CBR,ABR,VBR 
    
    //#define SPEEX_MODE_CBR            0 
    //#define SPEEX_MODE_ABR            1 
    //#define SPEEX_MODE_VBR            2 
    
    //// flags 
    //#define SPEEX_FLAG_VAD            0x0001 
    //#define SPEEX_FLAG_DTX            0x0002 
    
    //#define SPEEX_DEF_QUALITY 3 
    //#define SPEEX_DEF_COMPLEXITY 3 
    //#define SPEEX_DEF_VBR_QUALITY 500
    

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 2012-04-22
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      相关资源
      最近更新 更多