Я делаю аудиовизуализатор в реальном времени в python с помощью pyaudio и использую matplotlib для построения графика. Когда код достигает строки, показанной в коде, он дает ошибку Value: несоответствие формы: объекты не могут быть переданы в одну форму. , а также сообщает, что в обратном вызове Tkinter было исключение . Я пробовал искать везде, но ничего не нашел об этом. Также, когда я удаляю строку, вызывающую эту ошибку, код работает нормально. Есть идеи, как это можно исправить?
Код:
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=channelcount,
rate=int(device_info["defaultSampleRate"]),
input=True,
frames_per_buffer=defaultframes,
input_device_index=device_info["index"],
as_loopback=True)
fig, (ax, ax2) = plt.subplots(2, figsize=(15, 8))
x = np.arange(0, 2 * CHUNK, 2)
x_fft = np.linspace(0, device_info["defaultSampleRate"], CHUNK)
line, = ax.plot(x, np.random.rand(CHUNK), '-', lw=2)
line_fft, = ax2.semilogx(x_fft, np.random.rand(CHUNK), '-', lw=2)
offset = 2000
ax.set_ylim(0, offset)
ax.set_xlim(0, 2 * CHUNK)
plt.setp(ax, xticks=[0, CHUNK, 2 * CHUNK], yticks=[0, 128, 255])
ax2.set_xlim(20, device_info["defaultSampleRate"] / 2)
ax2.set_ylim(0, 20)
fig.show()
while True:
data = stream.read(CHUNK)
data_int = struct.unpack(str(2 * CHUNK) + 'h', data)
line.set_ydata(np.array(data_int)) <------------------------------- ERROR HAPPENS HERE
y_fft = fft(data_int)
line_fft.set_ydata(np.abs(y_fft[0:CHUNK]) * 2 / (256 * CHUNK))
fig.canvas.draw()
fig.canvas.flush_events()
Ошибка:
Traceback (most recent call last):
File "E:\Python\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\_backend_tk.py", line 259, in resize
self.draw()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 9, in draw
super(FigureCanvasTkAgg, self).draw()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\backend_agg.py", line 393, in draw
self.figure.draw(self.renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\figure.py", line 1736, in draw
renderer, self, artists, self.suppressComposite)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\image.py", line 137, in _draw_list_compositing_images
a.draw(renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\axes\_base.py", line 2630, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\image.py", line 137, in _draw_list_compositing_images
a.draw(renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\lines.py", line 759, in draw
self.recache()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\lines.py", line 679, in recache
self._xy = np.column_stack(np.broadcast_arrays(x, y)).astype(float)
File "<__array_function__ internals>", line 6, in broadcast_arrays
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\numpy\lib\stride_tricks.py", line 264, in broadcast_arrays
shape = _broadcast_shape(*args)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\numpy\lib\stride_tricks.py", line 191, in _broadcast_shape
b = np.broadcast(*args[:32])
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Exception in Tkinter callback
Traceback (most recent call last):
File "E:\Python\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "E:\Python\lib\tkinter\__init__.py", line 749, in callit
func(*args)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\_backend_tk.py", line 270, in idle_draw
self.draw()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 9, in draw
super(FigureCanvasTkAgg, self).draw()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\backend_agg.py", line 393, in draw
self.figure.draw(self.renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\figure.py", line 1736, in draw
renderer, self, artists, self.suppressComposite)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\image.py", line 137, in _draw_list_compositing_images
a.draw(renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\axes\_base.py", line 2630, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\image.py", line 137, in _draw_list_compositing_images
a.draw(renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\lines.py", line 759, in draw
self.recache()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\lines.py", line 679, in recache
self._xy = np.column_stack(np.broadcast_arrays(x, y)).astype(float)
File "<__array_function__ internals>", line 6, in broadcast_arrays
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\numpy\lib\stride_tricks.py", line 264, in broadcast_arrays
shape = _broadcast_shape(*args)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\numpy\lib\stride_tricks.py", line 191, in _broadcast_shape
b = np.broadcast(*args[:32])
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Traceback (most recent call last):
File "E:/PycharmProjects/LedProject/test3.py", line 112, in <module>
fig.canvas.draw()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 9, in draw
super(FigureCanvasTkAgg, self).draw()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\backends\backend_agg.py", line 393, in draw
self.figure.draw(self.renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\figure.py", line 1736, in draw
renderer, self, artists, self.suppressComposite)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\image.py", line 137, in _draw_list_compositing_images
a.draw(renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\axes\_base.py", line 2630, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\image.py", line 137, in _draw_list_compositing_images
a.draw(renderer)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\lines.py", line 759, in draw
self.recache()
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\matplotlib\lines.py", line 679, in recache
self._xy = np.column_stack(np.broadcast_arrays(x, y)).astype(float)
File "<__array_function__ internals>", line 6, in broadcast_arrays
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\numpy\lib\stride_tricks.py", line 264, in broadcast_arrays
shape = _broadcast_shape(*args)
File "E:\PycharmProjects\LedProject\venv\lib\site-packages\numpy\lib\stride_tricks.py", line 191, in _broadcast_shape
b = np.broadcast(*args[:32])
ValueError: shape mismatch: objects cannot be broadcast to a single shape```