Fechamento do Python, erro de escopo da variável local
Minha função me joga com olocal variable 'pt' referenced before assignment
erro:
Traceback (most recent call last):
File "/home/solesschong/Workspace/PenPal/python/main.py", line 126, in callback
ind = (i+pt) % n
UnboundLocalError: local variable 'pt' referenced before assignment
o código é o seguinte
def get_audio_callback(pt):
def callback(in_data, frame_count, time_info, status):
for i in range(frame_count):
ind = (i+pt) % n
return (a, b)
return callback
e no escopo global,
pt = 0
stream = p.open(stream_callback=get_audio_callback(pt))
Não consigo descobrir por que o erro ocorre, pois verifiquei com alguns exemplos de fechamento e não encontro nenhuma diferença.
EditarO motivo pelo qual você não pode reproduzir o erro pode ser o excesso de simplificação, conforme mencionado por @Martijn Pieters. Daí o código original.
Além disso, resolvi esse problema passando por referência, veja minha própria resposta.
"""
Sound API
"""
def get_audio_callback(pt):
def callback(in_data, frame_count, time_info, status):
"""
This is the callback function for sound API
In each call, synthesized data is dumpped into the sound buffer
"""
wave = np.ndarray((frame_count, 2))
for i in range(frame_count):
ind = (i+pt) % n
wave[i,0] = float(x[ind]) * 2
wave[i,1] = float(y[ind]) * 2
pt = pt + frame_count
return (encode(wave), pyaudio.paContinue)
return callback
p = pyaudio.PyAudio()
pt = 0
stream = p.open(format=pyaudio.paFloat32,
channels=2,
rate=RATE,
output=True,
stream_callback=get_audio_callback(pt))