在我的史诗系列的第3部分“建立覆盆子Pi-powered巴克表”中,我讨论了如何使用arecord命令捕获音频和我发现我得到更好的声音中的一个古老的USB摄像头比华丽的(但非常便宜)我开始与USB声卡。我伤口在第3部分收集60秒在WAV声音文件格式在子目录树莓π,每个命名的样本的开始时间(如。2016 - 09 - 07 - 04 - 42 - 27. wav
)。
我们需要这些文件的零售物价指数我们可以对它们进行分析。从理论上讲,这可以在黑板上完成但现在我们将FTP到其他的机器进行分析。所以,让录音的地方我们可以切割它们,我们要用ncftpput
,包括FTP工具ncftp
包中。安装ncftp
我们将运行以下命令在命令行零售物价指数(一如既往,在安装一个新的包,你应该跑步sudo apt-get更新
第一个):
sudo apt-get安装ncftp
我们的记录是$ HOME /树皮
所以我们现在可以FTP到另一台机器上使用下面的命令行:
ncftpput - u admin \ \ dd \ - v - p密码\ ftpserver \ /树皮\ $ HOME /皮/ *。*
让我们分解(参见手册页为ncftpput
命令行选项):
- u管理
和- p密码
目标FTP服务器的登录凭证吗dd
导致本地文件成功上传后被删除。- v
抑制的显示上传进度计ftpserver
要么是目标FTP服务器的IP地址或名称吗/树皮
远程目录来存储文件吗$ HOME /皮/ *。*
的规范文件通过ftp传输
现在我们需要做的是自动化,以便每次录音完成后,它被发运到FTP服务器。这就是我们可以用一个很酷的命令,inotifywait
,监控更改的文件和目录。inotifywait
使用inotify
”,Linux内核子系统行为扩展文件系统通知更改文件系统,并报告这些更改应用程序”(维基百科)。这个工具是在包inotify-tools
这是安装:
sudo apt-get安装inotify-tools
与inotifywait
安装,我们可以建立一个BASH脚本如下:
arecord - d plughw: 1、0 - q -缓冲时间= 5000000 - f dat - c 1 - t wav——max-file-time 60 use-strftime $ HOME /皮/ Y % - % - % d % H - % - % S。wav &
而真正的
做
NEWFILE中= ' inotifywait % f - q -格式- e close_write $ HOME /树皮
ncftpput - u admin - p密码dd ftpserver /树皮$ HOME /皮/ NEWFILE中美元
完成
我讨论了线开始arecord
在之前的帖子和&
最后的命令告诉BASH作为后台任务运行它。的在做…
创造了一个无限循环和开始NEWFILE中
分解如下:
NEWFILE中=
设置一个临时的环境变量”
该撇号导致一切到下一个撇号评估作为一个整体被传递给命令之前,在这种情况下,设置的值NEWFILE中
。没有这个,NEWFILE中
将“inotifywait”而不是价值的输出inotifywait
inotifywait
块,直到一个特定的文件系统事件发生q
阻止程序打印基本状态信息,我们不需要——缓冲时间=
5000000
分配一个缓冲区的5秒(见下文)——% f格式
指定文件系统事件发生时,输出inotifywait
将文件的名称,有受到影响吗- e close_write
这指定了事件等,文件关闭$ HOME /树皮
要监视的目录吗
所以,当一个文件创建的arecord
是封闭的$ HOME /树皮
子目录,inotifywait
停止封锁和打印关闭文件的名称将被存储在环境变量中NEWFILE中
和脚本将简历。命令ncftpput
将执行并将文件名发现的inotifywait
FTP服务器,瞧!完成工作!
运行上面的BASH脚本的覆盆子π生成输出如下:
pi@RPi-01: ~ sh barkometer.sh美元
/home/pi/bark/2016 - 10 - 01 - 13 - 18 - 57. - wav: 5.49 MB 5.28 MB / s
/home/pi/bark/2016 - 10 - 01 - 13 - 19 - 57. - wav: 5.49 MB 5.19 MB / s
现在,您可能已经注意到,在参数arecord
在上面的脚本中,我添加了一些不是我在命令行中讨论第3部分。我说的是——缓冲时间
=
5000000
因为我原来的arecord
命令行你偶尔会看到超支报道是这样的:
pi@RPi-01: ~ sh barkometer.sh美元
/home/pi/bark/2016 - 10 - 01 - 13 - 18 - 57. - wav: 5.49 MB 5.28 MB / s
/home/pi/bark/2016 - 10 - 01 - 13 - 19 - 57. - wav: 5.49 MB 5.19 MB / s
/home/pi/bark/2016 - 10 - 01 - 13 - 19 - 57. - wav: 5.49 MB 5.19 MB / s
泛滥! ! !(至少191.372女士长)
/home/pi/bark/2016 - 10 - 01 - 13 - 20 - 57. - wav: 5.49 MB 5.77 MB / s
/home/pi/bark/2016 - 10 - 01 - 13 - 21 - 57. - wav: 5.49 MB 5.72 MB / s
/home/pi/bark/2016 - 10 - 01 - 13 - 22 - 57. - wav: 5.49 MB 5.79 MB / s
泛滥! ! !(至少38.328女士长)
这些错误显然是由于资源不但是究竟是什么原因导致他们简直太神秘。我认为这可能是由于I / O限制的SD卡,但是当我试着使用/ tmp
子目录(这是基于ram)来存储音频文件我仍然得到相同的结果;如果你有任何了解这个问题,请让我知道。我找到的解决方案是添加一个5秒的缓冲(在命令行中指定的值在微秒)修复问题的成本使用更多的内存。
在本期文章中我们最后的任务是设定零售价格指数(RPi)开始时我们的脚本运行。有多种方法来达到这个目的,但我们将使用一个最简单的,编辑用户自动启动文件:
纳米~ / config / lxsession / LXDE-pi /自动运行
Raspbian的默认桌面插件,自动启动文件的内容是这样的,除非你已经改变:
@lxpanel——概要LXDE-pi
@pcmanfm LXDE-pi——桌面配置文件
@xscreensaver飞溅
@point-rpi
我们需要在文件的末尾添加一行:
@bash /home/pi/barkometer.sh
这将调用BASH的一个新实例,并执行脚本。因为这是一个用户的上下文中,这意味着用户必须登录,自动登录是一个好主意。一个重要的问题是,用户登录才能发生Raspbian已完成所有子系统所以我们可以肯定的是,开始,除非有一个问题,我们需要的服务,比如将建立一个无线连接。
现在有很多我们可以做更多的脚本的健壮aschecking如果FTP服务器访问和采取行动的,如果不是,我们运行日志的输出命令,将TFP的日志服务器,整理遗留任何WAV或日志文件重启,等等,但就目前而言,我们已经取得了我们的主要目标;记录周围的音频环境和保存到远程服务器进行分析。
在本系列的下一部分中,我们将开始弄清楚如何分析我们的录音。