读取wav文件中的音频数据操作

根据前面对wav格式信息的了解:

给出如下函数:两颗星的变量指向从数据wav文件读取的音频数据,不包括wav头部信息,获得的数据直接可以放到wavoutWrite函数中进行播放输出(当然事先还要打开设备之类的).

用CFile读取wav文件数据,作为输入.

int read_wav_head(WAVEFORMATEX *wf, char **out_buffer, int *out_len, char *in_buffer, int in_len)
{
 char *lp_pos;
    int itmp;
   
    lp_pos = in_buffer;
    if(in_buffer == NULL || in_len == 0 || in_len < WAVE_HEADER_SIZE || wf==NULL)
        return 1;

    if(strncmp(lp_pos,"RIFF",4)!=0)
        return -1;
    lp_pos += 4;

    itmp = *((int*)lp_pos);
    if(itmp != (in_len-8))
        return -1;
    lp_pos += 4;

    if(strncmp(lp_pos,"WAVEfmt ",8)!=0)
        return -1;
    lp_pos += 8;

    itmp = *((int*)lp_pos);
    if(itmp != 16)
        return -1;
    lp_pos += 4;

    /**//*格式信息*/
    memcpy(wf,lp_pos,16);
    lp_pos += 16;

    if(strncmp(lp_pos,"data",4)!=0)
        return -1;
    lp_pos += 4;

    //真正的数据长度
    *out_len = *((int*)lp_pos);
    lp_pos += 4;

    if(*out_len != (in_len - WAVE_HEADER_SIZE))
        return 1;

    *out_buffer = (char*)malloc(*out_len);
    if(*out_buffer == NULL)
        return -2;

    memcpy(*out_buffer,lp_pos,*out_len);
 
 

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值