数说声音:计算机声音处理和数值计算

2021-08-28 10:18于方军梁永
中国信息技术教育 2021年15期
关键词:文件夹开源拼音

于方军 梁永

声音是人类交流信息的一种重要方式,计算机对声音信息的处理和图像信息处理同样是信息技术教学中涉及的重要内容。常用的声音编辑软件可以调整音量,改变音调,进行声音混音等操作。本文用Python代码,通过读取计算机里的一段WAV格式音频文件,改变采样频率,观察声音播放速度及音调变化等,帮助学生理解声音编辑的背后是一系列复杂的数学运算。在此基础上,用开源的离线语音识别CMUSphinx系统,实现一个基于本地语音模型的声音识别,结合开源硬件实现简单的硬件控制实验,让学生通过实验来体验语音识别背后的数据特征提取。

首先,选择图形化编程里面的小猫叫声音文件Meow.wav进行编辑,图1是声音文件的波形及图形化编程所提供的简单编辑工具界面,下面的几个按钮可以实现快速播放、慢速播放,响亮、轻柔等播放效果,笔者带领学生从数据处理的角度研究一下这些效果是如何实现的。

● 改变采样点数值:观察声音变化

WAV格式的文件是由44个字节的文件頭(包括声道数、量化位数、采样频率、采样点数等信息)和后面的音频采样数据组成。因此,通过数学计算把采样数值改变,就能改变声音的音量值,实现“响亮”“轻柔”两个按钮的效果,进而让学生理解这些按钮背后的代码,如图2所示。

图2中的代码,读取了Moew.wav的值,通过输出数据可以发现,它是一个单声道,采样频率为11025hz,后面的数组是每个采样点的纵坐标数值[33,21,-34,...,-30,40,-229],改变后边采样点的数组值,如图2代码中的yuan[1]*2,把每个采样点的纵坐标值变为原来的2倍,即变为[66,42,-68,...,-60, 80,-458]。重写一个文件,如gai.wav文件,用播放器播放这个改变后的文件,就会发现音量比原来大了。

● 改变采样频率:观察声音变化

图1中的“快播”“慢播”按钮的功能,可以通过改变WAV文件的采样频率来实现,采样频率是每秒钟采样的次数,Meow.wav采样频率是11025hz,说明它一秒钟可以采集11025次数据,这个文件的采样点数是6512,用采样数据点数除以采样频率,得到声音播放时长大约是0.59秒(6512/11025=0.5906)。在播放时,如果把采样频率设为原来的二倍——22050,理论上播放时间就会变为原来的一半,也就是以原来2倍速度播放。

图3代码中首先定义一个变量beisu设置其初始值为2,读取Meow.wav文件的采样频率fr是11025,倍速播放时频率bfr设置为fr*beisu,用pyaudio播放时,就可以获得倍速效果。

● 从计算机的视角看语音识别

从物理学的角度来说,语音是一个连续的音频流,一个单词的发声实际上取决于很多因素,如声音要素的上下文关系、说话者语音风格等;从发声机理上看就是人的发声器官在一个音转向另一个音时其特性是渐变的,所以我们需要根据上下文来辨别音素。

通过计算机进行的语音识别,就是把语音信号经过前期处理(包括降噪、语音增强、人声检测等)后,进行提取特征,送入解码模块,进行解析得到识别结果。传统的语音识别的一般框架包含几个部分——声学模型、语言模型、拼音字典等,如图4所示。

● 用Sphinx做一个离线语音识别

CMU Sphinx(简称Sphinx)是美国卡内基梅隆大学开发的一系列语音识别系统的总称。笔者在这里使用的是recognize_sphinx语音识别器,结合安装pocketsphinx库可以进行离线语音识别工作,SpeechRecognition可以识别WAV格式的文件,结合中文声学模型、语言模型和字典文件可以进行中文识别。

下载cmusphinx-zh-cn-5.2.tar.gz并解压,在pocketsphinx安装位置找到pocketsphinx-data文件夹,并新建中文识别文件夹zh-CN,在这个文件夹中添加进入刚刚解压的文件,并把解压出来的zh_cn.cd_cont_5000文件夹重命名为acoustic-model、zh_cn.lm.bin命名为language-model.lm.bin、zh_cn.dic命名为pronounciation-dictiongary.dict(如图5)。

配置完成后,就可以尝试进行中文识别,如说出“打开一号灯”,智能系统需要理解“打开”“一号灯”这两个词的意思,它实际上是一个波形文件,对汉语来说就是一个字的发音,智能系统接收到一个“打”字的语音波形,通过复杂的数学模型和计算后,用数学方式提取其特征,并用数学模型去描述这些特征,这样“打”字的语音波形中的一帧就对应了一组特征值,那么就确定“打”字的声学模型建立了。如果说出的句子有10个字,那就要搜索所有可能的模型去匹配语音,这就需要一个比较优秀的搜索算法,得到局部的最优解。但是,有许多字发音是一样的,如“打”“答”“搭”……。从声学模型来看系统是无法区分的,这就需要语言模型了,即从语义上判断哪个结果出现的概率最大,即为搜索结果,这样就可以约束搜索,增加识别的准确率了。

试验后,笔者发现识别效果一般,主要是语言模型、拼音字典比较大,不具体。因而,笔者选择了对开源硬件的控制,限制到小范围的具体词,从而提高准确性。CMU Sphinx提供了一个在线的语言模型(lm)生成工具(在http://www.speech.cs.cmu.edu/tools/lmtool-new.html),帮助使用者生成自己的小词汇量的语言模型、拼音词典,如图6所示。用生成的.lm和.dct文件替换zh-CN文件夹中的两个文件即可。

经过改进后,笔者用测试文件测试后发现,只要是语言模型、拼音字典里的词都能准确识别出来,如图7所示。

● 用开源硬件做个智能语音控制

结合开源硬件,可以实现简单的语音控制,我们选用arduino板,用pinpong库进行硬件控制,实现一个语音控制案例,正确安装好pinpong库,定义好输出脚,识别的字符中包含“一号”“开”两个词,就开一号灯,如此类推(如图8)。

我们还可以通过添加一个pyttsx3库,把文字转换为声音播放,做一个简单的应答系统,实现一个语音助手功能,如图9所示。

通过实践,笔者发现声音识别是个复杂的过程,既包含对声音进行降噪、加强、分频等预处理,来增强声音的识别效果,也包括复杂的数学算法,以及模型训练、搜索算法。理解了这些过程,就会更好地理解基于计算机技术的人工智能是如何感知声音信息并做出反应的。

猜你喜欢
文件夹开源拼音
校园武术“学、练、赛”一体化实践探索
Fast Folders,让你的文件夹四通八达
五毛钱能买多少头牛
2019(第十四届)开源中国开源世界
2019开源杰出贡献奖
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
不容忽视的空文件夹
快乐拼音
快乐拼音