сэмплирование звука не сохраняет волны (векторы)!

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

введите описание изображения здесь

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

введите описание изображения здесь

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

Для создания образца я использую 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"].

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


person Amir A. Shabani    schedule 26.03.2019    source источник


Ответы (2)


Выстрел в темноте догадка:

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

person selbie    schedule 28.03.2019

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

person igrinis    schedule 31.03.2019