Ошибка значения: несоответствие формы: объекты не могут быть переданы в одну форму - PullRequest
0 голосов
/ 27 мая 2020

Я делаю аудиовизуализатор в реальном времени в 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```

...