Запуск музыки в виде фрагментов SDL_Mixer - PullRequest
4 голосов
/ 08 марта 2009

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

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

Ответы [ 2 ]

1 голос
/ 13 марта 2009

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

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

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

1 голос
/ 09 марта 2009

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

...