WAV Sound V04

Written by on 2013/01/13 in 产品 - 2 Comments

介绍一种可以在Arduino上播放声音文件的方案:利用WAV Sound V04模块,搭配SD卡读取模块,可播放声音。其实现思路是将事先录制好的WAV文件存储到SD卡中,Arduino负责从SD卡中读出未经压缩的声音文件,再送到WAV模块中进行播放。

目前这一方案受限于所采用的DAC芯片精度的影响,最高只能做到16bit,22KHz,Mono格式的WAV文件,不过这对于大部分应用场合来讲已经足够了。

在实验此模块之前,需要先准备好WAV格式的声音文件。市面上有很多音频转换软件可以实现WAV格式的转换。在这里我们以Audacity为例,讲述如何将MP3音频文件转换为WAV音频文件。

运行Audacity之后,选择“File”菜单下的“Open”命令,打开需要进行转换的MP3文件:

通常MP3文件都是立体声(Stereo)格式的,我们需要将其分离成两个单独的音轨,这可以通过选择左侧声音文件标题下拉框中的“Split Stereo Track”命令来完成:

为了避免这两个音轨在混音之后音量过大,我们可以分在每个音轨上将增益(Gain)设置成-6dB,修改的方法是拖动相应音轨左侧标有正负号的滑动条:

将下来我们需要从每条音频的标题下拉菜单下选择“Mono”命令,将其转换成单声道格式,注意每一路都需要做这个转换:

现在我们可以选择“Project”菜单下的“Quick Mix”命令来完成单声道文件的混音:

通过上述的步骤,我们已经将立体声(Stereo)格式的声音数据转化成单声道(Mono)格式的声音数据,此外我们还需要设置相应的采样位数和采样频率。对于采样位数的设置,我们可以从每条音频的标题下拉菜单中选择“Set Sample Format”下的“16-bit”命令,将采样位数设置为16位:

而采样频率的设置则可以通过Auda对话框底部的“Project rate”进行设置,我们的WAV播放模块最高只支持22Khz:

所有参数都设置好之后,我们就可以导出所需要的声音文件了。选择“Edit”菜单下的“Preferences…”命令,在打开的对话框中从“Uncompressed Export”下拉框中选择“WAV (Microsoft 16 bit PCM)”后单击“Ok”按钮:

最后选择“File”菜单下的“Export As WAV…”命令,导出我们所需要的WAV文件就可以了,为了确保之后Arduino能够正常处理,该WAV文件需要用字母命名,并且文件名称不能超过8个字节。为了确保产生的文件是正确的,我们还可以在Windows中右键单击该文件后,从弹出的菜单中选择“属性”命令打开属性对话框,然后从“摘要”中检查生产的文件是否符合我们的要求:

生成的文件我们可以通过读卡器将其复制到SD卡中,为了保证读取的正确性,可以考虑先格式化后再将WAV文件复制到SD卡中。注意SD卡应该格式化成FAT格式的,而不要格式化成FAT32格式的。

通过Arduino皤放SD卡中存储的WAV文件我们需要用到wavehc库(http://code.google.com/p/wavehc/)。我们测试时使用的是wavehc20101009.zip这个文件,你可以通过wavehc的官方网站下载该文件。你可以通过wavehc的官方网站下载该文件,也可以通过下面的附件直接下载我们在测试时使用的库文件包。

wavehc20101009

在将下载后的wavhc库解压缩之后,将压缩包中的WaveHC上当复制到Arduino安装目录中的libraries目录下。wavhc库默认使用了Arduino上的2、3、4、5这4个引脚,但 我们的Arduino IDC扩展板上的IDC-6座则是与Arduino的6、7、8、9这4个引脚相连接的,因此我们需要对WaveHC目录下的WavePinDefs.h这个文件进行修改, 相应的对应关系为2->9、3->7、4->6、5->8。你可以手工修改这个文件中以MCP_DAC_开头的那些宏定义,也可以直接下载我们已经修改好的WavePinDefs.h文件。附件如下:

WavePinDefs

在将所有的准备工作都做好之后,我们就可以进行硬件部分的连接了。硬件连接步骤并不复杂,首先将Arduino与IDC扩展板连接,然后将已存储WAV格式的音频文件的SD插入SD卡模块,并将SD卡模块和IDC扩展板上的IDC-6口进行连接。再将WAV Sound V04模块的SPI端口与IDC扩展板上的SPI端口进行连接。连接完成后,就可以下载程序进行测试了。

测试时我们使用的是wavhc库压缩包examples目录下的daphc,其实现的功能是不断从SD卡中查找以.WAV为扩展名的WAV文件进行播放,相应的代码为:

WAV_Sound_V04

如果一切正常,此时你应该就能够在WAV声音播放模块上接的耳机或者音箱中听到你存储在SD卡中的WAV文件在播放时的效果了。上述Arduino代码在运行的时候会试图通过串口传输一些调试信息,必要的时候可以打开Arduino的串口来查看相应的原因(比如SD卡中没有正常找到)。

 

2 Comments on "WAV Sound V04"

  1. 创想动视 2013/03/06 at 8:44 PM ·

    这个东西有前途。

    人们惯性思维喜欢性能强劲功能强大的东西,比如双核到四核
    功能集成性更高的东西,比如DOS到WIN7

    Arduino提供了做一些简单小东西的可能

    下一个新产品可以做个MIC吗,我说的不是声音传感器,而是能传输声音的麦克风
    期待你的回复,已经加你微博。

  2. 陈刚 2013/03/25 at 9:06 PM ·

    这个东西非常好!

Leave a Comment

使用新浪微博登录