Как исправить мой аудиовизуализатор Python Flet, который не работает без ошибок в терминалеPython

Программы на Python
Anonymous
Как исправить мой аудиовизуализатор Python Flet, который не работает без ошибок в терминале

Сообщение Anonymous »

Название: Аудио воспроизводится, но визуализация спектра не отображается в Flet Audio Visualizer
Я работаю над аудиовизуализатором с использованием платформы Flet. Звук воспроизводится правильно, но визуализация спектра не отображается. Вот мой код:

Код: Выделить всё

import flet as ft
import numpy as np
from pydub import AudioSegment
from pydub.utils import make_chunks
import matplotlib.pyplot as plt
import io
import threading
import pygame
import queue

# Audio settings
sample_rate = 44100
chunk_size = 1024

class AudioVisualizer(ft.Container):
def __init__(self, file_path: str) -> None:
super().__init__()
self.file_path = file_path
self.image = ft.Image(src=io.BytesIO(), width=800, height=400)
self.page = None
self.audio_data = self.load_audio()
self.audio_queue = queue.Queue()
self.start_visualization()

def load_audio(self):
audio = AudioSegment.from_mp3(self.file_path)
audio = audio.set_frame_rate(sample_rate)
audio_data = np.array(audio.get_array_of_samples())
audio_data = audio_data / np.max(np.abs(audio_data))  # Normalize
return audio_data

def update_visualization(self, audio_data):
try:
plt.figure(figsize=(8, 4))
plt.plot(audio_data)
plt.ylim(-1, 1)
plt.gca().set_facecolor('white')
buf = io.BytesIO()
plt.savefig(buf, format='png', facecolor='white')  # Set figure background to white
buf.seek(0)
self.image.src = buf
if self.page:
self.page.update()  # Update the Flet image control
else:
print("Page reference is not set.")
plt.close()
except Exception as e:
print(f"Error in update_visualization: {e}")

def start_visualization(self):
try:
self.visualization_thread = threading.Thread(target=self.visualize_audio, daemon=True)
self.visualization_thread.start()
print("Visualization thread started.")
self.play_audio()
except Exception as e:
print(f"Error in start_visualization: {e}")

def visualize_audio(self):
chunks = make_chunks(self.audio_data, chunk_size)
for chunk in chunks:
self.audio_queue.put(chunk)
self.audio_queue.put(None)  # Signal to stop the update loop

def play_audio(self):
try:
pygame.mixer.init()
pygame.mixer.music.load(self.file_path)
pygame.mixer.music.play()
print("Audio playback started.")
except Exception as e:
print(f"Error in play_audio: {e}")

def update_loop(self):
try:
while True:
audio_data = self.audio_queue.get()
if audio_data is None:
break
self.update_visualization(audio_data)
except Exception as e:
print(f"Error in update_loop: {e}")

def main(page: ft.Page) -> None:
try:
audio_file_path = "C:\\Users\\Administrator\\Desktop\\your_music_file.mp3"
visualizer = AudioVisualizer(audio_file_path)

visualizer.page = page

# Add controls to the page
page.add(
ft.Container(
content=visualizer.image,
alignment=ft.alignment.center,
expand=True,
)
)
page.update()
print("Page updated with visualizer.")

# Start the update loop in the main thread
visualizer.update_loop()
except Exception as e:
print(f"Error in main: {e}")

ft.app(target=main)
Я перепробовал все, что мог придумать, но не могу добиться отображения спектра. Звук воспроизводится без проблем, и в терминале нет ошибок.
Что я проверял/пробовал:
Проверил, что звук данные загружаются и нормализуются правильно.
Подтверждено, что метод update_visualization вызывается с фрагментами аудиоданных.
Убедилось, что pygame.mixer правильно инициализирован и звук воспроизводится.
Вопрос :
Почему не отображается визуализация спектра и как это исправить?
Будем очень благодарны за любую помощь или подсказки. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... -a-error-i

Вернуться в «Python»