HTK3.4程序员手册(1.1)--HTK中的wav文件格式

HTK3.4程序员手册(1.1)--HTK中的wav文件格式
by 云龙 


1.1.1
 HTK中的Wav
文件格式

HTK3.4支持wav文件格式称为HTK格式。头部为HTKhdr结构,占12个字节。无头的wav文件。默认16000Hz,单声道(mono),16位。Motorola PCM(MSB,LSB)格式。平时通过Cool Edit录制的语音是wav带文件头的Intel PCM(LSB,MSB)格式。

Wav文件格式有两种,Motorola PCM(MSB,LSB)格式和Intel PCM(LSB,MSB)格式。Motorola PCM(MSB,LSB)格式是采用Big Endian方式存储。Intel PCM(LSB,MSB)格式是采用Little Endian的方式存储。那么如何将Intel PCM(LSB,MSB)Little Endian转换为Big Endian格式呢?
 

//Intel PCM(LSB,MSB)Little Endian转换为Big Endian格式

int ConvertIntelPCMtoMotorolaPCM(int Src,int *Dst){

        int Low8 = (Src&0xFF)<<8;

        int High8 = (Src&0xFF00)>>8;

        int New16 = Low8 | High8 ;

        *Dst = New16;

        return 1;

}

 

HTK3.4持的wav文件格式(无头的wav文件。默认16000Hz,单声道(mono),16位。Motorola PCM(MSB,LSB)格式)又是怎么样的呢?
 

       HTK3.4中的HTK Header结构:

typedef struct {              /* HTK File Header */

   int32 nSamples;                 //4字节,语音样本数。一个样本16byte

   int32 sampPeriod; //4字节,一个样本持续的时间(百ns)。/* Sample period in 100ns units */

   short sampSize;                 //2字节,一个语音样本占的字节数。16byte=2字节

   short sampKind;                //2字节,种类。这里=0

} HTKhdr;

注意:HTK中写到文件的时候要把字节位置颠倒。比如nSamples1-4字节写为4-1位置。

 

HTK3.4中读取HTKhdr的函数:

/* EXPORT ReadHTKHeader: get header from HTK file, return false not HTK */

Boolean ReadHTKHeader(FILE *f, long *nSamp, long *sampP, short *sampS,

                      short *kind, Boolean *bSwap)

{

   HTKhdr hdr;

   int n = sizeof hdr;    //n=12

  

   if (fread(&hdr, 1, n, f) != n)

      return FALSE;

   if (!natReadOrder && vaxOrder){

      *bSwap = TRUE;

   }else{

      *bSwap=MustSwap(UNKNOWNSO);

   }

   if (*bSwap){

      SwapInt32(&hdr.nSamples);         //将颠倒的byte倒回来,下同

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值