import nextcord from nextcord.ext import commands import os from os import path import asyncio from pydub import AudioSegment import numpy as np import speech_recognition as sr import whisper def prepaudio(audiofile): st = sr.Recognizer() oggfile = AudioSegment.from_ogg(audiofile) oggfile.export("audio.wav", format="wav") convertemessage = sr.AudioFile("audio.wav") with convertemessage as sounds: transcribeaudo = st.record(sounds) return transcribeaudo class transcription(commands.Cog): def __init__(self, bot: commands.Bot): self.bot = bot self.st = sr.Recognizer() self.model = whisper.load_model("base") @nextcord.message_command(name="Transcribe Using Whisper") async def transcribewhisper(self, interaction: nextcord.Interaction, message: nextcord.Message): await interaction.response.defer(ephemeral='true') await message.attachments[0].save("audio.ogg") oggfile = AudioSegment.from_ogg("audio.ogg") oggfile.export("audio.mp3", format="mp3") embed=nextcord.Embed(title="Audio Transcription",description=self.model.transcribe("audio.mp3")["text"], color=0x3584e4) embed.set_author(name=message.author.display_name, url=message.jump_url, icon_url=message.author.display_avatar) embed.set_footer(text="Accuracy not guaranteed") await interaction.edit_original_message(embed=embed) os.remove("audio.ogg") os.remove("audio.mp3") @nextcord.message_command(name="Transcribe Using Google") async def transcribegoogle(self, interaction: nextcord.Interaction, message: nextcord.Message): try: await interaction.response.defer(ephemeral='true') await message.attachments[0].save("audio.ogg") # WARNING Google is propritary, consider disabling however sphynix is currently not very good so this provides an option embed=nextcord.Embed(title="Audio Transcription",description=self.st.recognize_google(prepaudio("audio.ogg")), color=0x3584e4) embed.set_author(name=message.author.display_name, url=message.jump_url, icon_url=message.author.display_avatar) embed.set_footer(text="Accuracy not guaranteed") await interaction.edit_original_message(embed=embed) await asyncio.sleep(3) os.remove("audio.ogg") os.remove("audio.wav") except Exception as e: await interaction.edit_original_message(content=f'an error appears to have occoured please report it to the developer: {e}') def setup(bot: commands.Bot): bot.add_cog(transcription(bot))