树莓派音乐闹钟,定时播放网易云音乐每日推荐歌单歌曲及插播语音天气预报
树莓派音乐闹钟,定时播放网易云音乐每日推荐歌单歌曲及插播语音天气预报
Last edited 2022-6-25
type
Post
status
Published
date
May 31, 2018
slug
raspberrypi-cloudmusic
summary
早些时候写了一篇文章《树莓派打造淡入闹钟,让电台轻轻的叫你起床》,可是现在听FM音质差不说未必也太怀旧了;最近闲下来又写了个Shell脚本配合NeteaseCloudMusicAPI实现播放网易云音乐每日推荐歌曲,并支持插播一段天气预报或者自定义语音提示;由于是纯Shell实现理论上支持运行Shell的Linux系统都能使用
tags
树莓派
category
极客创意
icon
password
Property
Jun 25, 2022 10:59 AM
早些时候写了一篇文章《树莓派打造淡入闹钟,让电台轻轻的叫你起床》,可是现在听FM音质差不说未必也太怀旧了;最近闲下来又写了个Shell脚本配合NeteaseCloudMusicAPI实现播放网易云音乐每日推荐歌曲,并支持插播一段天气预报或者自定义语音提示;由于是纯Shell实现理论上支持运行Shell的Linux系统都能使用。

环境准备

TTS API

使用百度语音将文本转换为音频文件
官方首页:百度TTS 注册教程:官方文档

Weather API

使用和风天气获取城市天气预报信息
官方首页:和风天气 注册教程:官方文档

Environment

Mplayer 播放音乐、播放天气预报以及语音类;JQ 分析API、分析Cookies并保存。
sudo apt-get install mplayer jq npm -y
获取网易云音乐的每日歌单需要依赖 NeteaseCloudMusicAPI 安装文档:网易云音乐API
#安装 git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git npm install #运行 node app.js

安装脚本

安装好 NeteaseCloudMusicAPI 及注册了百度语音、和风天气后,直接拉取代码库或者在 Github 获取脚本放到任意目录并根据注释修改参数。
#拉取代码 sudo cd home && git clone <https://github.com/Hscpro/NeteaseCloudMusic.git>

脚本参数

只列出关键参数,完整脚本托管在 Github

主程序脚本

脚本名称:NeteaseCloudMusic 脚本参数:-weather(插播天气预报,可选)
播放音乐并插播天气预报:./NeteaseCloudMusic -weather
修改 playermusic() 函数中 *if [ "$weather" = "-weather" ]&&[ "$1" = "1" ];then *的 1 可控制第几首播放天气(0为第一首,1为第二首以此类推)
#Systemd服务接口的notify通知,避免长时间占用Systemd #使用Systemd的时候以notify模式启动,不使用的话可删除 if [ $INVOCATION_ID ];then echo 'Systemd ID:' $INVOCATION_ID systemd-notify --pid=$$ systemd-notify --ready fi #获取当前脚本所在文件夹路径 work_path=$(dirname $(readlink -f $0)) #网易云音乐账户 Phone="API限制账号必须为电话形式" PassWord="账号密码" #限制最大获取日推歌曲数(网易日推最大20) number=20 #网易云音乐API服务地址默认为3000(NeteaseCloudMusicAPI) APIService=localhost:3000 #Mplayer控制路径(控制歌曲淡出淡入的管道) APIMplayer=/tmp/MplayerMusic-Control #Mplayer均衡器(31Hz 62Hz 125Hz 250Hz 500Hz 1kHz 2Hz 4Hz 8kHz 16kHz) effect=0:0:0:0:0:0:0:0:0:0 #定义储存歌曲ID数组与变量 declare -a dataid musicid="" ··· 略 ··· function init(){ weather=$1 # 初始化系统播放音量 /usr/bin/amixer set PCM 95% > /dev/null if [ -e "$APIMplayer" ]; then rm $APIMplayer fi # Cookies保存位置(默认为当前脚本所在文件夹内的cache文件夹内) chedir=$work_path/cache } ··· 略 ··· function playermusic(){ #防止网络故障播放失败时影响下一曲 killall MplayerVolume > /dev/null 2>&1 killall mplayer > /dev/null 2>&1 killall Weather > /dev/null 2>&1 #歌曲淡入控制 if [ "$1" = "0" ];then #第一首歌长淡入(以0.5秒的速度从0递增到55) $work_path/MplayerVolume U $APIMplayer 0.5 0 50 & else #后续歌曲短淡入(以0.2秒的速度从0递增到35) $work_path/MplayerVolume U $APIMplayer 0.2 0 35 & fi #插播天气预报(延时30秒以0.3秒的速度降低音量到15以35的音量播放天气预报后恢复到35)(第二首音乐) if [ "$weather" = "-weather" ]&&[ "$1" = "1" ];then sleep 1 && $work_path/Weather $APIMplayer 60 0.3 15 35 & fi #Mplayer播放音乐 mplayer -slave -input file=$APIMplayer -cache-min 10 -cache 51200 -really-quiet -softvol -volume 0 -af equalizer=$effect $2 > /dev/null 2>&1 } ··· 略 ···

