把widora-neo做成一个自动录音机...

在网上看到一篇alsa录音和放音的编程例子,在这个基础上自己摆弄了两天,增加了声音幅度检测和自动录音保存的功能,感觉比较好玩,分享给有兴趣的玩家。
源码:https://github.com/widora/ctest/blob/master/alsa/autorecord2.c

  1. 程序通过对32或64个声音帧(frame)的采样数值(sample)取平均值来检测声音幅度,超过设定的阈值,程序就自动启动录音。
  2. 在录音期间,如果检测到声音幅度超过阈值,那么程序自动增加3秒录音时间,这样说话期间暂时的停顿不至于会让录音停止。
  3. 录音停止后,程序会以时间作为名字保存录音,同时自动播放一遍内存中声音,保存的类型可以使RAW,WAV或MP3.
  4. 录音读入的数据实时进行IIR带通滤波。
  5. 整个程序不停循环。

@midas-zhou /home/midas/openwrt_widora/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/alsa-lib-1.0.28/include/
类似的,下面那个install-ipk也没有。

@midas-zhou 我发现了一个大问题。我的biuld_dir目录下,没有你.sh里面的那两个东西,是不是我编译工具的时候哪里选错了?

@sunkxs 没有指定库文件及相关路径。你可以参考下https://github.com/widora/ctest/blob/master/alsa/makerecord4.sh里面的内容,根据你自己的路径和需要调用的库做修改。

@midas-zhou 直接使用那个交叉编译工具编译出现这个错误!

@sunkxs 是什么错误?

@midas-zhou 楼主,我编译你的源码提示函数里的一些东西没有定义应该怎么解决。

@mango 问题是 一旦断电断网时间就会不准确了

@cvbpro 如果是联网的可以通过ntp服务器获取网络时间。

没有时钟模块 录音的具体时间怎么记录

进行了一下内录和外录试验,本意是通过同步内录和外录,将得到的外录数据和内录数据进行处理,滤除widora-neo播放的声音数据,从而得到外界的语音, 进而进行深一步的语音辨识和处理。

  1. 为了实现声卡内录,安装了一下alsa的snd-aloop.ko模块, 此模块默认情况下是不包括在linux内核里的。
  2. 通过相应配置asound.conf文件就 可以实现内录功能了。
    所谓内录,即通过声卡播放的所有数据都可以通过它录制下来,当然,同时声音还是可以从speaker播放出来的, 其实就是snd-aloop复制一份数据进行了环回, 环回到一个虚拟的声卡,将arecord的设备用-D指定这个虚拟声卡就可以实现内录了。
  3. 试验同步进行播放, 内录和外录, 发现外录得到的声音噪音比较大。内录得到的声音干净利落,其实就是alsa播放数据的同步复制和转采样率而已。
  4. 试验同步进行播放和外录, 发现外录得到的声音噪音还是比较大, 可能是WM8960播放时对外录音回路有干扰。我是用四线接口直接接2个扬声器的,如果用耳机接口输出到外置音箱应该更好,这样对录音回路的干扰应该会更小。
  5. 用alsamixer命令调小播放音量,外录噪音明显降低。
  6. 通过修改alsa配置文件asound.conf对采样率进行不同设置,发现采样率对外录的噪音也有一定的影响。

在网上找了个wav头文件,可以用-w选项保存成wav文件了.

Shine 是一款定点MP3编码共享软件, 特别适合没有FPU的MT7688,用Shine库来实时压缩autorecord的数据,CPU立马轻松!
https://github.com/widora/ctest/blob/master/alsa/autorecord4.c

mp3实时压缩已经没问题了,再来解决一下网络数据传输问题,这样就可以做把widora-neo变成一个网络对讲机了!

@mango 虽然是笑话,但是电源质量对通信设备来说确实很重要。

@midas-zhou 不是有个笑话,玩hifi的到最后都是玩电源。风火水电出来的声音都各具特色

对比手机电池板供电情况,非常明显。外接电源质量很重要啊。
!

@midas-zhou 如果尝试用充电宝给NEO供电呢?这个50Hz很讨厌。

录了一段背景音,查看了一下频谱,发现50Hz工频干扰是背景噪音的主要来源。用IIR滤波器过了一下,效果不错。
!

!

!

1 Like

增加了lame 实时压缩成mp3,这个文件更小,传输更方便!
源码 https://github.com/widora/ctest/blob/master/alsa/autorecord3.c