gpt4 book ai didi

c# - .Wav Speex header 内容的问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:29 25 4
gpt4 key购买 nike

我已经安装了 Speex Voice ACM Codec 1.0.1.1 编解码器,它们似乎有不同的 .wav header ,然后是这个 NSpeex(C#) 包中的 C# 代码中描述的 header 。

我可以读取使用“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件,并成功解码它们,但是当我创建 .wav 文件时,“Speex Voice ACM Codec 1.0.1.1”无法识别我的 header 。我用十六进制编辑器检查过,.wav header 中有一些字节是“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 类的代码中的其余部分不同。

在十六进制编辑器中,我在“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 编解码器 1.0.1.1”兼容的 .wav header 。同样,我可以解码他们的 .wav 文件,并创建我可以解码的 .wav 文件,但该编解码器似乎无法识别我的 .wav header 。

Speex 应该是“开源”的,有人可以揭示 .wav (speex) header 中的 secret 字节吗?

最佳答案

我找到了!这正好解释了我丢失的 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

关于c# - .Wav Speex header 内容的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com