Hack na hacku hackiem pogania

This commit is contained in:
2024-09-20 13:16:18 +02:00
parent 0ed0f60b9f
commit dbca290979
+28 -16
View File
@@ -77,7 +77,6 @@ class WaveWriter:
self.queue.put(operation) self.queue.put(operation)
def writeframes(self, pcmdata): def writeframes(self, pcmdata):
logger.info(self.transcript_file_present)
self.transcript_file_present.writeframes(pcmdata) self.transcript_file_present.writeframes(pcmdata)
def cleanup(self): def cleanup(self):
@@ -98,7 +97,7 @@ class SRBuffer(voice_recv.AudioSink):
self.wavewriter = {} self.wavewriter = {}
def on_user_connect(self, username): def on_user_connect(self, username):
self.wavewriter[str(username.id)] = [WaveWriter(username, self.queue), time.time_ns(), False, False] self.wavewriter[str(username.id)] = [WaveWriter(username, self.queue), time.time_ns(), time.time_ns(), False, False]
def on_user_disconnect(self,username): def on_user_disconnect(self,username):
self.wavewriter[str(username.id)].cleanup() self.wavewriter[str(username.id)].cleanup()
@@ -108,12 +107,12 @@ class SRBuffer(voice_recv.AudioSink):
return False return False
def write(self, user, data) -> None: def write(self, user, data) -> None:
#logger.info("User %s", user)
if user: if user:
self.wavewriter[str(user.id)][0].writeframes(data.pcm) self.wavewriter[str(user.id)][0].writeframes(data.pcm)
self.wavewriter[str(user.id)][1] = time.time_ns() self.wavewriter[str(user.id)][1] = time.time_ns() #time from last write
self.wavewriter[str(user.id)][2] = True self.wavewriter[str(user.id)][2] = time.time_ns() #time since last rotation
self.wavewriter[str(user.id)][3] = True self.wavewriter[str(user.id)][3] = True
self.wavewriter[str(user.id)][4] = True
def cleanup(self) -> None: def cleanup(self) -> None:
try: try:
@@ -125,9 +124,15 @@ class SRBuffer(voice_recv.AudioSink):
class TranscriptionOutput(commands.Cog): class TranscriptionOutput(commands.Cog):
def __init__(self, bot): def __init__(self, bot, queue):
pass self.bot = bot
self.queue = queue
self.work = False
@discord.ext.tasks.loop()
def scan_loop(self):
while self.work:
time.sleep(1.0)
logger.info("Output scan loop exited succesfully")
class Transcriber(commands.Cog): class Transcriber(commands.Cog):
def __init__(self, bot): def __init__(self, bot):
@@ -135,7 +140,7 @@ class Transcriber(commands.Cog):
self.threads = [] self.threads = []
self.comm_queue = Queue() self.comm_queue = Queue()
self.wsink = SRBuffer(self.comm_queue) self.wsink = SRBuffer(self.comm_queue)
self.output_handler = TranscriptionOutput(self.bot, self.comm_queue)
async def transcribe(self,file_url): async def transcribe(self,file_url):
config = aai.TranscriptionConfig(speaker_labels=True, language_code="pl") config = aai.TranscriptionConfig(speaker_labels=True, language_code="pl")
@@ -148,6 +153,7 @@ class Transcriber(commands.Cog):
async def test(self, ctx): async def test(self, ctx):
logger.info("Attempt transcribe") logger.info("Attempt transcribe")
vc = None vc = None
if self.bot.voice_clients: if self.bot.voice_clients:
if isinstance(self.bot.voice_clients[0], voice_recv.VoiceRecvClient): if isinstance(self.bot.voice_clients[0], voice_recv.VoiceRecvClient):
logger.info("Already transcribing") logger.info("Already transcribing")
@@ -158,6 +164,9 @@ class Transcriber(commands.Cog):
logger.info("Connected") logger.info("Connected")
vc = await ctx.author.voice.channel.connect(cls=voice_recv.VoiceRecvClient) vc = await ctx.author.voice.channel.connect(cls=voice_recv.VoiceRecvClient)
logger.info(self.bot.voice_clients) logger.info(self.bot.voice_clients)
self.output_handler.work = True
self.output_handler.scan_loop.start()
vc.listen(self.wsink) vc.listen(self.wsink)
self.check_data.start() self.check_data.start()
@@ -165,16 +174,17 @@ class Transcriber(commands.Cog):
async def check_data(self): async def check_data(self):
for item in self.wsink.wavewriter.values(): for item in self.wsink.wavewriter.values():
logger.info("Item %s", item) logger.info("Item %s", item)
if not item[2]: if not item[3]:
timediff = time.time_ns() - item[1] timediff_rotation = time.time_ns() - item[2]
if timediff > 3000149433 and item[3]: #timeout occured data to transmit exists timediff_write = time.time_ns() -item[1]
logger.info("File rotation at %s", timediff) if timediff_rotation > 3000149433 and timediff_write > 500014943 and item[4]:
item[3] = False #buffer rotated logger.info("File rotation time since last write %s", timediff_write/1e9)
logger.info("File rotation time since last rotation %s", timediff_rotation/1e9)
item[4] = False
item[0].rotate() item[0].rotate()
#temporary - will be put in separate thread #temporary - will be put in separate thread
await self.transcribe(item[0].file_name_past) await self.transcribe(item[0].file_name_past)
#ensure only files with minimum length are sent to transcription item[4] = False
item[2] = False
logger.info("Diff : %s", time.time_ns() - item[1]) logger.info("Diff : %s", time.time_ns() - item[1])
@tasks.loop(seconds=1) @tasks.loop(seconds=1)
@@ -206,6 +216,8 @@ class Transcriber(commands.Cog):
@commands.command(name="stop_transcribe") @commands.command(name="stop_transcribe")
async def stop(self, ctx): async def stop(self, ctx):
self.output_handler.work = False
self.check_data.stop() self.check_data.stop()
await ctx.voice_client.disconnect() await ctx.voice_client.disconnect()