Я пытаюсь использовать pyaudio в шапке hifi berry на малиновом пи через python, чтобы получить непрерывное значение l oop, в которое я считываю данные, фильтрую их и выводю отфильтрованные данные. Входные и выходные волны визуализируются на осциллографе. После ожидания в течение нескольких минут выходная волна искажается и иногда останавливается перед продолжением. Как бы сделать вывод не глюком или остановкой. Мой код, который я использую, ниже. Я не уверен, что проблема в приведенном ниже коде или других фоновых файлах, работающих на Raspberry Pi.
Код:
# installing packages needed for script
import numpy as np
import matplotlib.pyplot as plt
import pyaudio
import wave
import math
import cmath
# Initializing the variables for stream
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
INDEX = 1
p = pyaudio.PyAudio()
# defining the pyaudio stream
stream = p.open(format=FORMAT, input_device_index = INDEX,
channels=CHANNELS,
rate=RATE, input=True,
output = True,
frames_per_buffer=CHUNK)
#recursive filter variables
f = RATE
f0 = 440
Q = 10
c = -math.exp((-2*math.pi*f0)/(Q*f))
b = 2*math.exp((-math.pi*f0)/(Q*f))*math.cos(2*math.pi*f0/f)
a = (1-b-c)/(Q)
x = [0]*CHUNK
# while loop to take incoming waves filter and output them
while True:
Sample = stream.read(CHUNK, exception_on_overflow = False) # data gets read as bytes[int]
Sample = np.fromstring(Sample,dtype=np.int16) # converting from string to bytes[np.int16]
for i in range(0, len(Sample)):
x[i] = (a)*Sample[i] + (b)*x[(i-1)%CHUNK] + (c)*x[(i-2)%CHUNK] # output data at this point becomes np.float64
out = np.asarray(x).astype(np.int16)# output goes back to np.int16
out = out.tostring() #output goes back to string from np.int16
stream.write(out) #streaming out filtered string data
Любые предложения о том, как исправить вывод на осциллограф или сделать код лучше / эффективнее?