首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Wav Speex报头内容问题

.Wav Speex报头内容问题
EN

Stack Overflow用户
提问于 2013-04-06 21:29:13
回答 1查看 671关注 0票数 2

我已经安装了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”无法识别我的标题。我检查了十六进制编辑器,在.wav头中有一些字节是“Speex Voice ACM Codec 1.0.1.1”创建的,我没有创建,它们与NSpeex.PcmWaveWriter类中的不同。

因此,我同意这一部分:

代码语言:javascript
复制
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文件中看到(在上面提到的部分之后):

代码语言:javascript
复制
//byte[] speexSpecific ={   
//   0x00, 0x01, 0x02, 0x00,0x0a, 0x00,   
//   0x00, 0x00, 0xf4, 0x01,    
//   0x03, 0x00, 0x00, 0x00};   

但我不知道这是什么,以及如何创建.wav头,以兼容“Speex语音ACM编解码器1.0.1.1”。同样,我可以解码他们的.wav文件,并创建我可以解码的.wav文件,但编解码器似乎无法识别我的.wav头文件。

Speex应该是“开源的”,有人能泄露.wav (speex)头中的秘密字节吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-09 22:49:26

我找到了!这正好解释了我遗漏的14个字节(请查看SPEEX_WFX_EXTRA_BYTES=14)

代码语言:javascript
复制
//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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15851537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档