Я создал простой текстовый выход из игры комнаты в Python с намерением внедрить патч Pure Data (через libPd), чтобы воспроизвести другой звуковой файл (это позже будет заменен алгоритмом для генеративной музыки) для каждой из моих комнат.Реализация libPD (Pure Data wrapper) в Python
Код python, с которым я работаю в настоящее время, был взят из одного из примеров в libput github. Она заключается в следующем -
import pyaudio
import wave
import sys
from pylibpd import *
p = pyaudio.PyAudio()
ch = 2
sr = 48000
tpb = 16
bs = 64
stream = p.open(format = pyaudio.paInt16,
channels = ch,
rate = sr,
input = True,
output = True,
frames_per_buffer = bs * tpb)
m = PdManager(ch, ch, sr, 1)
libpd_open_patch('wavfile.pd')
while 1:
data = stream.read(bs)
outp = m.process(data)
stream.write(outp)
stream.close()
p.terminate()
libpd_release()
Чистый патч данных просто воспроизводит предварительно оказанные файл WAV, однако в результате выхода звучит почти как если бы он был bitcrushed. Я предполагаю, что проблема связана с размером блока, но я не уверен.
Если у кого-то есть опыт вложения lidPD в Python, я был бы очень благодарен, поскольку я уверен, что я пытаюсь достичь, это смущающе просто.
Спасибо заранее, Cap
Спасибо за ответ Адам. У меня создалось впечатление, что я установил размер блока 64 и установив отметки на один буфер на 16, он даст мне 1024 кадра на буфер. Первоначально у меня была настройка tpb 1, но «бит дробилки» все еще присутствовал. – CapricornOne
Я также пробовал как файлы 44.1k, так и 48k при изменении выборки в коде безрезультатно. Я думаю, что это имеет какое-то отношение к paInt16, так как изменение его на paInt32 или paInt8 в какой-то степени изменяет измельченный эффект, но, как я уже сказал, я просто вытащил это из примера кода и не уверен, что он должен делать точно. – CapricornOne
Я также пробовал другой маршрут в виде патча puredata, который просто пропускал синус-тон при вызове в python. Такая же проблема возникает. – CapricornOne