73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
import os
|
|
from pydub import AudioSegment
|
|
import whisper
|
|
|
|
def audio_add(self):
|
|
|
|
self.model = whisper.load_model("base")
|
|
|
|
@self.bot.message_handler(content_types=['audio', 'voice']) #, 'document'
|
|
def handle_audio(message):
|
|
try:
|
|
chat_id = message.chat.id
|
|
file_info = None
|
|
audio_path = None
|
|
|
|
if message.content_type == 'audio':
|
|
file_info = self.bot.get_file(message.audio.file_id)
|
|
audio_path = f"/tmp/audio/{message.audio.file_id}.mp3"
|
|
elif message.content_type == 'voice':
|
|
file_info = self.bot.get_file(message.voice.file_id)
|
|
audio_path = f"/tmp/audio/{message.voice.file_id}.ogg"
|
|
|
|
if file_info:
|
|
downloaded_file = self.bot.download_file(file_info.file_path)
|
|
|
|
# Ensure the directory exists
|
|
os.makedirs(os.path.dirname(audio_path), exist_ok=True)
|
|
|
|
# Save the audio file
|
|
with open(audio_path, 'wb') as new_file:
|
|
new_file.write(downloaded_file)
|
|
|
|
#bot.send_message(chat_id, f"Audio received and saved successfully to {audio_path}.")
|
|
print(f"Audio received and saved to {audio_path}")
|
|
|
|
|
|
# Convert to WAV format if necessary
|
|
wav_path = audio_path.replace('.mp3', '.wav').replace('.ogg', '.wav')
|
|
if audio_path.endswith('.mp3') or audio_path.endswith('.ogg'):
|
|
audio = AudioSegment.from_file(audio_path)
|
|
audio.export(wav_path, format='wav')
|
|
else:
|
|
wav_path = audio_path
|
|
|
|
# Transcribe audio using Whisper
|
|
result = self.model.transcribe(wav_path)
|
|
transcription = result["text"]
|
|
|
|
self.bot.send_message(chat_id, transcription, parse_mode='Markdown')
|
|
print(f"Audio received and saved to {audio_path}")
|
|
print(f"Transcription: {transcription}")
|
|
|
|
text2 = self.text_process(self,transcription)
|
|
|
|
print(f"Processed text {chat_id}: {text2}")
|
|
|
|
if len(text2)>0:
|
|
self.bot.send_message(chat_id, text2)
|
|
|
|
|
|
|
|
except Exception as e:
|
|
error_message = {
|
|
'app': 'Telegram Bot',
|
|
'function': 'handle_audio',
|
|
'msg': 'Failed to process audio file',
|
|
'exception_type': type(e).__name__,
|
|
'exception_message': str(e)
|
|
}
|
|
self.send_error_to_telegram(chat_id, error_message)
|
|
print(f"Error processing audio file: {e}")
|
|
|