Запуск музыки в виде фрагментов SDL_Mixer
В настоящее время SDL_Mixer имеет два типа звуковых ресурсов: чанки и музыка.
Помимо ограничений API и поддерживаемых форматов, есть ли причины не загружать и воспроизводить музыку как SDL_Chunk и канал? (память, скорость и т. д.)
2 ответа
API - это настоящая проблема. API-интерфейсы "музыка" предназначены для потоковой передачи сжатой музыки, а API-интерфейсы "звук" - нет. Опять же, если вам удастся заставить его работать в вашем приложении, то это работает.
Я не смотрел на код SDL, но я предполагаю, что "фрагменты" предназначены для небольших звуковых сэмплов и кэшируются в памяти, декодируются полностью во время потоковой передачи "музыки" (не кэшируются в памяти в полностью, но расшифровывается и буферизируется по мере необходимости, при условии, что он будет, по большей части, воспроизводиться с самого начала и непрерывно с этого момента, иногда, возможно, с некоторым возвратом к началу)
Так что причина в памяти. Вы не хотите декодировать, скажем, 4 минуты 16-битной стереофонической песни в память, так как она потребляет 44100 Гц * 2 байта * 2 канала *4 минуты *60 секунд / мин == 42336000 байт, если вы попытаетесь это сделать, когда вы сможете декодировать и буфер меньших кусочков этого.
OTOH, если у вас есть ~10 МБ ОЗУ в минуту музыки, чтобы тратить ее впустую, и вам нужен процессор, который будет использоваться для декодирования на лету... вы, вероятно, можете использовать куски.