Получить аудио амплитуду от ALSA Raspberry Pi
У меня есть настройка Airplay на моем RasPi2, так что я могу воспроизводить музыку через Wi-Fi на моем Raspberry, который подключен к моим динамикам (shairplay). Теперь я хочу управлять некоторыми светодиодными лентами синхронно со звуком, который воспроизводится в данный момент.
Итак, мой вопрос: есть ли способ получить текущую амплитуду звука от ALSA? (предпочтительно в Python)
2 ответа
Этот пример использует максимальную амплитуду звука для обнаружения шума с помощью Python. Та же концепция может быть использована для построения ваших амплитуд,
sox.sh
#!/bin/sh
filename=$1
duration=$2
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.]*\)$#\1#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 для более подробной информации.
Да на самом деле, есть. Вы можете вручную установить громкость в оболочке, но используя модуль OS в python, вы можете управлять им в python. Почему это важно? Потому что вы можете использовать переменные. Вы можете купить светодиодные ленты Adafruit и использовать операторы if (на основе переменной, для которой вы устанавливаете громкость). Пример кода будет
import os
fubar = #volume here
os.system('amixer cset numid=1 -- ' + fubar)
if fubar > #whatever volume you want:
#LED strip code here
Существует также учебник по Adafruit, чтобы сделать это! Удачного программирования!