我用Python语言创建了一个简单的基于文本的房间游戏,目的是嵌入一个纯数据补丁(通过libPd),以便为我的每个不同的房间播放不同的声音文件(稍后将用生成音乐的算法替换)。
我目前使用的python代码取自libPD 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文件,然而结果输出听起来就像它已经被位压碎了一样。我猜问题是与块大小有关,但不确定。
如果有人有在Python中嵌入lidPD的经验,我将非常感激,因为我确信我要实现的东西非常简单。
先谢谢你,上尉
发布于 2013-07-12 23:07:11
我最终使用了一个变通方法,并导入了pygame (而不是pyaudio)来处理音频并初始化补丁。它可以毫无故障地工作。
谢谢你的帮助。
*对于任何遇到类似问题的人,请查看python的libPd github中的"pygame_test.py“。
发布于 2013-07-12 12:53:20
这里有几个部分。
发布于 2021-08-12 21:54:23
我对上面的示例进行了一些重构:
import pyaudio
from pylibpd import *
class PdAudio:
def __init__(self):
self.sample_rate = 44100
self.num_channel = 2
self.pd = self.__InitPd(self.num_channel, self.sample_rate)
self.py_audio = pyaudio.PyAudio()
self.block_size = libpd_blocksize()
self.stream = self.__InitAudio(self.num_channel, self.sample_rate,self.block_size)
self.inbuf = array.array('h', range(self.block_size))
print("Blocksize: %d" % self.block_size)
def StartPatchInBackground(self, filename):
self.patch = libpd_open_patch(filename, '.')
def IsPlaying(self):
return self.stream.is_active()
def __InitAudio(self, num_channels, sample_rate, block_size):
return self.py_audio.open(format = pyaudio.paInt16,
channels = num_channels,
rate = sample_rate,
input = False,
output = True,
frames_per_buffer = block_size,
stream_callback=self.__AudioCallback)
def __InitPd(self, num_channels, sample_rate):
return PdManager(1, num_channels, sample_rate, 1)
def __AudioCallback(self, in_data,frame_count,time_info,status):
outp = self.pd.process(self.inbuf)
return (outp.tobytes(),pyaudio.paContinue)
def __del__(self):
self.stream.close()
self.pd.terminate()
libpd_release()
pd_audio = PdAudio()
pd_audio.StartPatchInBackground('bloopy.pd')https://github.com/jkammerl/pylibpd_pyaudio/blob/main/pd_callback_example.py
https://stackoverflow.com/questions/17453913
复制相似问题