前面已介绍了如何在嵌入式控制板上读取输入接口的状态,现在用户可以用 Python 的Pygame 模块中的SOUND函数来制作一块发音板。所谓发音板,是指在用户按动按钮时可以播放一段指定的声音的设备。为了制作发音板,用户需要以下材料:
(1)3个按钮开关;
(2)母头对公头的连接线;
(3)长度适当的连接线;
(4)面包板;
(5)3个10 kΩ 的电阻;
(6)音箱,或者具备 HDMI 接口并内置音箱的显示器。
用户还需要几个未压缩的“.wav”格式的声音文件。嵌入式控制板的系统中自带了几个声音文件,可以直接用来测试。只要发音板可以正常工作,则把这个声音文件替换成用户想要的声音是一件很容易的事情,当然,也许需要先把它们从其他格式转换为 “.wav”格式。下面先来搭建电路:
(1)用母头对公头连接线把嵌入式控制板的接地接口与面包板的电源总线负极相连。
(2)用母头对公头连接线把嵌入式控制板的3.3 V电源接口与面包板的电源总线正极相连。
(3)在面包板上安装3个按钮开关,横跨在面包板中央绝缘条的两边。
(4)用连接线把电源负极与按钮上部的引脚相接。
(5)安装下拉电阻,用10 kΩ 的电阻把按钮下部的引脚与接地相连。
(6)用母头对公头连接线把每个按钮下部的引脚(与10 kΩ 电阻相连的那个)与嵌入式控制板的 GP10 接口相连。在这个项目中,使用GPIO 23、24和25号接口。
图2.5.2 发音板项目完成后的电路图
图 2.5.2展示了完成后的电路图。
把电路搭好后,即可开始编写代码。
(1)在主目录下创建一个新的目录,名为“soundboard”。
(2)打开这个目录并在里面创建一个名为“soundboard.py”的文件。
(3)打开“soundboard.py”文件并输入以下代码:
import pygame.mixer
from time import sleep
import sys import exit
GPIO.setmode(GPIO.BCM)
GPIO.setup(23,GPIO.IN)
GPIO.setup(24,GPIO.IN)
GPIO.setup(25,GPIO.IN)
pygame.mixer.init(48000,-16,1,1024)①
sound A= pygame . mixer . Sound( " /usr/share/sounds/alsa/Front_Center.wav”)
②
sound B= pygame . mixer .Sound( "/usr/share/sounds/alsa/Front_Left.wav”)
sound C= pygame. mixer.Sound(“/usr/share/sounds/alsa/Front_Right.wav”)
sound Channel A= pygame . mixer . Channel ( 1 )③
sound Channel B= pygame . mixer . Channel (2)
sound Channel C=pygame. mixer . Channel ( 3)
print “Soundboard Ready.”④
while True:
try:
if(GPIO.input(23) == True):⑤
sound Channel A. play(sound A)⑥
if(GPIO.input(24) == True):
sound Channel B . play ( sound B)
if(GPIO.input(25) == True):
sound Channel C.play (sound C )
sleep(.01)⑦
except Keyboard Interrupt:⑧
exit()
① 初始化Pygame的混音器。
② 加载声音文件。
③ 设置3个通道,每段声音对应一个通道,这样就可以做到同时播放不同的声音。
④ 显示提示用户发音板已经启动完毕(这里使用了Python 2语法)。
⑤ 如果对应接口是高电平,执行下面的代码。
⑥ 播放声音。
⑦ 检测按钮的间隔不要太短,以保证不会占用太大的处理器资源。
⑧ 这个异常捕获代码可以保证在按下【Control-C】键时程序可以正常退出,而不会显示一堆用于调试的栈信息。
(4)到命令行下把当前工作目录切换到soundboard.py 所在的目录,然后用 Python 2 执行这个脚本:
pi@raspberrypi ~ /soundboard $ sudo python soundboard. py
(5)看到屏幕提示“Soundboard Ready”后,按动面包板上的按钮就可以播放相应的声音。
根据嵌入式控制板设置的不同,声音可能会从 HDMI 接口传到显示器上输出,也可能通过板载的3.5 mm模拟音频接口输出。如果改变声音输出的接口,可以先按【Control-C】键退出程序,然后在命令行上输入下面的命令,把声音设置为从模拟音频接口输出:
pi@raspberrypi ~/soundboard $ sudo amixer cset numid=3 1
如果要把声音设置为通过 HDMI 接口输出,可使用以下命令:
pi@raspberrypi ~/soundboard $ sudo amixer cset numid=3 2
当然,默认的那些声音并不是很有意思,用户可以把它们替换成任意自己喜欢的声音,如掌声、笑声、警报声或铃声。把这些声音对应的文件存入soundboard目录并修改代码让它使用这些文件即可。如果想让发音板发出更多种类的声音,也可以通过安装更多的按钮并修改相对应的代码来实现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。