树莓派打造mini广播(FM)系统

注意相关法律限制功率大小和频段.,以下只能用于测试目的

github项目:

https://github.com/miegl/PiFmAdv

安装:

apt-get update

``apt-get install git libsox-fmt-mp3 sox libsndfile1-dev `

为了使 PLLC调制更稳定 推荐修改gpu频率来匹配安全频率.(使用pllc调制对的时候可能会使电压降低到安全电压以下可能会崩溃.) /boot/config.txt 加入 gpu_freq=250

  1. git clone https://github.com/Miegl/PiFmAdv.git
  2. cd PiFmAdv/src
  3. make clean
  4. make

测试 sudo ./pi_fm_adv 使用手机或收音机调整频率到87.6MHZ (默认频率) 默认使用gpio4 来发射信号的.但也可以修改为 4, 20, 32, 34 如修改为gpio32 使用参数 --gpio 32 即可.

因为相关法律限制我们不可以在相应的gpio发射信号口接馈线或信号传输设备!

播放在线的音频.

sox -t mp3 http://www.linuxvoice.com/episodes/lv_s02e01.mp3 -t wav - | sudo ./pi_fm_adv --audio -

也可以播放本地的音频文件如mp3格式.

sox -t mp3 test.mp3 -t wav - | sudo ./pi_fm_adv --audio -

github上很早就有大神做了网络点歌台.

https://github.com/ma6174/fmpi

该项目简介:

简介

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

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

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

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

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

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

关键技术与原理

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

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

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

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

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

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

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

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

简单列一下:

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

安装部署方法

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

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

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

使用方法

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

  1. sudo bash start.sh

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

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

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

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

想终止程序的话按Ctrl + c

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

树莓派打造mini广播(FM)系统的更多相关文章

  1. NNVM打造模块化深度学习系统(转)

    [摘录理由]: 之所以摘录本文,主要原因是:该文配有开源代码(https://github.com/dmlc/nnvm):读者能够直接体会文中所述的意义,便于立刻展开研究. MXNet专栏 :NNVM ...

  2. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...

  3. go语言打造个人博客系统(二)

    go语言打造个人博客系统(二)   在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发. 博客系统后端接口开发 路由测试 ht ...

  4. go语言打造个人博客系统(一)

    go语言打造个人博客系统(一) 为什么选择go语言?   听说go语言是在几年前,但真正深入了解他却是在2017年,因为当时作为讲师 ,需要准备go语言的课程,结果稍一接触立刻就喜欢上这门语言了,作为 ...

  5. 从零打造在线网盘系统之Struts2框架起步

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  6. 从零打造在线网盘系统之Struts2框架配置全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  7. 从零打造在线网盘系统之Struts2框架核心功能全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  8. 从零打造在线网盘系统之Hibernate框架起步

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  9. 从零打造在线网盘系统之Hibernate配置O/R映射

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

随机推荐

  1. (八)SpringBoot之freeMarker基本使用

    一.案例 1.1 pom.xml <dependencies> <!-- 除去logback支持 --> <dependency> <groupId>o ...

  2. Tomcat服务器的数字证书 HTTPS 连接!

    SUN公司提供了制作证书的工具keytool, 在JDK 1.4以后的版本中都包含了这一工具,它的位置为\bin\keytool.exe 注意要使用一下 cmd命令,请确认jdk环境变量可以使用,可以 ...

  3. ZROI17普及23-B星空题解--图的灵活转化

    题目链接 版权原因不予提供 分析 这题思路很妙啊,虽然已经算半个套路题(因为我太菜了) 将框视为点,若一个球能放在\(x\)或\(y\)框,则\(x,y\)连一条无向边.有一条非常显然的性质是:在联通 ...

  4. VBA if...else语句

    一个if语句由一个布尔表达式和一个或多个语句组成.如果条件评估为True,则执行if条件下的语句.如果条件评估为False,则执行else部分块下的语句. 语法 以下是VBScript中的if els ...

  5. vue学习(6)-路由(导入包;创建子组件;创建路由对象)传参,子路由,多个组件

    后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源 前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换(不会刷新页 ...

  6. Forms Process (FRMWEB) Consumes 100% of CPU in Oracle Applications R12 (文档 ID 745711.1)

    https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=283767243216583&id=745711.1& ...

  7. curl: (7) couldn't connect to host 解决方法

    使用curl命令访问网站时报错: [root@bqh-119 ~]# curl -I www.test.com curl: (7) couldn't connect to host [root@bqh ...

  8. 用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换

    一.功能 用一个\(N\)点复序列快速傅立叶变换算法来同时计算两个\(N\)点实序列的离散傅立叶变换. 二.方法简介 假设\(x(n)\)与\(y(n)\)都是长度为\(N\)的实序列,为计算其离散傅 ...

  9. 《形式化分析工具Scyther性能研究》------摘抄整理

    本篇论文的主要创新点在--------使用 Scyther工具发现对部分 KCI攻击搜索出现漏报的现象,并给出了存在的原因, 介绍了 形式化分析工具   AVispa全称是   Automated V ...

  10. 2018年5月20日--西安icpc邀请赛试题一览

    热身赛 正式赛 A题,样例不代表后台数据,出题人把题意和后台数据代表的意思搞差了! B: C: D-E F f-G G G-H H-I I-J J-k K-2