Улучшите качество звука на Python: графики потокового аудио в реальном времени

Привет, уважаемые любители Python! Сегодня мы собираемся погрузиться в захватывающий мир потокового аудиографика в реальном времени. Являетесь ли вы энтузиастом музыки, звукорежиссером или просто любите возиться с кодом, эта статья покажет вам несколько методов создания захватывающих аудиовизуализаций на Python. Так что пристегнитесь и приготовьтесь насладиться потрясающим звуком!

Метод 1: Matplotlib и NumPy
Давайте начнем с классической комбинации Matplotlib и NumPy. Эти библиотеки предоставляют мощные инструменты для визуализации данных и численных вычислений. Используя модуль анимации Matplotlib, мы можем создать аудиографик в реальном времени, который динамически обновляется по мере продвижения аудиопотока. Вот фрагмент кода, который поможет вам начать:

import numpy as np
import matplotlib.pyplot as plt
import sounddevice as sd
duration = 10  # Duration of the audio stream in seconds
def audio_callback(indata, frames, time, status):
    # Process the audio data here
    # Update the plot with the new data
stream = sd.InputStream(callback=audio_callback)
stream.start()
# Set up the plot
fig, ax = plt.subplots()
line, = ax.plot([], [])
# Animation function
def animate(i):
    # Get the audio data
    data = stream.read(duration * stream.sample_rate)
    # Process the audio data here
    # Update the plot
    line.set_data(x_values, y_values)
    ax.relim()
    ax.autoscale_view()
ani = animation.FuncAnimation(fig, animate, interval=10)
plt.show()

Метод 2: PyAudio и PyQtGraph
Другая популярная комбинация — PyAudio и PyQtGraph. PyAudio предоставляет интерфейс для потоковой передачи звука из различных источников, а PyQtGraph предлагает быстрые и эффективные возможности построения графиков. Давайте посмотрим, как мы можем создать живой аудиограф с помощью этих библиотек:

import pyaudio
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
duration = 10  # Duration of the audio stream in seconds
def audio_callback(in_data, frame_count, time_info, status):
    # Process the audio data here
    # Update the plot with the new data
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=44100,
                input=True,
                frames_per_buffer=1024,
                stream_callback=audio_callback)
# Set up the plot
app = QtGui.QApplication([])
win = pg.GraphicsWindow(title="Audio Graph")
plot = win.addPlot(title="Live Audio Graph")
curve = plot.plot()
# Update the plot
def update():
    # Get the audio data
    data = stream.read(duration * 44100)
    # Process the audio data here
    # Update the plot
    curve.setData(x_values, y_values)
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(10)
if __name__ == '__main__':
    QtGui.QApplication.instance().exec_()

Метод 3: Librosa и Plotly
Если вас интересуют расширенные возможности обработки звука и интерактивные визуализации, Librosa и Plotly — отличный выбор. Librosa специализируется на аудиоанализе, а Plotly предоставляет интерактивные и настраиваемые графики. Вот пример того, как вы можете создать живой аудиографик с помощью этих библиотек:

import librosa
import plotly.graph_objects as go
duration = 10  # Duration of the audio stream in seconds
def audio_callback(indata, frames, time, status):
    # Process the audio data here
    # Update the plot with the new data
stream = librosa.stream(input=True)
# Set up the plot
fig = go.FigureWidget()
fig.update_layout(title="Live Audio Graph")
# Update the plot
def update():
    # Get the audio data
    data = next(stream, None)
    # Process the audio data here
    # Update the plot
    fig.data[0].x = x_values
    fig.data[0].y = y_values
# Start the update loop
fig.show()
fig.update_layout(updatemenus=[dict(type="buttons",
                                    buttons=[dict(label="Start",
                                                  method="animate",
                                                  args=[None, {"frame": {"duration": 10, "redraw": True},
                                                               "fromcurrent": True, "transition": {"duration": 0}}]),
                                             dict(label="Stop",
                                                  method="animate",
                                                  args=[[None], {"frame": {"duration": 0, "redraw": False},
                                                                 "mode": "immediate",
                                                                 "transition": {"duration": 0}}])])])
fig.frames = []
if __name__ == '__main__':
    while True:
        update()

Это всего лишь несколько методов создания графиков потокового аудио в Python на Python. В каждом из этих методов используются разные библиотеки и подходы, что позволяет вам выбрать тот, который лучше всего соответствует вашим потребностям и предпочтениям.

Не забудьте адаптировать примеры кода к вашим конкретным требованиям, таким как источник звука и методы обработки. Имея в своем распоряжении эти методы, вы сможете визуализировать свой звук в режиме реального времени и вывести свои аудиопроекты на Python на новый уровень!