簡體   English   中英

從 ALSA Raspberry Pi 獲取音頻幅度

[英]Get Audio Amplitude from ALSA Raspberry Pi

我在我的 RasPi2 上有一個 Airplay 設置,所以我可以通過 wifi 播放音樂到我的樹莓派,樹莓派插入我的揚聲器(該軟件稱為“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=$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'

聲音捕捉.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 頁面以獲取更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM