dpg-examples
dpg-examples copied to clipboard
Plot_ Update_ Time_ How to implement microphone recording with data
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))
https://github.com/my1e5/dpg-examples/blob/main/plots/plot_update_time_data.py