| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 877 人关注过本帖
标题:请问用C语言怎么提取语音基音?求助
只看楼主 加入收藏
long023
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-20
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
请问用C语言怎么提取语音基音?求助
首先是VC读入语音文件,即.WAV文件  
然后分帧、加窗  
等预处理
然后提取特征(比如短时能量,自相关函数) 或者之前先进行阈值处理等  
最后把基音提取出来
==================================================================
总的要求是:用C提取语音的基音
=================================================================
高手赐教。。。。。。  
搜索更多相关主题的帖子: C语言 语音 
2011-11-20 16:34
long023
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-20
收藏
得分:0 
求助呢、、、、
2011-11-20 17:54
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:10 
这个问题很深奥,不知道windows API里有没有这种函数,或者楼主可以试试其他的函数库

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-11-20 20:55
long023
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-20
收藏
得分:0 
#include <stdio.h>
    int main(void){
      int GetTimeLength() {                                        //获取声音文件数据的函数,pString参数指向要打开的声音文件;
        HMMIO file;                                                    //定义HMMIO文件句柄;
        file=mmioOpen("E://Broken Angel.wav",NULL,MMIO_READWRITE);    //以读写模式打开所给的WAVE文件;
        
        if(file==NULL) {
        TRACE("WAV文件打开失败!");
        return -1;
        }

    char style[3];                                                //定义一个四字节的数据,用来存放文件的类型;
    mmioSeek(file,8,SEEK_SET);                                    //定位到WAVE文件的类型位置
    mmioRead(file,style,3);
        
        if(style[0]!='W'||style[1]!='A'||style[2]!='V'){        //判断该文件是否为"WAVE"文件格式  
            TRACE("该文件不是WAVE格式的文件!");
            return -1;
        }

    PCMWAVEFORMAT format;                                        //定义PCMWAVEFORMAT结构对象,用来判断WAVE文件格式;
    mmioSeek(file,20,SEEK_SET);                                    //对打开的文件进行定位,此时指向WAVE文件的PCMWAVEFORMAT结构的数据;
   
    mmioRead(file,(char*)&format,sizeof(PCMWAVEFORMAT));        //获取该结构的数据;
        mmioSeek(file,42,SEEK_SET);                             //获取WAVE文件的声音数据的大小;
        
       unsigned long size;
     mmioRead(file,(char*)&size,3);                                //计算文件时长
 
    int timeLength;
    timeLength = size/format.wf.nAvgBytesPerSec;
    mmioClose(file, 0);
    return timeLength;
      }
return 1;
}
2011-11-22 19:50
long023
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-20
收藏
得分:0 
我的代码如此,请问如何修改,能读到本地的.wav文件呢?
2011-11-22 19:51
long023
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-20
收藏
得分:0 
求解释上述程序。。。有一处错误
2011-11-23 19:46
快速回复:请问用C语言怎么提取语音基音?求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012283 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved