树莓派智能家居:shell脚本之音乐顺序和随机播放

作者: lushitao 分类: 智能家居 发布时间: 2017-08-18 16:03

之前我们知道了如何使用shell脚本来新增和删除音乐列表,下面我们想要让我们这个脚本顺序或者随机播放音乐列表的wav文件,该怎么办呢?

首先是顺序播放,我们只需要把音乐列表按顺序读出然后调用aplay即可,具体脚本如下:

#!/bin/bash

cat rasp.txt | while read line

do

aplay -D hw:0,0 $line

done

那么如果我们想随机播放呢?Linux系统是带有Random随机数的,随机数范围是0-32767。如果想得到100以内的随机数,那使用$RANDOM%100即可。所以现在我们需要知道我们的列表里有多少行音乐文件,然后用$RANDOM%行数+1,得到随机的行数,然后去读取这一行的音乐文件即可实现随机播放,那么我们的脚本如下:

#!/bin/bash

int=1

while(( $int<=100 ))

do

lines=`cat rasp.txt|wc -l`

let rand=$RANDOM%$lines+1

files=`sed -n “$rand,1p” rasp.txt`

aplay -D hw:0,0 $files

let “int++”

done

在这个脚本里需要注意的是lines=`cat rasp.txt|wc -l`,我们可以认为反引号是一个命令执行完毕后赋值给lines的作用。到这里,顺序播放和随机播放就完毕了。

这样还远远不够,我们需要能够启动一个播放器的后台进程,这个后台进程能够实时接收我们传入的控制命令,比如上一曲、下一曲、暂停、停止播放、修改播放方式如单曲循环,但是目前来讲,这么多功能暂时无法通过纯shell脚本的形式实现,这个需要进行Linux-C的开发。但是既然提到了进程,那么我们就了解一下关于shell的进程管理。

之前我们说过,如果想一个任务或者程序还后台执行可以使用&,实际上linux还提供了其他任务调度的命令。

bg:将一个在后台暂停的命令,变成继续执行

fg:将后台中的命令调至前台继续运行

jobs:查看当前有多少在后台运行的命令

ctrl + z:可以将一个正在前台执行的命令放到后台,并且暂停

nohup:不挂断地运行命令

下面我们就这些命令做一次连贯的顺序。我们可以在开启一个shell命令后,按键ctrl+z,这个时候这个进程会暂停放到后台,然后输入命令jobs看到我们这个进程已经stop了,然后呢我们输入bg,发现之前的进程从暂停重新开始运行了,然后输入fg,这个时候命令窗口就被我们的这个进程占领了,也就是说他已经移到了前台。那么,不管我们有没有在命令结尾使用&,我们登出shell后进程都不会再执行,因为我们的后台进程是跟我们的xshell的Session相关的。那么我们就需要使用nohup命令了,举个例子我可以这样用:

nohup /home/play.sh &

这样便可以实现在登出shell后依然可以后台处理进程了。

因为shell没有多线程的概念,下一曲,上一曲暂时无法通过脚本实现,这个可以通过Java或者C实现。另外,这几天一直在各种尝试如何安装ffmpg或mpg123的包,在Ubuntu下这个包很容易安装,但是centos下,特别是arm版,好像并没有专门的工具包,不知道哪位大神有此类的安装包可否分享一下,在这里谢过各位大神。

树莓派智能家居:shell脚本之音乐顺序和随机播放

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注