Нисколько не реклама Миши, ибо в рекламе такие великие люди не нуждаются
Короче глянул я эту минутку, и вот недавно у меня случилось какое-то озарение. Это же ведь не только про музыку.
И вот отсюда вылезает главный вопрос
Почему вы (вы знаете кто) так боитесь тишины в играх?
P.S. Еще я знатно угараю с этих картинок (вайб тех самых шторок сони вегаса)
Смотрите на каждом мониторе своего регионального телевидения и в нарезке свадебного фотографа за пачку сухариков
Частота аудио интерфейса в системе 48кГц
Все варианты на output buffer count 4 буффера (больше или меньше не влияют на результат) Контейнер по trigger rate вызывает звук выстрела раз в 100мс
В теории break с задержкой до 99 мс (включительно) должен вызывать только один звук, но тесты показывают что в зависимости от буфера интервал для break-а с одним вызовом выстрела уменьшается пропорционально размеру буфера
По тестам получается такой расклад
буфер в 256 сэмплов - двойной вызов начинается с задержки вызова break 90мс (т.е. от 91мс до 99мс вызывается два звука вместо одного)
буфер в 512 сэмплов - двойной вызов начинается с задержки вызова break 85мс (т.е. от 86мс до 99мс вызывается два звука вместо одного)
буфер в 1024 сэмплов - двойной вызов начинается с задержки вызова break 63мс (т.е. от 64мс до 99мс вызывается два звука вместо одного)
При этом важный нюанс, каждый вызов идеально отрабабатывает break при задержке старта стрельбы по таймингам в 1 буфер
буфер в 256 сэмплов - старт задерживаем на 6мс break (округленная в большую сторону длина буфера в секундах (5,3333333 мс при 48кГц) вызываем через 100 мс Т.е. звук стартует на таймлайне 6 мс, break вызывается на таймлайне 106мс (но в рамках ивента это будет ровно 6мс - старт первого выстрела и 100мс break первого выстрела) - играет 1 выстрел
буфер в 512 сэмплов - старт задерживаем на 11мс break (округленная в большую сторону длина буфера в секундах 10,6666666 при 48кГц) вызываем через 100 мс Т.е. звук стартует на таймлайне 11 мс, break вызывается на таймлайне 111мс (но в рамках ивента это будет ровно 11мс - старт первого выстрела и 100мс break первого выстрела) - играет 1 выстрел
буфер в 1024 сэмплов - старт задерживаем на 22мс break (округленная в большую сторону длина буфера в секундах 21,3333333 при 48кГц) вызываем через 100 мс Т.е. звук стартует на таймлайне 22 мс, break вызывается на таймлайне 122мс (но в рамках ивента это будет ровно 22мс - старт первого выстрела и 100мс break первого выстрела) - играет 1 выстрел
Про лаги стрельбы - часть 1
Итак я все же созрел написать про нюансы таймингов. Готовьтесь к серии (не очень регулярной) отборной порционной духоты
Думаю что все кто работал с автоматической стрельбой сталкивались с проблемой лишних выстрелов и залипания очереди.
Сегодня начнем с ситуации:
1 тап - двойной выстрел
Не все и не всегда это замечают, но бывают такие ситуации что мы тапаем 1 раз, HUD нам рисует расход 1 патрона, вылетает один прожектайл, а слышим мы при этом два звука
Долгие рисерчи привели меня к тому что вся проблема кроется в аудио буфере и том как считаются аудио кадры.
Подкапотные подробности я все еще жду от кинтетиков, так что сегодня пока что без тех базы
Главное! Никаких Sample Accurate MIDI решений (об этом каргокульте в другой раз) для лечения этого городить не нужно.
Просто задерживаем старт лупа с триггер рейтом на размер буфера (аудио фрейма) и получаем нужный эффект
В упрощенном варианте мы просто делим размер буфера (ваши программеры точно знают где взять uNumSamplesPerFrame) на сэмпл рейт системы конечного игрока и вуаля - чистейшие (практически идеальные) ваншоты на один тап.
Почему практически идеальные?
Проблема кроется в специфике таймингов ввайза, а именно в том что он или окргуляет или транкейтит (я все еще жду ответа кинетиков) тайминги меньше 1 мс, в этой связи иногда все же можно вызвать ложное срабатывание.
Условные 5.33 мс буфера у вас станут 6мс задержки. Попадая антапом в этот короткий промежуток от 5.33 до 6мс два буфера успеют посчитаться и уже будет детектиться брейк на второй, уже успевший срендериться SFX.
А ну и дополнительно еще лаги и падение FPS могут слегка подгадить
Главное! В стерильных условиях синглплеера и стабильного FPS с данным сетапом 1 тап будет = 1 выстрелу
Так же важным считаю отметить, что аналогичные проблемы у меня еще появлялись при использовании scatterer sound в FMOD
На сегодня всё
Всем четких ваншотов и стабильных очередей!