Arduino平台的Wave Shield是Adafruit早期的一个面罩套装,一直以来,它依然是那么受欢迎。我们有足够的理由相信,这是给Arduino添加高质量音效的最容易和最便捷的方法。
像一瓶好酒,开源项目随着时间而得到提高。我们被告之这个面罩有一个新的技巧:那就是一个实时的变声器。发音就像每个人都喜欢的男中音歌手Sith Lord一样,或者如Lollipop Guild的跟唱一般。Wave Shield一早成为商家欢迎的万圣节项目。最新添加上去的东西也是紧扣这个主题的。
核心部分的清单
这个项目里面有三个和新型的元件:
Arduino Uno(老版本的Arduino Duemilanove或者328 Diecimila也适合,但Arduino Mega或者Leonardo就不适兼容了。)
Adafruit Wace Shield
Adafruit麦克风放大器接头
你还需要基本的焊接工具,电线以及bits & bobs
其他部件
这是一个可扩展的项目,而用什么元器件啧去决议你打算用它来达到什么目的。通读整个过程,留意在一些细节部分的观点以及建议。
因为有声音输出,因此你需要一个头戴式耳机、便携MP3扬声器或者我们经典的D类功放。示范扫描大概用到一个12键键盘去触发预录制的声音。若果你只是想使用音效。你的应用只需要一些简单的按键,又或者什么都不用。
如果要添加一些预录制的声音,你需要一个包含有WAV文档的SD卡。
用一个10K的电位计来调节音高。又或者你可以进行简单的永久设置。
如果你想拨弄这些电线,一个额外的样机面罩和堆栈头部可以很容易实现。焊接带有堆栈头部的wave shield,同时将原型面罩放在上面。
为了使其可以像服装和小道具那样轻便使用,要添加电池,电池套等。
重申一下,细读整个流程是很有必要的,因为这样可以便于购买你项目中所需的元件。我们会展示一些实例。但这些东西并不是最新的。但这些都是Arduino的精华。
先强调一下重要的事情
我们强烈建议,应该说是要求你在开始这个项目之前完成这个原版的Wave Shield教程的阅读。这是在添加额外层次的复杂性之前验证关键部分能够正常工作的一个好方法。
现在就解析一些令人讨厌的背景理论知识。如果你只是想做点东西,那么你就可以跳过一下的文章。
音频样本
不管你是否曾经玩弄过父亲的LP唱盘,又或者涉猎过最新的PC上面的数字音频程序。你在这些现象上面或多或少都应该有一些经验。就拿录音来说,这只不过是一个以特有速度的回放。之后改变速度,或者压缩、拉伸时间。之后音频的音高就会随之改变。压缩时间会使音高上升,拉伸时间会降低音高。频率是波长的倒数。
利用录音是很容易得出这些效果的,但在直播音频的时候,我们就不能那么奢侈,实时就是实时,我们并不能压缩或者拉伸。它们沿着自身的状况发展。这种情况下,所谓的声音改变能够做点什么?
在这里设计一个叫做福利叶变换的复杂技术,通过变换可以转变一个函数(或者可以讲是改变音频流),将其转为一个频谱。最后的出来的频率值可以改变,同时一个相反的转变会应用来还原这个音频。这就是纯粹的数学问题。但除了Arduino的处理之外,我们还需要一些额外的处理和方法。一个相当强悍的CPU或者DSP是必须的。我们也需要一些便捷方法或者做一些尝试。
在数字音乐圈,颗粒合成是一个将大量的短音频样本糅合和分层的技术。这也是为了建造更多更复杂的声音或者乐器合成。现在图片是一个单独的声音样本,十毫秒左右。同时我们持续从直播麦克风更新这个声音样本。通过实践压缩或者延伸这个微小的环,重复或者丢弃短小的片段去跟上实时。我们以实时音高转换为基础。这个看起来是不能工作的,但实际上是有效的。语音波形在短期内会重复,同时我们可以丢弃或者重复一些波形。
这种方法总体上是适合于Arduino的有限处理能力和RAM,得出的结果是不符合好莱坞品质的。但这比架子上大部分的声音改变玩具好很多。现在你将要去制造它了,很酷是吧。
声音采样
人的声音频率范围大约是300HZ到3500HZ。奈奎斯特抽样定理有如下的阐述:要如实重建一个信号必须需要至少两倍的采样率。对于人声来说,那就是7KHZ的采样率。但多一点的话也无妨。
在一个循环里重复调用Arduino的标准模拟Read()函数是一种方法,这种方法对这个项目来说也太慢了。我们需要Arduino的ADC、特别储存器和模式有一个更深入的了解。一个叫做自由震荡的模式以快速、固定间隔,同时并不反复查询代码的方式快速收集模拟采集信号。每当一个新的采样信号准备好了,一个中断处理程序会被自动调用。这个会有规律的进行。全速的运行,一个16MHZ的Arduino每秒可以捕获9615个10位的样本。这对于声音采样来说足够了。
声音样本存储在一个环形缓冲器里面,这是计算机科学里面的“当你到达缓冲器末端的时候,回调到最初,并重写”的一种美妙的描述。但从概念上说,这只是帮助理解文字上所说的循环。
录音的频率会很少精准符合缓冲长度。同时声音样本是被存储和以不同速率读取。这会产生一个明显的间断。每次输入和输出点交汇时,会产生一个间歇性的噪音。现在用一个小型的额外缓冲器存储一些优先的音频样本,同时在边界编码交错单变的音频可以减少噪音。
因为我们的音频样本是相当短,大概只有10毫秒,RAM则需要适中的,大概几百字节。问题是,因为Wave shield的设计目的的缘故,我们经常会持续做采样的工作。也就是,回放WAV文件。这需要从一个SD卡读取文件,这会需要比较大的RAM,很幸运的是这个WAV播放编码的设计使我们获得访问库存储的权利,同时回收满足我们需要。
源代码的这个技术细节备受好评。因此如果你对执行的标准有所好奇,查看源代码。
限制
当把Arduino介绍给新用户的时候,我通常将其描述为“具有足够能力去处理好任何一件事”。嚼口香糖的时候走路是一个挑战。因此对这个项目来说,它是很完美的。记住以下的限制:
1.它可以处理声音效果或者WAV回放,但你不能同时做到。
2.当声音效果在运行的时候,你不能读取其他模拟输入。(例如,你不能用一个电位计持续转换音高)。如果用到模拟穿高企作为声音触发器,考虑工作的时候就如在数字输入时用一个精心调整过的分压器,或者另一个MCU去处理数字输入,透过串行或者I2C连接进行正向触发。
建造过程
步骤一:
参照原版本的Wave Shield教程
再强调一遍,在做声音转换器之前通读原版本的Wave Shield教程!
这个项目有很多独立的部分,其中的任何一次过失会导致整个项目的失败,因为在所有可能性之间查出问题所在是一个很复杂的工作。现在花一些时间去使最基本的Wave Shield实例工作,尤其是“Pi Speak”样本。这会让你明白到这个shield是正确装配的,SD卡是正确格式化等等。之后我们会添加额外的特征。
开始的时候要下载Arduino的WaveHC库,这并不只是为WAV回放,同时使为了编码过程中的声音转变。我们有一个Arduino库安装指南,下载PI的包含WAV文件的压缩文件,然后依照教程直至Wave Shield工作。
步骤二:
添加声音效果和一个声音触发器键盘
基本的Wave Shield工作的时候,我们可以添加声音转换和声音触发器键盘,你可以在你的工作台利用一块模拟板完成这个步骤。迟点我会使这些变成可携带的。之后,确认它是能工作的。
下载Arduino的Adavoice扩展,这个时候你应该完成了上一步骤提到的WaveHC库的安装。
Arduino的地线和3.3V线需要连接到几个不同的点,因此你可能需要一个工作台电源轨来完成这个。Arduino的3.3V线连接到驻极体麦克风功放的VCC接口,同时连接到一个10K的电位计输出脚,还要连接到Arduino的AREF端口。Arduino的接地线应该连接到麦克风功放的接地点,同时接到电位计的反向输出脚。
PS:别忘记连接到AREF,否则整个电路不会工作。
麦克风功放的输出连接到模拟的pin0,同时电位计的中心脚连接到模拟的pin1。
如果你打算利用数显录音的音频效果(一些样本储存在WAV的文件夹里),你需要一个FAT格式的SD卡,并把文件放置到根目录里,。一个12键的键盘连接到数字的PIN6、PIN7和PIN8(列)。同时连接到模拟的PIN2、3、4、5(行)。对这个草案还需要一些调整,这就适合于应用一些按键或者其他的触发器。
一个小型扬声器可以直接连到Wave Shield的功放输出,为了获取更大音量,我们建议使用类似ipod和MP3
一样的便携式功放喇叭,或者是一些经典的D类音频放大器输出。
如果你还没完成以上工序,上传Adavoice到Arduino。如果所有的东西已经接通并装载正确,你应该在设计图开始的时候启动鸣响。如果没有声音,用Arduino动态监测同时留意诊断信息。
一旦运转以后,你可以对着麦克风说话,同时你应该透过扬声器或者头戴式耳机听到转换过的声音(麦克风应该远离扬声器,避免干扰)。按下任何按键会停止声音效果,并播出响应的声音,然后重新开始。
注意到这个音高拨号并不是实时工作!这个很正常,同时这是我们全速运行的这个ADC方式的一个限制。为了得到新的音高读取,你需要去回放一个声音或者按下重置按键。
步骤三:
实现电池供电,使其能够携带
为了简化布线图,我们在以下部分的说明将会忽略掉键盘。但如果你愿意的话,你仍然可以将其包括在里面。连接如上所述。
因为模拟板电路对于便携式应用来说太脆弱,我们会直接添加一些元器件。
Wave Shield自身能够驱动一个小型扬声器,但这并不提供足够的吸引力。聚会和漫画展通常都是很嘈杂的,因此你们可能需要一个推动!我们利用我们带有一对4欧姆扬声器的D类功放。同时也有很多为ipod和其他MP3准备好的电源扬声器也适合Wave Shiled的接口。只不过用我们的D类功放有一种订做的感觉。
最好分别给Arduino和音频功放供电。尤其是在大声的时候,音频功放会产生很大的电流,会引起电压的瞬间下降导致Arduino重启。而给Arduino提供独立电源可以避免这样的情况发生。我们将一个9V的电源连接到DC接口,或者将6个AA电池组连上。无论如何,在Arduino和音频功放部分的地线连接是一致的,电路的3.3V部分的连接也是一致的。
下图我们将所有的零件用双层泡沫胶带固定在一块有机玻璃上面,然后用尼龙绳固定,以使其固定在人的胸口。我们用胶带是为了方便,你们也可以用螺丝之类的东西。
你可以将麦克风连接到面具或者偷窥,一个伺服电机扩展线提供一个方便的3分离点。因此你可以武装你的头部并安装。将伺服电缆剪成两段,将一段焊接到麦克风功放,另一端焊接到Arduino电路。
关于这个服装的一些TIPS
1.提前让你的系统跑一段时间,不要一做好就在聚会上使用。知道电池的续航时间。检查导线和接口。确保元器件是焊接好的。微调音频,降低反馈干扰。
2.将系统做到最好,绞线比实心线的可折性高,要用结实的。NASA标准的连接。执行拉力测试避免连接断开。模拟板易于原型测试。但你要焊接并进行调整。
3.不要大喊大叫,要轻生说话,让功放扩大你的声音。你需要人们听到你“变异”的声音,而不是原声。
4.将扬声器和麦克风分开,避免干扰。一些小的角度都会造成干扰的很大区别。
5.汗的腐蚀性很强,因为它基本是盐水,更惨的是它有导电性。因此将所有的部件密封。热缩管保护所有的接口。在服装里面的所有电子器件上用塑料外壳或者环氧树脂。如果在面距离阿敏用到一个麦克风。用气球将麦克风保护起来。
6.可以的话,带上备用电池、安全别针、一些尼龙扣条和一些管道胶带。
7.绝不让技术妨碍良好的性能。样品用到按键很小的薄膜键盘,这对于桌面印版乐器来说是很好的。但对动来动去哥斯拉服装来说是一个悲剧,因为要不停的寻找特别的小按键。多的未是好的,在一个手套里面有一两个按键就足够了。在参加聚会之前要熟习按键操作。
评论
查看更多