Я использую систему сбора пользовательских сигналов, которая обеспечивает непрерывные данные.
У меня проблемы с потоковой передачей данных, обрабатываемых в режиме реального времени с использованием pyaudio.
Код выглядит так:
import pyaudio as pya
import numpy as np
import threading
import MyAcq
fs = 50000
NbEch = 5000
CHUNK = 1000
NbCHUNK = NbEch/CHUNK
def processing(Acq, strm):
while MyAcq.AcqActiv:
data = Acq.get_data(NbEch)
Sig = MyAcq.MyProcess(data).astype('float32')
for i in range(NbCHUNK) :
Buffer = Sig[i*CHUNK + np.arange(CHUNK)]
strm.write(Buffer)
if __name__ == '__main__':
Acq = MyAcq.MyAcqSystem()
Acq.start()
pa = pya.PyAudio()
stream = pa.open(format = pya.paFloat32,
channels = 1,
rate = fs,
frames_per_buffer = CHUNK,
input = False,
output = True)
t = threading.Thread(target = processing, args =(Acq, stream))
t.start()
MyAcq.close()
stream.stop_stream()
stream.close()
pa.terminate()
Хотя поток входных данных непрерывен, выходной сигнал прерывается и искажается.
Я не понял, как использовать режим обратного вызова.
Использование очереди для обмена обработанным сигналом больше не было успешным.
Любая подсказка?