让你的Raspberry Pi Python的运行,你需要连接到你的PI与HDMI线看它的显示,或使用SSH的PI打开终端。
曾经在一个终端或命令行环境的PI,执行下面的代码:
-
sudo apt-get install Python NumPy
-
sudo apt-get install python opencv
-
sudo apt-get install Python SciPy
-
sudo apt-get install Python pyaudio Python3 pyaudio
这些命令将你的PI,允许你编辑和部署Python代码安装NumPy、SciPy环境。
所有的代码,你将需要运行这个项目可以在GitHub上的项目发现:
https://github.com/katrinamo/rpipitch
它包含GPIO测试文件,以确保你的Raspberry Pi的GPIO是一起工作的一个程序来测试MATLAB的绘图功能。matlab绘制主要用于调试和开发的基音检测。<em>它是可选的安装</em>。你真的只需要上面的包使它工作。
也可以将代码复制并粘贴以下:
#THIS CODE IS HEAVILY BASED ON: <br># <a href="https://benchodroff.com/2017/02/18/using-a-raspberry-pi-with-a-microphone-to-hear-an-audio-alarm-using-fft-in-python/" rel="nofollow"> https://benchodroff.com/2017/02/18/using-a-raspbe...>
#/usr/bin/env python
import pyaudio
from numpy import zeros,linspace,short,fromstring,hstack,transpose,log2, log
from scipy import fft, signal
from time import sleep
from scipy.signal import hamming, convolve
import matplotlib.pyplot as plt
import RPi.GPIO as GPIO
import sys
#from findfundfreq import *
#Volume Sensitivity, 0.05: Extremely Sensitive, may give false alarms
# 0.1: Probably Ideal volume
# 1: Poorly sensitive, will only go off for relatively loud
SENSITIVITY= 1.0
#Bandwidth for detection (i.e., detect frequencies within this margin of error of the TONE)
BANDWIDTH = 1
# Show the most intense frequency detected (useful for configuration)
frequencyoutput=True #notes in cents
Note_E = 5
Note_A = 0
Note_D = 7
Note_G = 2
Note_B = 10
Note_E4= 5 #holds previous frequency
prevFreq = 0
z1 = 10
z2 = 0
z0 = 0
MIN_FREQUENCY = 60
MAX_FREQUENCY = 500
#Max & Min cent value we care about
MAX_CENT = 11
MIN_CENT = 0
RELATIVE_FREQ = 440.0
if len(sys.argv) > 1:
if (sys.argv[1] >= 415.0 and sys.argv[1] <= 445.0):
RELATIVE_FREQ = sys.argv[1]#GPIO set up for the Red Green and Blue colors
GPIO.setmode(GPIO.BCM)
GPIO.setup(5, GPIO.OUT)
GPIO.setup(6, GPIO.OUT)
GPIO.setup(13, GPIO.OUT) #Set up audio sampler -
NUM_SAMPLES = 2048
SAMPLING_RATE = 48000
pa = pyaudio.PyAudio()
_stream = pa.open(format=pyaudio.paInt16,
channels=1, rate=SAMPLING_RATE,
input=True,
frames_per_buffer=NUM_SAMPLES)
print("Detecting Frequencies. 按Ctrl-C退出。”)
去= 10
#而去> 0:
而真实:
而_stream。get_read_available() < num_samples:睡眠(0.01)
audio_data = fromstring(_stream。读(
_stream。get_read_available()),D =短)[:] num_samples
#每个数据点有符号的16位号码,所以我们可以规范分32×1024
normalized_data = audio_data / 32768
W =汉明(2048)
强度= ABS(W * FFT(normalized_data))[ 2 ]:num_samples /
如果输出:
=强度[ 1 ]。argmax() + 1
#使用二次插值在最大
!= Len(强度)1:
Y0,Y1,Y2 = log(强度[ which-1:+ 2:])
X1 =(Y2 - y0)* 5 /(2×y1 - y2 y0)
#找到频率和输出:它
thefreq =(+ X1)* sampling_rate / num_samples
如果thefreq < min_frequency或thefreq > max_frequency:
adjfreq = - 9999
别的:
thefreq =,* sampling_rate / num_samples
如果thefreq > min_frequency:
adjfreq = thefreq
# adjfreq = 140
#打印(“候选频率:”,candidate_freq,这
#系统)。stdout。写(“频率:%d \r“%(adjfreq))
#系统。flush() stdout!= 9999):
#打印“原始频率:”,adjfreq
adjfreq = 1200 * log2(relative_freq / adjfreq)/ 100
adjfreq = adjfreq % 12
#打印adjfreq
#案例陈述
如果ABS(adjfreq - note_e4)<1:
#调E
如果ABS(adjfreq - note_e4)<0.1:
打印(“你了
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)#绿色
#夏普E
elif(adjfreq - note_e4)<0:
打印(“你是锋利的
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。低)
#平E
elif(adjfreq - note_e4)> 0:
打印(“你是平的
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
elif ABS(adjfreq - note_e)<1:
#调E
如果ABS(adjfreq - note_e)<0.1:
打印(“你
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)
#夏普E
elif(adjfreq - note_e)<0:
打印(“你是
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。低)
#平E
elif(adjfreq - note_e)> 0:
打印(“你是平的
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
elif ABS(adjfreq - note_b)<1:
#调B
如果ABS(adjfreq - note_b)<0.1:
打印(“你
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)
#锋利的B
elif(adjfreq - note_b)<0:
打印(“你是夏普(
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。低)
#平B
elif(adjfreq - note_b)> 0:
打印(“你是平的(B
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
elif ABS(adjfreq - note_g)<1:
#调G
如果ABS(adjfreq - note_g)<0.1:
打印(“你
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)#绿色
#尖锐的G
elif(adjfreq - note_g)<0:
打印(“你是夏普(G
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。低)
#平G
elif(adjfreq - note_g)> 0:
打印(“你是平的(G
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
elif ABS(adjfreq - note_d)<1:
GPIO输出(5,GPIO。低
输出(GPIO)。6、GPIO。低)
GPIO输出(13,GPIO。高)
#调D
如果ABS(adjfreq - note_d)<0.1:
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)#绿色
#夏普D
elif(adjfreq - note_d)<0:
打印(“你是夏普(D
GPIO输出(13,GPIO。低)
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
#平D
elif(adjfreq - note_d)> 0:
打印(“你是平的(D
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
elif ABS(adjfreq - note_a)<1:
#合拍一
如果ABS(adjfreq - note_a)<0.2:
打印(“你
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)#绿色
#夏普
elif(adjfreq - note_a)<0:
打印(“你是锋利的
GPIO输出(13,GPIO。低)
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
#平
elif(adjfreq - note_a)> 0:
打印(“你是平的
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
elif ABS(adjfreq - 12)<1:
#合拍一
如果ABS(adjfreq - 12)<0.2:
打印(“你
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。高)#绿色
#夏普
elif(adjfreq - 12)<0:
打印(“你是锋利的
GPIO输出(13,GPIO。低)
GPIO输出(5,GPIO。高)#红
GPIO输出(6,GPIO。低)
#平
elif(adjfreq - 12)> 0:
打印(“你是平的
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。高)#蓝
GPIO输出(13,GPIO。低)
#全部关闭
别的:
GPIO输出(5,GPIO。低)
GPIO输出(6,GPIO。低)
GPIO输出(13,GPIO。低)
#系统里。写(“分:%s R“% adjfreq)
#系统里。flush()
(责任编辑:admin)