树莓派音乐闹钟,定时播放网易云音乐每日推荐歌单歌曲及插播语音天气预报
早些时候写了一篇文章《树莓派打造淡入闹钟,让电台轻轻的叫你起床》,可是现在听FM音质差不说未必也太怀旧了;最近闲下来又写了个Shell脚本配合NeteaseCloudMusicAPI实现播放网易云音乐每日推荐歌曲,并支持插播一段天气预报或者自定义语音提示;由于是纯Shell实现理论上支持运行Shell的Linux系统都能使用。
环境准备
TTS API
使用百度语音将文本转换为音频文件
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 ?
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023