2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > VS语音信号处理(2) C语言分段读取WAV语音文件语音数据

VS语音信号处理(2) C语言分段读取WAV语音文件语音数据

时间:2022-05-02 12:24:40

相关推荐

VS语音信号处理(2) C语言分段读取WAV语音文件语音数据

VS语音信号处理(2) C语言分段读取WAV语音文件语音数据

前言一. 工程实现二. 结果三. 小结

前言

语音识别相关算法一般在MATLAB上进行仿真验证与实验,在工程上一般还是在VS中进行实现落地,本系列将介绍语音信号处理在C语言中的一系列应用,后期将以此为基础,再落地移植到嵌入式平台。

语音文件的格式多种多样都存在不同的标准,在WAV格式的语音文件中主要包含两个部分:文件头与语音数据,本文将介绍读取WAV语音文件的文件头数据。WAV格式语音文件数据标准如下图所示。

即前44位位文件头数据,44位之后为语音数据。下面进行分段读取语音数据,注意,本实例分段读取语音数据时需单步调试查看buffer中数据,如需对语音数据进行处理即在分段读取时进行处理。

一. 工程实现

// 分段读取wav格式语音文件语音数据// date:-4-27 22:44:36// author : C.S#include <stdio.h> #include<iostream>#include<fstream>#include<stdlib.h>using namespace std;const char *input_file_name = "456.wav";const int buf_size = 640; //一次读10MBstatic char buffer[buf_size];void read() {FILE* pFILE = fopen(input_file_name, "rb");fseek(pFILE, 44, SEEK_SET);string str = "";while (!feof(pFILE)) {int size = fread(buffer, 1, buf_size, pFILE);char* buf = buffer;const char* buf_end = buf + size;while (buf < buf_end) {if (*buf == '\n') {printf("%s\n", str.c_str());str = "";++buf;continue;}str += *buf, ++buf;}}fclose(pFILE);return;}int main() {read();return 0;}

二. 结果

因为编码格式的问题,显示的数据时乱码的,也因为读取数据时是以char型进行保存的,所以呈现出上图式样。

三. 小结

最近项目上需要对WAV语音进行变速不变调处理,网上找了许多资料去读取语音数据都是采集不到,读出来的数据总是空的,这个例程通过分段读取很好的将语音数据还原了出来,一次性读取好像都不太理想(数据读不出来),后期找到不用分段读取语音数据的方法时,再进行详细介绍。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。