Базовый сдвиг высоты тона, используя методы Stream в модуле sounddevice для Python? - PullRequest
0 голосов
/ 27 января 2019

Я действительно не понимаю правильный формат или структуру кода относительно того, как реализовать методы Sounddevice Stream. Я хочу создать базовый буфер, который записывает данные моего массива для чтения в обратном вызове почти в реальном времени. Я хочу иметь возможность изменять частоту звуковой волны с помощью многопоточного запроса, который интегрирован с потоком. Я пытаюсь понять базовый API и то, как вход для вывода работает с потоковой передачей через Sounddevice.

https://python -sounddevice.readthedocs.io / ен / 0.3.12 / api.html

Мое непонимание этого API заставляет меня понять, с чего начать. Это просто для изучения звуковых манипуляций и применения эффектов к непрерывному звуку без каких-либо слышимых срезов, вроде Термен.

1 Ответ

0 голосов
/ 28 января 2019

Итак, после интенсивного чтения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...