dpg-examples icon indicating copy to clipboard operation
dpg-examples copied to clipboard

Plot_ Update_ Time_ How to implement microphone recording with data

Open monkeycc opened this issue 1 year ago • 0 comments

I want to use DearPyGui to complete it But it's unclear how to port to DearPyGui

import queue
import sys

from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
import numpy as np
import sounddevice as sd


channels = [1]
window = 200
interval = 30
downsample = 10

mapping = [c - 1 for c in channels]
q = queue.Queue()


def audio_callback(indata, frames, time, status):

    if status:
        print(status, file=sys.stderr)

    q.put(indata[::downsample, mapping])


def update_plot(frame):

    global plotdata
    while True:
        try:
            data = q.get_nowait()
        except queue.Empty:
            break
        shift = len(data)
        plotdata = np.roll(plotdata, -shift, axis=0)
        plotdata[-shift:, :] = data
    for column, line in enumerate(lines):
        line.set_ydata(plotdata[:, column])
    return lines


try:
    device_info = sd.query_devices(None, "input")
    samplerate = device_info["default_samplerate"]

    length = int(window * samplerate / (1000 * downsample))
    plotdata = np.zeros((length, len(channels)))

    fig, ax = plt.subplots()
    lines = ax.plot(plotdata)
    if len(channels) > 1:
        ax.legend(
            [f"thoroughfare {c}" for c in channels],
            loc="lower left",
            ncol=len(channels),
        )
    ax.axis((0, len(plotdata), -1, 1))
    ax.set_yticks([0])
    ax.yaxis.grid(True)
    ax.tick_params(
        bottom=False,
        top=False,
        labelbottom=False,
        right=False,
        left=False,
        labelleft=False,
    )
    fig.tight_layout(pad=0)

    stream = sd.InputStream(
        device=None,
        channels=max(channels),
        samplerate=samplerate,
        callback=audio_callback,
    )
    ani = FuncAnimation(fig, update_plot, interval=interval, blit=True)
    with stream:
        plt.show()
except Exception as e:
    print(type(e).__name__ + ": " + str(e))

微信截图_20230917165351

https://github.com/my1e5/dpg-examples/blob/main/plots/plot_update_time_data.py

monkeycc avatar Jan 26 '24 08:01 monkeycc