2013-04-06 2 views
2

Speex Voice ACM Codec 1.0.1.1 코덱을 설치했으며이 NSpeex (C#) 패키지의 C# 코드에 설명 된 것과 다른 .wav 헤더가있는 것 같습니다..Wav Speex 헤더 내용 관련 문제

"Speex Voice ACM Codec 1.0.1.1"로 만든 .wav 파일을 읽고 성공적으로 디코딩 할 수 있지만 .wav 파일을 만들 때 "Speex Voice ACM Codec 1.0.1.1"이 내 헤더를 인식하지 못합니다. 16 진수 편집기로 확인한 결과, "Speex Voice ACM Codec 1.0.1.1"이 생성하는 .wav 헤더에 몇 바이트가 생성되고 생성되지 않으며 NSpeex.PcmWaveWriter 클래스와 다릅니다. 하지 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 

을하지만 :

그래서,이 부분에 동의합니다.

"된 Speex 음성 ACM 코덱 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) 헤더의 비밀 바이트를 공개 할 수 있습니까?

답변

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