树莓派发射FM波——搭建私人小电台
树莓派的应用十分广泛,有很多奇思妙想的应用非常有趣,在这里我们想实现一个小电台的功能,但是在这里需要说明,私人架设电台是违法行为,所以本案只作为自我娱乐所用,不能发射大功率的信号干扰正常的FM频段。
这里需要用到一个开源的小软件PiFmRds" target="_blank">PiFmRds,这个小软件最早是由两位外国朋友Oliver Mattos and Oskar Weigl 开发的,后来,Richard Hirst把这个小软件改成由DMA实现,减少了CPU资源的占用。再后来Christophe Jacquet继续修改软件,添加了RDS数据生成器和调制器,发射器使用Raspberry Pi的PWM发生器产生VHF信号,该软件与Raspberry Pi 1、2和3都兼容。
该小软件依赖sndfile库,首先安装该库:
- sudo apt-get install libsndfile1-dev
接下来克隆小软件的源码:
然后进行编译:
- cd PiFmRds/src
- make clean
- make
编译完成后,输入以下命令运行程序
- sudo ./pi_fm_rds
此时就会在树莓派的GPIO 4 (40针P1接口的第7管脚)上产生FM发射波,默认频率107.9,这个辐射范围通常在100厘米左右,增加20cm的杜邦线,可以使得发射范围增加到100米。
在pi_fm_rds源码目录中有五个wav声音文件作为示例,可以执行如下命令播放音频。
- sudo ./pi_fm_rds -audio sound.wav -freq 100.6
此时就可以听到一段英文发音,这个时间非常短,只有4秒钟左右,重复执行就可以多次听到了。
pi_fm_rds更多的应用语法如下:
pi_fm_rds [-freq freq] [-audio file] [-ppm ppm_error] [-pi pi_code] [-ps ps_text] [-rt rt_text]
所有参数都是可选的:
- -freq指定载波频率(以MHz为单位)。例如:-freq 100.6。
- -audio指定一个音频文件作为音频播放。如果提供立体声文件,则Pi-FM-RDS将产生FM立体声信号。例如:-audio sound.wav。支持的格式取决于libsndfile。这包括WAV和Ogg / Vorbis(等),但不包括MP3。
- -pi指定RDS广播的PI代码。4个十六进制数字。例如:-pi FFFF。
- -ps指定RDS广播的电台名称(节目服务名称,PS)。限制:8个字符。例如:-ps RASP-PI。
- -rt指定要传输的无线文本(RT)。限制:64个字符。例如:-rt 'Hello, world!'。
- -ctl 指定一个命名管道(FIFO)作为控制通道在运行时改变PS和RT。
- -ppm 以百万分率(ppm)为单位指定树莓派的振荡器误差。
如果使用参数-audio -,注意,-audio 后面是一个短横线,Pi-FM-RDS将读取标准输入上的音频数据,这允许您将程序的输出传送到Pi-FM-RDS。他有什么作用呢,这就为我们播放MP3预留了接口,例如,这可以用于使用Sox读取MP3文件:
- sox -t mp3 Music.mp3 -t wav - | sudo ./pi_fm_rds -audio -
这个操作的意思是使用sox工具读取Music.mp3,转换成wav格式并输出到标准输出,同时使用pi_fm_rds来播放(发射)标准输入中的文件(流)。
或者将声卡的AUX输入传送到Pi-FM-RDS:
- sudo arecord -fS16_LE -r 44100 -c 2 - | sudo ./pi_fm_rds -audio -
- 超级容易卡死很用CPU
CPU使用情况如下:
添加音频时,CPU使用率显著增加,因为程序必须将输入音频文件的采样率采样到228 kHz,即其内部操作采样率,这一动作还是非常消耗CPU资源的。
通过以上操作,一个小小的私人电台就搭建好了,但是在此重申,搭建私人电台是违法行为,自己短时间,小范围的玩玩可以,不要干扰了正常的FM频段,否则后果很严重。
man sox
rec -c1 -r16000 xxx.wav
可以录制音频 c指的是声道数 r值得是采样率
play xxx.wav
播放
sox -V xxx.wav -n
查看wav文件的详细参数
example:16k的音频降采样到8k
sox -r 16000 input.wav -r 8000 output.wav
多个单通道合并为多通道: sox 1.wav 2.wav 3.wav -t wavpcm -M 4.wav # 4.wav
是3通道的
多个单通道融合为单通道: sox 1.wav 2.wav 3.wav -t wavpcm -m 4.wav # 4.wav
是单通道的
sox input.wav -c1 output.wav mixer -l
mp3转wav
①安装sox:
sudo apt-get install lame
sudo apt-get install sox
sudo apt-get install libsox-fmt-mp3
②转换方法
mp3/wav等等格式转换成ogg格式:
打开终端,输入: sox 1.mp3 1.ogg
wav转换mp3格式:
打开终端,输入: sox 1.wav 1.mp3
链接:https://www.jianshu.com/p/9fb24dc60f29
转载于:https://jingyan.eeboard.com/article/76354#/prettyPhoto%5Bpp_gal%5D/0/
树莓派发射FM波——搭建私人小电台的更多相关文章
- 讲解开源项目:5分钟搭建私人Java博客系统
本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...
- 搭建私人的云笔记_使用webdav服务
搭建私人的云笔记_使用webdav服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-10-10. 手机上有很多云笔记app,大多支持云存储.可是把笔记放在别人的服务器上,总觉得不 ...
- 树莓派之web服务器搭建
树莓派之web服务器搭建 (一)使用ufw创建防火墙 设置目的:可以完全阻止对树莓派的访问也可以用来配置通过防火墙对特点程序的访问.使用防火墙更好的保护树莓派. 准备工作 1.带有5V电源的树莓派 2 ...
- SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04
摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...
- QT树莓派交叉编译开发环境搭建
QT树莓派交叉编译开发环境搭建 - JerryZone <Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2> <Qt for Em ...
- 搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务
搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-02-18. Radicale, Radicale (对cardd ...
- Spring框架——事务管理方式搭建一个小的项目
学习Spring框架,通过事务管理的方式搭建一个小的项目,该项目可以查询对数据库中的图书库存数量进行修改. 首先,使用MVC分层的设计模式思想搭建项目目录结构. 此部分代码源码之中都有相关注释,所以尽 ...
- 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器
简介 使用 sinopia 的好处是,node系的工程师,内部协作时,使用自有 npm 包,会非常方便:另外,sinopia,会缓存已经下载过的包,可以在相当程度上,加速 npm install 相关 ...
- 一个小时快速搭建微信小程序教程
「小程序」这个划时代的产品发布快一周了,互联网技术人都在摩拳擦掌,跃跃欲试.可是小程序目前还在内测,首批只发放了 200 个内测资格(泪流满面).本以为没有 AppID 这个月就与小程序无缘了,庆幸的 ...
随机推荐
- (转)Linux Shell系列教程之(十四) Shell Select教程
本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...
- gitHub-高仿58同城加载动画
导入方式: /build.gradle repositories { maven { url "https://jitpack.io" } } /app/build.gradle ...
- SPSS学习系列之SPSS Text Analytics是什么?
不多说,直接上干货! IBM® SPSS® Text Analytics 是一个IBM® SPSS® Modeler 完全集成内插式插件,它采用了先进语言技术和Natural Language Pro ...
- js验证整数,浮点数
//验证数字(整数.浮点数都可以通过) function isfloat(oNum){ if(!oNum) return false; var strP=/^\d+(\.\d+)?$/; if(!st ...
- java-双大括号实例初始化的反模式
今天在看springboot的batch时, 看到这样一段代码, 直接把我看懵了, 于是找了一下, 发现这 两个大括号 {{ 叫实例初始化器 FlatFileItemReader<Person ...
- SC Create 创建一个Windows系统服务 转
转自:http://www.360doc.com/content/13/0428/09/7555793_281451268.shtml sc create Serv-U binpath= &q ...
- nodeJs的npm报错问题
1. Failed at the phantomjs-prebuilt@2.1.14 install script 'node install.js'. 解决办法: npm install phant ...
- android开发学习笔记系列(2)-android应用界面编程
前言 本篇博客将会简要介绍andriod开发过程中的一些界面元素和编程的实现,我将大家走进安卓的XML世界,当然可能会涉及到java代码,当然本文主要是介绍XML文件的界面布局. 那么我们的XML存在 ...
- ASP.NET 之 MVC框架及搭建
一.MVC简介 MVC:Model-View-Controller(模型-视图-控制器),MVC是一种软件开发架构模式. 1.模型(Model) 模型对象是实现应用程序数据域逻辑的应用程序部件. 通常 ...
- Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
sudo chown -R username /usr/local/lib/node_modules 注:username要具有/usr/local/lib/node_modules的读写权限