Итак, после интенсивного чтения API и некоторых видеороликов, посвященных евроскипии, я определил правильный формат для потокового метода sounddevice (portaudio fork).Я также взял некоторые базовые знания о потоках и очередях, чтобы создать элементарный смещение высоты тона, практически в реальном времени.Переключатель высоты тона должен быть изменен и реализован с помощью ручки.Также необходимо улучшить скорость буфера, чтобы рассматривать его в режиме реального времени.Надеюсь, что это поможет любому, кто хочет просто погрузиться в манипулирование звуком без всяких хлопот!
def waveform(q):
with sd.Stream(samplerate=RATE,blocksize=CHUNK,dtype='int32',latency='low',callback=None) as s:
sps = 44100
wave = signal.square
t = .3
atten = .015
while True:
i = q.get()
freq = i
waveform = wave(2*np.pi*(np.arange(t*sps))*freq/sps)
waveform_quiet = waveform*atten
wave_int = waveform_quiet * 2147483647
s.write(np.ascontiguousarray(wave_int, np.int32))
q=Queue()
q.put(i)
p = Thread(target=waveform, args=(q,))
p.daemon = True
p.start()
#pitch shifter, increments of 10hz
while True:
i+ = 10
q.put(i)
print('Queues being stored')
print(i)
if i >880:
print('Queues Stored')
break