Сэмплирование аудио не сохраняет волны (векторы)! - PullRequest
7 голосов
/ 26 марта 2019

Я создал робота Telegram , и одной из его задач является создание семплов из аудиофайлов. Теперь для большинства аудио, которые отправляются на него, образец отлично подходит; как то так:

enter image description here

Однако для некоторых аудиозаписей сэмпл выглядит немного странно:

enter image description here

Как видите, волны в этом файле не показаны ! (Могу вас заверить, что голос не пустой)

Для создания примера я использую pydub (Спасибо, Джеймс !). Вот часть, которую я создаю образец:

song = AudioSegment.from_mp3('song.mp3')
sliced = song[start*1000:end*1000]
sliced.export('song.ogg', format='ogg', parameters=["-acodec", "libopus"])

И затем я отправляю образец, используя метод bot.send_voice. Вот так :

bot.send_voice(
    chat_id=update.message.chat.id,
    voice=open('song.ogg', 'rb'),
    caption=settings.caption,
    parse_mode=ParseMode.MARKDOWN,
    timeout=1000
)

Документация Telegram Bot API гласит:

Используйте этот метод для отправки аудиофайлов, если вы хотите, чтобы клиенты Telegram отобразить файл как воспроизводимое голосовое сообщение. Чтобы это работало, ваш звук должен быть в файле .ogg с кодировкой OPUS (другие форматы могут быть отправлено как аудио или документ).

Вот почему в этой строке кода:

sliced.export('song.ogg', format='ogg', parameters=["-acodec", "libopus"])

Я использовал parameters=["-acodec", "libopus"].

Может кто-нибудь сказать мне, что я делаю не так? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Поскольку это происходит только с некоторыми песнями, я считаю, что проблемы связаны с исходным форматом песни.Убедитесь, что pudub правильно настроил параметры файла, например: количество каналов, ширину выборки, частоту кадров и т. Д. Иногда результирующий формат также изменяется, поэтому вы можете получить звук в диапазоне [-1..1] (с плавающей запятой),и иногда [-32767..32768] (целое число).

0 голосов
/ 28 марта 2019

Снимок в темноте:

Только что сэмплировав эти две песни Muse, "Pressure" намного громче рок-песни, чем "The Void". Я подозреваю, что сама служба Telegram просто обнаруживает музыку как шум при выполнении перевода речи в текст. В отличие от речи, которая имеет широкий динамический диапазон между произнесенными словами, музыка, как правило, имеет одинаковую громкость. Следовательно, относительный объем каждого образца относительно одинаков - следовательно, плоская линия.

...