和风天气脚本

脚本名称:Heweather 脚本参数:T天气简报/S生活指数/K空气质量
例如获取空气质量:./Heweather K
#和风天气KEY key_access=c974d98ef5XXXXXXXXXXXXX5b218be ··· 略 ···

百度语音转换脚本

脚本名称:BaiduTTS 脚本参数参数:(需要转换的文本) (播放音量,若为空则输出音频播放地址)
例如播放一段文本:./BaiduTTS "Hello world" 50
#设备码 id_mac=$(hostname) #百度KEY key_api=zDxXdXXXXXXXI42xxxRL8 key_secret=fab01dXXXXXXXXXXXXXXXXXXXXXX56543 #语速,取值0-9,默认为5中语速 tts_spd=5 #音调,取值0-9,默认为5中语调 tts_pit=5 #音量,取值0-15,默认为5中音量 tts_vol=10 #发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声 tts_per=3 #Mplayer控制路径(语音) APIMplayer=/tmp/MplayerTTS-Control ··· 略 ···

运行脚本

修改好参数后需要给脚本添加执行权限,并测试下
#获取权限 chmod 755 /home/NeteaseCloudMusic/* #试运行 /home/NeteaseCloudMusic/NeteaseCloudMusic

定时启动

将脚本添加到 Systemd **或者 **Crontab 即可实现定时启动既闹钟的功能

Systemd

/lib/systemd/system 创建两个文件
nano /lib/systemd/system/NeteaseCloudMusicApi.service
[Unit] Description=NeteaseCloudMusic Play Requires=network.target NeteaseCloudMusicApi.service After=network.target NeteaseCloudMusicApi.service [Service] Type=notify Restart=no #脚本所在路径 RootDirectory=/ WorkingDirectory=/home/NeteaseCloudMusic/ #执行的命令(播放音乐并插播天气预报) ExecStart=/home/NeteaseCloudMusic//NeteaseCloudMusic -weather
nano /lib/systemd/system/NeteaseCloudMusic.timer
[Unit] Description=NeteaseCloudMusic [Timer] Unit=NeteaseCloudMusic.service #每天8点启动 OnCalendar=*-*-* 08:00:00 AccuracySec=1m WakeSystem=no Persistent=no [Install] WantedBy=multi-user.target
安装 Unit
#安装定时器 systemctl enable NeteaseCloudMusic.timer systemctl start NeteaseCloudMusic.timer #查看定时器 systemctl list-timers

Crontab

运行命令 export EDITOR="nano" ; crontab -e -u root 在末尾添加一段代码
#每天8点播放音乐并插播天气预报 0 8 * * * /home/NeteaseCloudMusic//NeteaseCloudMusic -weather

END

How to live without music ?
 
  • 树莓派
  • 树莓派Aria2不限速下载利器安装与配置全攻略免费 Let's Encrypt 证书申请、部署全攻略与自动续期教程