diff --git a/voice_recognition.py b/voice_recognition.py index d6b9db5..00eb40b 100644 --- a/voice_recognition.py +++ b/voice_recognition.py @@ -32,8 +32,11 @@ SAMPLE_WIDTH = OpusDecoder.SAMPLE_SIZE // OpusDecoder.CHANNELS SAMPLING_RATE = OpusDecoder.SAMPLING_RATE +#rotate file after there is 0.5s between last received pcm for user. +#delete messsages after user disconnect + logger = logging.getLogger("discord") -location = "/home/pi/Conjurer/" +location = "/home/pi/Conjurer/transcripts/" class WaveWriter: @@ -43,7 +46,7 @@ class WaveWriter: self.present_file_id = 0 self.file_name_past = None - self.file_name_present = location + self.username + str(self.present_file_id) + self.file_name_present = location + self.username + "_" + str(self.present_file_id) self.transcript_file_present : wave.Wave_write = wave.open( self.file_name_present, "wb" ) @@ -51,7 +54,7 @@ class WaveWriter: self.transcript_file_present.setsampwidth(SAMPLE_WIDTH) self.transcript_file_present.setframerate(SAMPLING_RATE) - self.file_name_future = location + self.username + str(self.present_file_id + 1) + self.file_name_future = location + self.username + "_" + str(self.present_file_id + 1) self.transcript_file_future : wave.Wave_write = wave.open( self.file_name_future, "wb" ) @@ -66,9 +69,7 @@ class WaveWriter: self.present_file_id += 1 self.file_name_present = self.file_name_future self.transcript_file_present = self.transcript_file_future - self.transcript_file_future = ( - location + self.username + str(self.present_file_id + 1) - ) + self.file_name_future = location + self.username + "_" + str(self.present_file_id + 1) self.transcript_file_future : wave.Wave_write = wave.open( self.file_name_future, "wb" ) @@ -106,12 +107,15 @@ class SRBuffer(voice_recv.AudioSink): def on_user_disconnect(self,username): self.wavewriter[username].cleanup() + self.wavewriter.pop(username) + + def rotate_user(self,username): + self.wavewriter[username].rotate() def wants_opus(self) -> bool: return False def write(self, user, data) -> None: - logger.info("user: %s", user) self.wavewriter[str(user.id)].writeframes(data.pcm) def cleanup(self) -> None: @@ -160,10 +164,14 @@ class Transcriber(commands.Cog): async def on_voice_state_update(self, user, before, after): if before.channel is None: logger.info("User %s connected to channel %s", user, after.channel.name) + self.wsink.on_user_connect(user.id) elif after.channel is None: logger.info("User %s disconnected from channel %s", user, before.channel.name) + self.wsink.on_user_disconnect(user.id) + elif after.self_mute or after.mute: + self.wsink.rotate_user(user.id) else: - logger.info("User VC status changed %s", user) + logger.info("User VC status changed %s", user.id) logger.info("Before %s", before) logger.info("After %s", after)