Занимаюсь портированием игры. Размер занимаемой памяти важен, поэтому задумался над уменьшением объема звуковых данных.
PC версия использовала 44100 / 16bit / stereo. Думаю, что для iOS можно сделать меньше.
Какие best practices существуют? Для эффектов и музыки.
Слушая через динамик, легко предположу, что 22050 / 8 / mono или даже меньше, но с другой стороны, пользователь может играть и в наушниках.
как ни странно, но в игры на iOS многие играют с наушниками, поэтому безболезненно уменьшить качество звуков по сравнению с PC не получится. а так, какой хочешь формат, такой и выбирай. кстать, память для звуков можно уменьшить за счет их кеширования.
22khz / 16 bit / stereo терпимо звучит. После конвертации надо немного поработать эквалайзером, подвытащив часть средних и верхних частот на место.
Некоторые короткие звуки, "шумовые" по характеру (взрывы, выстрелы) можно попробовать первести в 8 bit, если шум дискретизации не будет сильно заметен.
Люди играют на айфоне обычно в дороге или шумных местах, поэтому не всегда наушники спасают от чистого восприятия звука. Приходится искать компромисс, когда из-за звука не хватает места для других ассетов.
Vibe
> звука не хватает места для других ассетов
Оперативной памяти там за глаза, если хочется чтобы билд влазил в 20 Мб, то можно конвертировать в .ogg. Да можно и в памяти хранить как .ogg, а при воспроизведении проводить временную распаковку требуемых выборок в .wav, правда это реализовать сложновато. По сабжу - экономите на оперативной памяти или на самом билде?
TorpedO.vrn
> По сабжу - экономите на оперативной памяти или на самом билде?
На оперативной памяти. Звуков очень много и они, сейчас, занимают половину от общего объема игры.
На диске храню как ogg, но bass разжимает их в памяти обратно в wav. Не знаю можно ли указать ему, чтобы хранил ogg, наверное нет.
Vibe
> 22khz / 16 bit / stereo терпимо звучит.
Да, наверное так и буду делать. А для эффектов 22khz / 16/8 bit / mono
afconvert -f caff -d ima4 filename.ext на выходе получишь оптимальный caf
SereG
IMA ADPCM - неплохой компромисс между степенью сжатия и скоростью декодирования.
В таком случае можно выборочно грузить звуки. Т.е. у вас одновременно можно воспроизвести, скажем, 5 звуков, следовательно в памяти будет всегда не более 5 звуков. Если потребуется воспроизвести такой звук, который не загружен в память, то грузим его из файла (можно в потоке) вместо неиспользуемого звука и воспроизводим.
TorpedO.vrn
Ну да, можно конечно, но будут возникать протормаживания.
kalach
BUzer
Попробовал IMA - устраивает. НО глупый BASS(?) его разжимает обратно в WAV (судя по занимаемой приложением памяти).
SereG
Я просто распаковываю текущую часть mp3 stream'а, ее воспроизвожу, закончив иду к следующей части. Это делается довольно просто.
SereG
Нда, это не очень хорошо. Покопайся во флажках - может ему как-то можно сказать, чтобы разжимал на лету.
22кГц/16бит
можно даже 11 (разница будет еле заметна только при моментальном сравнении)
но не в коем случае не 8 бит будет и шипеть и артефакты в звуке появятся (хотя глухим этот совет не подходит)
SereG
> НО глупый BASS(?) его разжимает обратно в WAV (судя по занимаемой приложением
> памяти).
В FMOD'e есть флаг стриминга, видимо, в БАССе тоже что-то такое есть
StiX
> В FMOD'e есть флаг стриминга, видимо, в БАССе тоже что-то такое есть
Та это понятно, но не будешь же каждый "пик" в программе стримить.
Поговорил с саппартом баса, подтвердили что IMA4 сэмплы разжимаются в памяти в PCM.
Ладно, ограничусь уменьшением битрейта)
Тема в архиве.