树莓派FM广播点歌系统

简介:

简介

前段时间有人发贴说用树莓派可以发射FM收音机信号, 于是便整来玩玩,发现效果还不错,于是想扩充一下功能。

网上实现的FM发射功能是有局限性的:

  • 只能播放wav格式文件,并且wav文件必须是16 bit 22.5kHz Mono格式的。
  • 只支持播放本地音频文件,或者使用-从终端读取音频

我设想的或已经实现的功能是这样的:

  • 支持mp3格式
  • 支持流媒体,或者说支持直接播放网络上的音乐
  • 可以添加音乐,方便管理
  • 可以批量添加歌曲
  • 可以播放局域网内电脑上的音乐
  • 自动根据歌名在线搜索歌曲并播放
  • 有一个web页面,允许任何人添加自己喜欢的歌曲
  • web页面显示当前正在播放的歌曲和将要播放的歌曲列表
  • 当播放列表里面没有歌曲的时候自动随机播放一首歌曲,保证连续播放
  • 可以跳过正在播放的歌曲播放下一曲

安装我做的系统之后你就可以用树莓派做服务器, 发送广播,播放流行歌曲或者英语听力(或者法律允许播放的东西) 告诉亲朋好友一个网址,然后他们就能在上面点歌。 四六级没过的朋友可以添加四六级听力,模拟真实考试环境。 或者放到敬老院里面,给老年人播放戏曲。 除此之外,只要程序运行着,你就能用收音机听到音乐, 不用天天费神去网上找歌了。 这样也为你的手机节省好多存储歌曲的空间,因为有了树莓派和我的点歌系统, 你用手机上的收音机就能听到想听的歌曲。 我的系统不会给树莓派增加任何垃圾,所有网络歌曲不缓存, 不用担心歌曲过多而将存储卡填满。

关键技术与原理

因为树莓派只支持wav格式音乐,所以要将mp3格式转换成wav格式。

但是一般软件转换效率比较低,树莓派CPU比较差,转换时间更长。

后来我找到一个比较好的解决方案,用mpg123这个软件进行解码, 解码之后输出到终端上,这时就已经转换成wav格式了。 然后树莓派的pifm程序设置成从终端读取音频, 这样再通过一个管道将两个程序连起来,就能实现一边解码一边播放

另外,mpg123的功能比较强,支持直接播放网络音乐, 也就是说,只要给mpg123传递一个歌曲url,就能实现边下载边播放

上面的文字用一条命令总结就是:

mpg123 -m -C -q -s 歌曲地址或url | sudo pifm - 频率 歌曲采样率
例如
mpg123 -m -C -q -s /home/pi/aaa.mp3 | sudo pifm - 98.5 44100
mpg123 -m -C -q -s http://abc.com/123.mp3 | sudo pifm - 98.5 44100

上面的命令看起来很简单,费了半天劲才鼓捣好,因为命令的参数很多, 组合起来让他们协调工作就需要不断尝试!

解决了这个技术难题,下面的任务就简单了,对于pythoner来说, 下面提到的东西都不叫事!^_^

简单列一下:

  • 歌曲是从搜狗mp3抓的,只要输入歌曲的名字,自动搜索,返回歌曲url
  • web管理界面用web.py实现,实时显示正在播放的歌曲和歌曲列表
  • 数据库用sqlite3,用来保存用户输入的歌曲信息,方便日后数据分析
  • 如果列表为空则从本地播放列表(文本文件)随机选一个播放

安装部署方法

为了简化安装部署,我专门写了一个安装脚本,就是setup.sh, 直接执行就能安装。(注意,本系统树莓派专用,请不要在电脑上执行此脚本)

wget https://github.com/ma6174/fmpi/archive/master.zip
unzip master.zip
cd fmpi-master
sudo bash setup.sh

这样就自动安装依赖的软件

使用方法

运行的话可以直接执行程序里面的start.sh:

sudo bash start.sh

然后在树莓派的GPIO4这个引脚上插上一根杜邦线当天线

ifconfig命令察看你的ip地址,然后在浏览器上打开:http://树莓派IP:8000/, 可以看到正在播放的歌曲,然后你可以添加你想要收听的歌曲。

打开收音机,调到FM 98.5频道,你就能听到正在播放的歌曲了!

如果感觉这首歌不好听,可以直接按树莓派的键盘的q键,自动播放下一曲

想终止程序的话按Ctrl + c

可以修改config.py修改默认的98.5这个播放频率。

其他

对本系统感兴趣的话可以去github上查看源码,扩充系统功能: https://github.com/ma6174/fmpi

任何问题和建议可以留言或email联系我:ma6174#163.com

gtalk:ma617495#gmail.com


博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2013/03/02/2940503.html,如需转载请自行联系原作者

相关文章
Win系统 - WIN10 更新后蓝牙音箱无法连接成 Stereo 模式(立体声)
Win系统 - WIN10 更新后蓝牙音箱无法连接成 Stereo 模式(立体声)
882 0
Win系统 - WIN10 更新后蓝牙音箱无法连接成 Stereo 模式(立体声)
|
Linux 网络安全
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
|
4月前
|
数据采集 传感器 算法
​SAIA-PCD3.M6340远程控制器人机界面
​SAIA-PCD3.M6340远程控制器人机界面
|
5月前
|
Python
树莓派的摄像头信息实时发送到PC端显示
树莓派的摄像头信息实时发送到PC端显示
81 1
|
9月前
|
缓存 网络协议 API
Qt广告机服务器(上位机)
客户端列表(下位机) 广告图片广播 天气信息多选点播 消息提醒广播 日期显示模块
56 0
|
Python
机器狗搭建记录2-树莓派连接舵机
机器狗搭建记录2-树莓派连接舵机
275 0
|
网络虚拟化
【eNSP 华为模拟器】vlan划分实验【图文】
【eNSP 华为模拟器】vlan划分实验【图文】
296 0
【eNSP 华为模拟器】vlan划分实验【图文】
|
JSON 文字识别 小程序
利用树莓派做的树莓派行程码识别系统
## 前言: 今天不讲Java,来一个小插曲 有朋友想学小程序行程码识别系统,今天就来简单的讲一讲 首先要有一个服务器设备:树莓派4b,舵机驱动板 运用python软件的tk模块来控制截图,每当用户点击识别按钮 的时候系统自动进行截图,并运行识别函数,进行比对。通过识别 文字函数调用了百度ocr识别的api,对图片的文字进行提取。然后 对返回的json进行判断,得出一个值,如果结果为可用数据,则运 行,运行打开舵机的函数,结果为假数据则舵机归位。并且舵机打 开之后在五秒之后将会自动归位。
245 0
利用树莓派做的树莓派行程码识别系统
|
JavaScript Linux Shell
切歌请按3或4!我把树莓派装进了旋转电话里,现在它成了一部MP3
切歌请按3或4!我把树莓派装进了旋转电话里,现在它成了一部MP3
187 0
自制电脑红外遥控接收器(PC软解码)
网上有很多介绍红外遥控接收器制作的文章,但其中大部分是用单片进行红外解码,然后再通过串口或USB把解码后的按键信息传入到PC的。这样的电路制作起来,不仅造价相对偏高,而且需要对单片编程,这会令大部分软件开发爱好者望而却步
1071 0