语音知识回顾和总结----语音的介绍和读取语音文件

来源:互联网 发布:海尔网络电视机 编辑:程序博客网 时间:2024/05/22 14:05

   写在前面的话:

         或许是时候做些总结了,自己这段时间一直在看各种东西。比如:学习c语言,学习数据结构,学习机器学习和数据挖掘的一些算法。回想起来,也许这些侧面反映我这个人的本性,不喜欢自己一个人去深究一些问题。所以我学习要不跟着老师,跟着视频,跟着目标去学习,要是散漫的去学习,总学到些毛皮。所以借总结之名,给自己适当的压力,让自己去更深层次的去了解这些知识。欢迎大家赐教,小弟不甚感激。

ok,进入正题。

      语音,就是声音。有许多近义词,比如:音频,音乐等等。这个跟大家生活息息相关,每天都在接触,所以我觉得应该很有发展潜力,很有市场价值,这或许就是科大讯飞成功的一部分原因吧。语音的存储格式有wav,mp2,mp3,wma,pcm等等。那我就从格式说起吧,pcm是最原始的存储格式,在pcm上加些头文件就得到wav文件,所以有时候可以把pcm和wav等价起来。

     PCM是什么?PCM是一种编码方式,PCM是无损的。PCM(Pulse Code Modulation----脉码调制录音)。所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录。PCM信号是由1、0等符号构成的数字信号。与模拟信号比,它不易受传送系统的杂波及失真的影响。动态范围宽,可得到音质相当好的影响效果。通信原理里面有,大家可以看的哦。

    mp2,mp3?大家应该回想自己小时候的事情,当时红遍校园的mp3就是一个很典型的例子。当时没能理解,现在应该要理解的哦。其实pcm是一堆二进制的数字,肯定有一些没有用的信息,这样我们就去做压缩,使存储的代价变小,同时音质不受很大影响,毕竟我们人耳能感受的频率是很小的。只要让我们感觉不到也就没事了。到底最多能压缩多少,稍后介绍。

   wma也是一种压缩格式。压缩跟图像的压缩一样,都为了去除一些无关的部分,去用尽量少的存储空间去存储。

不知道这么说,大家明白没?也许表达能力有限,所以大家见谅。

     接下来就说下怎么样去读取音频?

首先说下matlab里读取音频wav文件,当然是wavread函数了。大家可以在matlab命令行里help下。大家可以参考http://neural.cs.nthu.edu.tw/jang/books/audioSignalProcessing/matlab4waveRead.asp?title=4-2 Reading Wave Files来读取音频。这里我也说下。首先说下wavread函数的用法。

y=wavread('1.wav');

[y fs]=wavread('1.wav');

[y fs nbits]=wavread('1.wav');

这三种方式,y是读取的音频数据,fs是采样率,nbits是采样位数。如果音频是单通道,则y是一个列向量。当然如果是双通道,肯定是2个列向量了。fs的值一般有8000,16000,22050,44100,48000等。nbits是8或者16。我们可以这个算出音频的时间,就是y的长度(length(y))除以fs。y的值在-1~1之间。相当与已经归一化了。(备注:归一化很重要哦!以后记得很多不同数据在一起都要归一化!!!)如果是双通道,取第一列就是左声道了的数据,去第二列就是右声道的数据。如果你在matlab输入:

[y fs nbits opts]=wavread('1.wav');
>> opts.fmt

ans =

         wFormatTag: 1
          nChannels: 1
     nSamplesPerSec: 22050
    nAvgBytesPerSec: 22050
        nBlockAlign: 1
     nBitsPerSample: 8

下面我来说说各个变量代表的意义。

1.      wFormatTag is the format tag of the wave file.

2.      nChannels is the number of channels.

3.      nSamplePerSec is the number of samples per second, which is equal to the samping rate 22050.

4.      nAveBytesPerSec is the number of bytes per second. ( 22050*1= 22050).

5.      nBlockAlign is equal to the rato between nAveBytesPerSec and nSamplePerSec.

6.      nBitsPerSample is the bit resolution.

此外,我们可以matlab播放音频的语速。(这有个方向是语音变声,网上有很多软件实现这种功能,如果你有兴趣你可以用c语言实现下,当然变声不仅仅只是改变语速哦!)具体见张智星教授的第四章!大家一定认真学习哦!

 

       感觉自己好啰嗦,也许自己也不是很熟悉。感觉太多了,所以下一次我来说下c语言去读取音频。希望对大家有所帮助。

附上参考资料:

       1. http://neural.cs.nthu.edu.tw/jang/books/audioSignalProcessing/

       2. 数字语音处理及matlab实现  张雪英。等等。

 

原创粉丝点击