文章目录
- 一、所需硬件
- 二、处理音频文件
- 三、按键连接
- 四、程序编写
一、所需硬件
1、 树莓派4b
2、5条杜邦线
3、 按键
4、扬声器或耳机
二、处理音频文件
我们的音乐盒需要音频文件,Raspbian内已经包含了大量音频,但是这些音频不适合在Python中使用,我们需要将音频转化为适合Python的文件格式。
1、在家目录下创建gpio-music-box/samples文件夹:
打开终端:
aspberrypi:~ $ mkdir -p gpio-music-box/samples
观察如下:
2、从树莓派内置的音频文件复制到gpio-music-box/samples文件夹中:
cp /usr/share/sonic-pi/samples/perc_impact2.flac ~/gpio-music-box/samples/.
cp /usr/share/sonic-pi/samples/sn_dolf.flac ~/gpio-music-box/samples/.
cp /usr/share/sonic-pi/samples/sn_generic.flac ~/gpio-music-box/samples/.
cp /usr/share/sonic-pi/samples/tabla_ghe7.flac ~/gpio-music-box/samples/.
文件夹里有很多音频,读者可以根据自己的喜好选择音频。
观察复制后samples文件夹:
3、转换音频格式:
要使用Python播放音频文件,需要将文件从.flac文件转换为.wav 文件,我们使用ffmpeg 软件在树莓派上进行媒体文件的格式转换。
进入samples文件夹目录下:
pi@raspberrypi:~ $ cd gpio-music-box/samples/
音频文件格式转换:
ffmpeg -i perc_impact2.flac perc_impact2.wav
ffmpeg -i sn_dolf.flac sn_dolf.wav
ffmpeg -i sn_generic.flac sn_generic.wav
ffmpeg -i tabla_ghe7.flac tabla_ghe7.wav
删除原文件:
rm perc_impact2.flac
rm sn_dolf.flac
rm sn_generic.flac
rm tabla_ghe7.flac
再次观察samples文件夹音频文件,都由.flac文件转换成了.wav 文件。
三、按键连接
我使用的按键有8个,本实验只使用了4个按键,每个按键都连接到Raspberry Pi上的单独GPIO引脚。
树莓派引脚示意图:
引脚接线方法如图:
本例连接方法:
- 公共地线——任意图示黑色引脚
- 按键7号——23号GPIO
- 按键6号——24号GPIO
- 按键5号——25号GPIO
- 按键4号——7号GPIO
如图所示:
四、程序编写
使用树莓派自带mu编程
编写程序:
import pygame
from gpiozero import Button
pygame.init()
'''
sound1 = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/ambi_glass_rub.wav')
sound2 = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/ambi_choir.wav')
sound3 = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/ambi_dark_woosh.wav')
sound4 = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/ambi_drone.wav')
btn_sound1 = Button(23)
btn_sound2 = Button(24)
btn_sound3 = Button(25)
btn_sound4 = Button(7)
btn_sound1.when_pressed = sound1.play
btn_sound2.when_pressed = sound2.play
btn_sound3.when_pressed = sound3.play
btn_sound4.when_pressed = sound4.play
'''
button_sounds = {Button(23):pygame.mixer.Sound('/home/pi/gpio-music-box/samples/perc_impact2.wav'),
Button(24):pygame.mixer.Sound('/home/pi/gpio-music-box/samples/sn_dolf.wav'),
Button(25):pygame.mixer.Sound('/home/pi/gpio-music-box/samples/sn_generic.wav'),
Button(7):pygame.mixer.Sound('/home/pi/gpio-music-box/samples/tabla_ghe7.wav')}
for button, sound in button_sounds.items():
button.when_pressed = sound.play
运行程序,只需要接上耳机或者扬声器,当我们按动按键时,音乐就会响起了。
接下来,就需要你实际动手试一试了,快来行动吧💪💪💪