Воспроизведение аудиосообщения из юзербота в telegram

Рейтинг: 0Ответов: 1Опубликовано: 25.08.2023

Пытаюсь подгрузить файл голосового сообщения из диалога по юзер апи. Хендлер получает файл из сообщения и пытается его воспроизвести, но ловит ошибку, якобы файл битый. Если подложить любой другой файл .ogg, воспроизведение пойдёт нормально, значит дело в каких-то хитростях тг. Сам файл без проблем воспроизводится плеером при открытии из проводника. Не знаю с какой стороны к этому добру подкопаться. Может быть, можно как-то перекодировать его в норм формат.

import os
import pygame
from pyrogram import Client, filters
from pyrogram.handlers import MessageHandler
from pyrogram.types import Message

api_id = os.getenv('API_ID')
api_hash = os.getenv('API_HASH')
DIALOG_CHAT_ID = os.getenv('DIALOG_CHAT_ID')
app = Client(name = 'me_client', api_id=api_id, api_hash=api_hash)

@app.on_message(filters.chat(DIALOG_CHAT_ID))

def voice_message(client: Client, message: Message):
    pygame.init()
    client.download_media(message.voice, file_name="voice.ogg")  
    pygame.mixer.init()
    pygame.mixer.music.load("downloads\\voice.ogg")
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        continue
app.add_handler(MessageHandler(voice_message))
app.run()

Ответы

▲ 0

Решение, как всегда, случается только после того, как спросишь, как долго бы до этого ни мучался молча. Заюзал конвертацию, вроде работает.

def voice_message(client: Client, message: Message):
    pygame.init()
    client.download_media(message.voice, file_name="voice.ogg")  
    convert("downloads\\voice.ogg")
    pygame.mixer.init()
    pygame.mixer.music.load("output.wav")
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        continue

def convert(input_file):
    audio = AudioSegment.from_file(input_file, format="ogg")
    output_file = "output.wav"
    audio.export(output_file, format="wav")