This repository has been archived on 2021-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
microphonePopcat/soui.py

64 lines
1.8 KiB
Python
Raw Normal View History

2020-11-30 20:47:34 +01:00
import numpy as np
import sounddevice as sd
from time import sleep
2020-11-30 21:32:17 +01:00
from tkinter import Tk, Canvas, Label, PhotoImage
2020-11-30 20:47:34 +01:00
class Microphone:
def __init__(self):
self.buffer = 0.1 # seconds
self.speaking = False
def audio_callback(self, indata, frames, time, status):
volume_norm = np.linalg.norm(indata) * 10
if int(volume_norm) > 2 and not self.speaking:
self.speaking = True
elif int(volume_norm) < 2 and self.speaking:
self.speaking = False
def get_status_speaking(self):
return self.speaking
def repeat(self):
print(self.speaking)
sleep(self.buffer)
return self.repeat()
def start(self):
with sd.InputStream(callback = self.audio_callback):
self.repeat()
class Affichage:
def __init__(self):
self.buffer = 500 # milliseconds
2020-11-30 21:03:14 +01:00
self.speaking = "speaking.png"
self.notspeaking = "not_speaking.png"
2020-11-30 20:47:34 +01:00
def refresh(self):
2020-11-30 21:39:25 +01:00
self.canvas.itemconfig(self.canvas_image, image = PhotoImage(master = self.fenetre, file = self.get_image()))
2020-11-30 20:47:34 +01:00
self.fenetre.update_idletasks()
self.fenetre.after(self.buffer, self.refresh)
2020-11-30 21:32:17 +01:00
def get_image(self):
if Microphone().get_status_speaking():
2020-11-30 21:39:25 +01:00
print("parle")
2020-11-30 21:32:17 +01:00
return self.speaking
else:
2020-11-30 21:39:25 +01:00
print("parle pas")
2020-11-30 21:32:17 +01:00
return self.notspeaking
2020-11-30 20:47:34 +01:00
def start(self):
self.fenetre = Tk()
self.fenetre.title('Microphone')
2020-11-30 21:32:17 +01:00
self.canvas = Canvas(self.fenetre)
self.canvas.configure(width = 1080, height = 2140)
2020-11-30 21:39:25 +01:00
self.canvas_image = self.canvas.create_image(540, 1070, image = PhotoImage(master = self.fenetre, file = self.get_image()))
2020-11-30 20:47:34 +01:00
self.refresh()
self.fenetre.mainloop()
if __name__ == '__main__':
Affichage().start()