DearPyGui
DearPyGui copied to clipboard
There is an example, I don't know how to complete it
There is an example, I don't know how to complete it Read microphone, real-time audio map
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"通道 {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))