树莓派智能家居:音乐闹钟
今天要实现的功能是让树莓派播放音乐,并能够设定闹钟。话不多说,直接上具体的配置过程。
我们在前一篇中已经确定使用号称万年不崩溃的CentOS 7系统(arm版),所以具体的配置过程就按照CentOS的系统来进行。
在ssh的命令行输入下面的命令:
yum install alsa* #安装关于音乐播放器的各种包
modprobe snd-bcm2835 #向内核加入声卡模块,使其识别声卡
aplay -l #列出当前的声卡,如下图
我们看到,树莓派只有card 0这一个声卡,当然如果有其他声卡,比如USB声卡,他会列出来card 1、card 2等等,在这里我想扩展一下关于ALSA的知识,ALSA用cards,device和subdevices的分层结构表示audio硬件设备和他们的组件,这个分层结构是ALSA看待硬件设备结构和能力的视角。一个card可以通过一个ID(字符串)或者从0开始的数字表示。card 0里面又有device 0和device 1两个,device 0是耳机孔音频输出,device 1是HDMI接口的音频输入,树莓派连接支持HDMI的电视等设备可以同时传输视频和声音信号。Subdevices是ALSA能够区分的更细粒度的对象。最常见的场景是一个device的每个channel都对应一个subdevice或者总共只有一个subdevice。一个device的subdevice理论上可以单独使用,但是在一个subdevice上播放multi-channel信号时,也会使用其余的subdevices。也就是说,你用ALSA声卡可以同时让它同时播放好几种声音。具体的ALSA还有很多介绍,可以自行百度一下“深入了解ALSA”。
下面,我要让aplay播放一首歌,目前由于MP3的版权问题,暂不支持Mp3,但是可以支持常用的如wav格式的音乐。首先下载一个wav格式的音乐到/home文件夹下,我下载的是bjdldrz.wav这个音乐,之后的叙述统一用这个文件,大家可以随意更改,然后输入下面的命令:
aplay –D hw:0,0 /home/bjdldrz.wav #在这里,hw:0,0表示声卡为0号,device为0号。
但是这个一次只能播放一个音频,如果想播放一个之后再用命令行播放一个,输入下面的命令:
aplay -Dplug:dmix /home/bjdldrz.wav
这个播放是持续占用SSH的命令行的,播放时候不能执行其他命令了,除非新开一个窗口,如果不想持续占用命令行窗口,即后台播放,可以在命令后面添加&。
aplay –D hw:0,0 /home/bjdldrz.wav &
声音是播放了,但是音量特别低,怎么调高音量呢?有一个简单的方法,输入命令:
alsamixer –c 0 #这个时候会显示一个图形界面,如下图:
现在音量是79,按键盘的上和下就能调节音量。
当然,这里还有一个方法可以调节音量,具体执行命令如下:
amixer -c 0 controls #这个时候会列出一些声卡参数,如下图:
再执行命令:
amixer –c 0 cset numid=1,iface=MIXER,name=’PCM Playback Volume’ 300 #300这个可以根据自己情况调节,一般是不超过400。
到这里声音大小可以调节了,而且音乐也可以播放了,那就进一步做一个闹钟吧,设置每天早上7点半自动播放音乐,美滋滋。
设置闹钟首先需要了解一下sh脚本(关于脚本的开发,随后慢慢讲解),我们在home文件夹下直接vim新建一个play.sh,写入下面的内容:
#!/bin/bash
aplay –D hw:0,0 /home/bjdldrz.wav &
然后输入:wq保存退出,并赋予它执行权限:
chmod 777 play.sh
这样play.sh就可以运行了,然后我们把它加入到闹钟里面(上一节可是讲过一定要把时区设置成中国时区,不然你设置的闹钟的时间是UTC时间,可能会大半夜叫醒你哦)。执行下面的命令:
crontab –e
这个时候会显示出一个编辑页,在编辑页写入下面内容:
30 7 * * * nohup /home/play.sh > /dev/null 2>&1 &
编辑完毕后,保存退出,然后就开始美滋滋睡大觉等着音乐闹钟叫醒你吧!
这个是音乐闹钟的具体配置过程,配置过程很复杂,接下来几天,我将会根据aplay的功能,做一个音乐播放器,可以显示音乐列表,可以顺序播放单曲循环随机播放,用一种操作比较简单的界面形式来展示,不至于每次都要输入各种命令,而闹钟呢,也做一些优化,配置过程越简单越好。可能得需要几天时间才能出成果,所以在没有完工之前,每天我会分享一些代码开发中的一些小技巧小问题(^_^哈哈,初级码农,写的不好莫见笑)。