大佬教程收集整理的这篇文章主要介绍了linux – 监听音频线,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有可能用bash吗?一些沿着以下方向的东西:
#!/bin/bash # audio device device=/dev/audio-line-in # below this threshold audio will not be recorded. noise_threshold=10 # folder where recordings are stored storage_folder=~/recordings # run indefenitly,until Ctrl-C is pressed while true; do # noise_level() represents a function to determine # the noise level from device if noise_level( $device ) > $noise_threshold; then # stream from device to file,can be encoded to mp3 later. cat $device > $storage_folder/$(date +%FT%T).raw fi; done;
编辑:我想从这个程序获得的流程是
a. when noise > threshold,start recording b. stop recording when noise < threshold for 10 seconds c. save recorded piece to separate file
>您需要将录音分割成固定大小的块
>您可能会丢失录音时间(由于杀死/分析/重新启动录音)
因此,进一步的改进可能是分析异步,尽管这将使工作复杂化.
#!/bin/bash record_interval=5 noise_threshold=3 storage_folder=~/recordings exec 2>/dev/null # no default error output while true; do rec out.wav & sleep $record_interval kill -KILL %1 max_level="$(sox out.wav -n stats -s 16 2>&1|awk '/^Max\ level/ {print int($3)}')" if [ $max_level -gt $noise_threshold ];then mv out.wav ${storage_folder}/recording-$(date +%FT%T).wav; else rm out.wav fi done
更新:
以下解决方案使用fifo作为rec的输出.通过在这个管道上使用拆分来获取块,应该没有丢失录音时间:
#!/bin/bash noise_threshold=3 storage_folder=~/recordings raw_folder=~/recordings/tmp split_folder=~/recordings/split sox_raw_options="-t raw -r 48k -e signed -b 16" split_size=1048576 # 1M mkdir -p ${raw_folder} ${split_folder} test -a ${raw_folder}/in.raw || mkfifo ${raw_folder}/in.raw # start recording and spliTing in BACkground rec ${sox_raw_options} - >${raw_folder}/in.raw 2>/dev/null & split -b ${split_sizE} - <${raw_folder}/in.raw ${split_folder}/piece & while true; do # check each finished raw file for raw in $(find ${split_folder} -size ${split_sizE}c);do max_level="$(sox $sox_raw_options ${raw} -n stats -s 16 2>&1|awk '/^Max\ level/ {print int($3)}')" if [ $max_level -gt $noise_threshold ];then sox ${sox_raw_options} ${raw} ${storage_folder}/recording-$(date +%FT%T).wav; fi rm ${raw} done sleep 1 done1
以上是大佬教程为你收集整理的linux – 监听音频线全部内容,希望文章能够帮你解决linux – 监听音频线所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。