Запуск музыки в виде фрагментов SDL_Mixer

В настоящее время SDL_Mixer имеет два типа звуковых ресурсов: чанки и музыка.

Помимо ограничений API и поддерживаемых форматов, есть ли причины не загружать и воспроизводить музыку как SDL_Chunk и канал? (память, скорость и т. д.)

2 ответа

Решение

API - это настоящая проблема. API-интерфейсы "музыка" предназначены для потоковой передачи сжатой музыки, а API-интерфейсы "звук" - нет. Опять же, если вам удастся заставить его работать в вашем приложении, то это работает.

Я не смотрел на код SDL, но я предполагаю, что "фрагменты" предназначены для небольших звуковых сэмплов и кэшируются в памяти, декодируются полностью во время потоковой передачи "музыки" (не кэшируются в памяти в полностью, но расшифровывается и буферизируется по мере необходимости, при условии, что он будет, по большей части, воспроизводиться с самого начала и непрерывно с этого момента, иногда, возможно, с некоторым возвратом к началу)

Так что причина в памяти. Вы не хотите декодировать, скажем, 4 минуты 16-битной стереофонической песни в память, так как она потребляет 44100 Гц * 2 байта * 2 канала *4 минуты *60 секунд / мин == 42336000 байт, если вы попытаетесь это сделать, когда вы сможете декодировать и буфер меньших кусочков этого.

OTOH, если у вас есть ~10 МБ ОЗУ в минуту музыки, чтобы тратить ее впустую, и вам нужен процессор, который будет использоваться для декодирования на лету... вы, вероятно, можете использовать куски.

Другие вопросы по тегам