Skip to content

Commit

Permalink
revert to default mic buffer size, add ui spectrum movement simulation
Browse files Browse the repository at this point in the history
  • Loading branch information
lef-fan committed Feb 15, 2024
1 parent 500ccc8 commit 283ceae
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 37 deletions.
2 changes: 1 addition & 1 deletion components/mic.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def get_recording(self):

def get_chunk(self):
# return np.frombuffer(self._chunk_buffer, np.float32).flatten()
return np.frombuffer(self._recording_buffer[-(self.buffer_size*4)*2:], np.float32).flatten()
return np.frombuffer(self._recording_buffer[-(self.buffer_size*4):], np.float32).flatten()

def start_mic(self):
# self._chunk_buffer = bytes()
Expand Down
59 changes: 30 additions & 29 deletions components/ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,35 +70,36 @@ def copy_text(self):

def update_spectrum_viz(self, user_name, data, time_color_warning=0):
if user_name == "You":
spectrum = np.abs(scipy.fft.fft(data))
amplitude = spectrum.mean()
max_percentage = 0.85
max_radius = min(self.spectrum_widget.winfo_reqwidth(), self.spectrum_widget.winfo_reqheight()) * max_percentage / 2
sensitivity_factor = 1500
scaled_radius = min(amplitude * sensitivity_factor, max_radius)
self.radius = int(0.8 * self.radius + 0.2 * max(scaled_radius, self.min_radius))
self.spectrum_widget.delete("all")
current_window_width = self.root.winfo_width()
current_window_height = self.root.winfo_height()
self.center_x, self.center_y = int(int(current_window_width)/2), int(int(current_window_height)/4)
oval_coords = (
self.center_x - self.radius,
self.center_y - self.radius,
self.center_x + self.radius,
self.center_y + self.radius
)
if 0 < time_color_warning < 0.5:
color = "#FF0000"
elif 0.5 < time_color_warning < 1:
color = "#B93C3C"
elif 1 < time_color_warning < 1.5:
color = "#8A4B4B"
elif 1.5 < time_color_warning < 2:
color = "#584848"
else:
color = "#FFFFFF"
self.spectrum_widget.create_oval(oval_coords, outline=color, width=2, fill=color)
self.spectrum_widget.update()
for i in range(3):
spectrum = np.abs(scipy.fft.fft(data))
amplitude = spectrum.mean()
max_percentage = 0.85
max_radius = min(self.spectrum_widget.winfo_reqwidth(), self.spectrum_widget.winfo_reqheight()) * max_percentage / 2
sensitivity_factor = 1000 + (500 * i)
scaled_radius = min(amplitude * sensitivity_factor, max_radius)
self.radius = int(0.8 * self.radius + 0.2 * max(scaled_radius, self.min_radius))
self.spectrum_widget.delete("all")
current_window_width = self.root.winfo_width()
current_window_height = self.root.winfo_height()
self.center_x, self.center_y = int(int(current_window_width)/2), int(int(current_window_height)/4)
oval_coords = (
self.center_x - self.radius,
self.center_y - self.radius,
self.center_x + self.radius,
self.center_y + self.radius
)
if 0 < time_color_warning < 0.5:
color = "#FF0000"
elif 0.5 < time_color_warning < 1:
color = "#B93C3C"
elif 1 < time_color_warning < 1.5:
color = "#8A4B4B"
elif 1.5 < time_color_warning < 2:
color = "#584848"
else:
color = "#FFFFFF"
self.spectrum_widget.create_oval(oval_coords, outline=color, width=2, fill=color)
self.spectrum_widget.update()
elif user_name == "Aria":
self.spectrum_widget.delete("all")
self.spectrum_widget.update()
Expand Down
6 changes: 3 additions & 3 deletions components/vad.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,16 @@ def __init__(self, params=None):
speech_pad_ms=30
)

def check(self, mic_chunk, mic_buffer_size, mic_samplerate):
def check(self, mic_chunk, chunk_time):
speech_dict = self.vad_iterator(mic_chunk, return_seconds=False)
if speech_dict is not None:
if "start" in speech_dict:
self.no_voice_sec = 0
elif "end" in speech_dict:
self.no_voice_sec += mic_buffer_size / mic_samplerate
self.no_voice_sec += chunk_time
else:
if self.no_voice_sec != 0:
self.no_voice_sec += mic_buffer_size / mic_samplerate
self.no_voice_sec += chunk_time
if self.no_voice_sec > self.no_voice_wait_sec:
self.no_voice_sec = 0
self.vad_iterator.reset_states()
Expand Down
2 changes: 1 addition & 1 deletion configs/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"Mic": {
"params": {
"samplerate": 16000,
"buffer_size": 256,
"buffer_size": 512,
"channels": 1,
"device": "default"
}
Expand Down
6 changes: 3 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ def main(ui, config):
print("\nShutting down...")
break
mic_chunk = mic.get_chunk()
if len(mic_chunk) == mic.buffer_size*2:
if len(mic_chunk) == mic.buffer_size:
if not (mic_chunk==mic_last_chunk).all():
mic_last_chunk = deepcopy(mic_chunk)
ui.update_spectrum_viz("You", mic_chunk, time_color_warning=vad.no_voice_wait_sec - vad.no_voice_sec)
vad_status = vad.check(mic_chunk, mic.buffer_size*2, mic.samplerate)
vad_status = vad.check(mic_chunk, mic.buffer_size / mic.samplerate)
if vad_status is None:
mic.reset_recording()
skip_sleep = True
Expand Down Expand Up @@ -94,7 +94,7 @@ def main(ui, config):
# logging.info("respond starts in: " + str(vad.no_voice_wait_sec - vad.no_voice_sec))
pass
if not skip_sleep:
time.sleep(mic.buffer_size*2 / mic.samplerate)
time.sleep(mic.buffer_size / mic.samplerate)

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Aria.")
Expand Down

0 comments on commit 283ceae

Please sign in to comment.