mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-15 14:22:13 +00:00
Hack na hacku hackiem pogania
This commit is contained in:
+28
-16
@@ -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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user