从 ALSA 获取音频振幅 Raspberry Pi
Get Audio Amplitude from ALSA Raspberry Pi
我在我的 RasPi2 上设置了 Airplay,这样我就可以通过 wifi 向我的 Raspberry Pi 播放音乐,该 Raspberry Pi 已插入我的扬声器(该软件称为“shairplay”)。现在我想控制一些 LED 灯带与当前播放的音频幅度同步。
所以我的问题是:
有什么办法可以从 ALSA 获得播放声音的当前声音振幅? (最好在Python)
是的,确实有。您可以在 shell 中手动设置音量,但在 python 中使用 OS 模块,您可以在 python 中控制它。为什么这很重要?因为你可以使用变量。您可以购买 Adafruit 的 LED 灯条并使用 if 语句(基于您设置音量的变量)。示例代码为
import os
fubar = #volume here
os.system('amixer cset numid=1 -- ' + fubar)
if fubar > #whatever volume you want:
#LED strip code here
还有关于 Adafruit 的教程可以做到这一点!编程愉快!
此示例使用声音的最大幅度来使用 python 检测噪声。
同样的概念可以用来绘制你的振幅,
sox.sh
#!/bin/sh
filename=
duration=
arecord -q -f cd -d $duration -t raw | lame -r - $filename
sox $filename -n stat 2>&1 | sed -n 's#^Maximum amplitude:[^0-9]*\([0-9.]*\)$##p'
soundcapture.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
import subprocess
import sys
import re
import time
def main(args=None):
try:
while True:
filename = time.strftime("%Y%m%d%H%M%S") + ".wav"
proc = subprocess.Popen(['sh','sox.sh', filename, '5' ], stdout=subprocess.PIPE)
result,errors = proc.communicate()
amplitude=float(result)
print amplitude
if amplitude > 0.15:
print 'Sound detected'
#os.rename(filename, "data/" + filename)
else:
print 'No sound detected'
#os.remove(filename)
except KeyboardInterrupt:
print('')
finally:
print('Program over')
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]) or 0)
请查看其 github page 了解更多详情。
我在我的 RasPi2 上设置了 Airplay,这样我就可以通过 wifi 向我的 Raspberry Pi 播放音乐,该 Raspberry Pi 已插入我的扬声器(该软件称为“shairplay”)。现在我想控制一些 LED 灯带与当前播放的音频幅度同步。
所以我的问题是: 有什么办法可以从 ALSA 获得播放声音的当前声音振幅? (最好在Python)
是的,确实有。您可以在 shell 中手动设置音量,但在 python 中使用 OS 模块,您可以在 python 中控制它。为什么这很重要?因为你可以使用变量。您可以购买 Adafruit 的 LED 灯条并使用 if 语句(基于您设置音量的变量)。示例代码为
import os
fubar = #volume here
os.system('amixer cset numid=1 -- ' + fubar)
if fubar > #whatever volume you want:
#LED strip code here
还有关于 Adafruit 的教程可以做到这一点!编程愉快!
此示例使用声音的最大幅度来使用 python 检测噪声。 同样的概念可以用来绘制你的振幅,
sox.sh
#!/bin/sh
filename=
duration=
arecord -q -f cd -d $duration -t raw | lame -r - $filename
sox $filename -n stat 2>&1 | sed -n 's#^Maximum amplitude:[^0-9]*\([0-9.]*\)$##p'
soundcapture.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
import subprocess
import sys
import re
import time
def main(args=None):
try:
while True:
filename = time.strftime("%Y%m%d%H%M%S") + ".wav"
proc = subprocess.Popen(['sh','sox.sh', filename, '5' ], stdout=subprocess.PIPE)
result,errors = proc.communicate()
amplitude=float(result)
print amplitude
if amplitude > 0.15:
print 'Sound detected'
#os.rename(filename, "data/" + filename)
else:
print 'No sound detected'
#os.remove(filename)
except KeyboardInterrupt:
print('')
finally:
print('Program over')
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]) or 0)
请查看其 github page 了解更多详情。