diff --git a/sr_example.py b/sr_example.py index 1362457..3c176cf 100644 --- a/sr_example.py +++ b/sr_example.py @@ -78,7 +78,7 @@ else: *, process_cb: Optional[SRProcessDataCB] = None, text_cb: Optional[SRTextCB] = None, - default_recognizer: SRRecognizerMethod = 'google', + default_recognizer: SRRecognizerMethod = 'assemblyai', phrase_time_limit: int = 10, ignore_silence_packets: bool = True, ): diff --git a/voice_example.py b/voice_example.py new file mode 100644 index 0000000..36cec22 --- /dev/null +++ b/voice_example.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import discord +from discord.ext import commands, voice_recv + +discord.opus._load_default() + +bot = commands.Bot(command_prefix=commands.when_mentioned, intents=discord.Intents.all()) + +class Testing(commands.Cog): + def __init__(self, bot): + self.bot = bot + + @commands.command() + async def test(self, ctx): + def callback(user, data: voice_recv.VoiceData): + print(f"Got packet from {user}") + + ## voice power level, how loud the user is speaking + # ext_data = packet.extension_data.get(voice_recv.ExtensionID.audio_power) + # value = int.from_bytes(ext_data, 'big') + # power = 127-(value & 127) + # print('#' * int(power * (79/128))) + ## instead of 79 you can use shutil.get_terminal_size().columns-1 + + vc = await ctx.author.voice.channel.connect(cls=voice_recv.VoiceRecvClient) + vc.listen(voice_recv.BasicSink(callback)) + + @commands.command() + async def stop(self, ctx): + await ctx.voice_client.disconnect() + + @commands.command() + async def die(self, ctx): + ctx.voice_client.stop() + await ctx.bot.close() + +@bot.event +async def on_ready(): + print('Logged in as {0.id}/{0}'.format(bot.user)) + print('------') + await bot.add_cog(Testing(bot)) + +REMOTE_HOST_NAME = "discord" + + +bot.run("NzUxNDQxODgzNDA2MDA4NDEw.Go--wb.Nr28Oo4eYAP1p2XFVHF5uIQfcPD7s_jO2NfMCQ") diff --git a/voice_recognition.py b/voice_recognition.py index d801533..5764dc6 100644 --- a/voice_recognition.py +++ b/voice_recognition.py @@ -20,27 +20,35 @@ FILE_URL = "https://github.com/AssemblyAI-Community/audio-examples/raw/main/2023 logger = logging.getLogger("discord") + +class SRAudioSinkHammerVersion(AudioSink): + def __init__( + self, + *, + process_cb: Optional[SRProcessDataCB] = None, + text_cb: Optional[SRTextCB] = None, + default_recognizer: SRRecognizerMethod = 'google', + phrase_time_limit: int = 10, + ignore_silence_packets: bool = True, +): + super().__init__(None) + self.process_cb: Optional[SRProcessDataCB] = process_cb + self.text_cb: Optional[SRTextCB] = text_cb + self.phrase_time_limmit: int = phrase_time_limit + self.ignore_silence_packets: bool = ignore_silence_packets + + self.default_recognizer: SRRecognizerMethod = default_recognizer + self._stream_data: defaultdict[int, _StreamData] = defaultdict( + lambda: _StreamData(stopper=None, recognizer=sr.Recognizer(), buffer=array.array('B')) + ) + + + class Transcriber(commands.Cog): def __init__(self, bot): self.bot = bot self._last_member = None - - @commands.Cog.listener() - async def on_member_join(self, member): - channel = member.guild.system_channel - if channel is not None: - await channel.send(f'Witaj u Nas {member.mention}.') - - @commands.hybrid_command(name="witaj") - async def witaj(self, ctx, *, member: discord.Member = None): - """Says hello""" - member = member or ctx.author - if self._last_member is None or self._last_member.id != member.id: - await ctx.send(f'Mhm {member.name}~') - else: - await ctx.send(f'Powtarzas sie {member.name}') - self._last_member = member async def transcribe(): config = aai.TranscriptionConfig(speaker_labels=True) @@ -51,7 +59,7 @@ class Transcriber(commands.Cog): ) for utterance in transcript.utterances: print(f"Speaker {utterance.speaker}: {utterance.text}") - @commands.hybrid_command(name="connect_for_transcribe") + @commands.hybrid_command(name="transcribe") async def test(self, ctx): def callback(user, data: voice_recv.VoiceData): print(f"Got packet from {user}") @@ -71,10 +79,5 @@ class Transcriber(commands.Cog): async def stop(self, ctx): await ctx.voice_client.disconnect() - @commands.command(name="kill_transcribe_client") - async def die(self, ctx): - ctx.voice_client.stop() - await ctx.bot.close() - async def setup(bot): await bot.add_cog(Transcriber(bot)) \ No newline at end of file