Аудио и DSP
Механизм: сигнал под жёстким дедлайном
Звук как сэмплы
Аудио — амплитуда во времени, дискретизированная 44.1/48 кГц: каждый сэмпл — одно значение амплитуды. Секунда стерео @ 48 кГц — 96 000 чисел. Потолок частоты задаёт теорема Найквиста:
Больше 20 кГц человек не слышит, поэтому 44.1/48 кГц хватает; всё DSP работает над этим потоком чисел.
Колбэк и дедлайн буфера
Аудио-железо тянет сэмплы непрерывно и периодически зовёт колбэк: «дай следующие N сэмплов». Аудио-поток обязан их произвести до того, как буфер опустеет, иначе динамик проиграет мусор/тишину → щелчок/дропаут. Это жёсткий real-time, причём тайминг тоньше кадрового:
Размер буфера — размен латентность против безопасности: маленький (256 сэмплов = 5.3 мс) даёт низкую задержку, но узкий дедлайн; большой безопаснее, но звук «отстаёт». И промах слышен мгновенно: пропущенный кадр глаз почти не замечает, а пропущенный аудио-буфер — резкий щелчок. Поэтому аудио живёт на отдельном высокоприоритетном потоке с фиксированным крошечным дедлайном — оно не может делить плавающий тайминг главного потока.
DSP-граф
Звук — это сигнальный граф, обрабатываемый буфер-за-буфером:
Источники (декодированные сэмплы/стримы) → эффект-узлы (reverb, EQ, low-pass — каждый трансформирует поток) → спатиализация → микшер (суммирует источники в шины с приоритетами/громкостью, не давая сумме заклиппить за ±1.0) → выход (стерео/5.1/7.1).
Спатиализация: HRTF
Как передать 3D-позицию источника? HRTF (Head-Related Transfer Function) — измеренные фильтры того, как звук с данного направления искажается головой/ушами до барабанной перепонки (межушная разница по времени и громкости + частотная окраска). Свёртка потока с HRTF-откликом для направления источника даёт бинауральное стерео: в наушниках мозг локализует «взрыв в (10,0,5)» вокруг головы. На колонках — панорамирование в surround.
Динамика: адаптивная музыка и процедурное аудио
- Адаптивная музыка — реагирует на геймплей. Hades: базовый слой (исследование) + боевой слой (барабаны врубаются при стычке) + босс-слой (гитара). Стемы кроссфейдят по состоянию (вертикальные слои) или пересобирают секции (горизонтально). Параметры (интенсивность, напряжение) рулят миксом.
- Процедурное аудио — синтез вместо записи: шаг = импульс-синус + шум с огибающей, подстроенные под поверхность (земля/металл/камень). Плюс — бесконечная вариация и мало памяти; минус — менее реалистично и нужен навык синтеза («храни функцию, а не выход»).
Всё это упаковывает мидлварь (FMOD/Wwise): DSP-граф, спатиализация и адаптивная музыка как event-driven и параметрический авторинг — саунд-дизайнер триггерит события и крутит параметры без кода движка.
🕹 Во что поиграть — и что заметить
Аудио надо слушать в наушниках — спатиализацию и слои не увидеть.
Эталон вертикальных слоёв: исследование → бой (барабаны/гитара врубаются) → зачистка (спадают). Переходы бесшовные — это кроссфейд стемов по состоянию боя, а не смена трека.
🎮 Сыграй: в Hades послушай музыку до боя, в бою и после — заметь, как слои добавляются и убираются без разрыва (один темп/тональность, меняется плотность). Это адаптивная музыка: не «переключили песню», а досводили слои под геймплей-состояние.
Знаменитая бинауральная запись: голоса в голове Сенуа спатиализованы вокруг тебя. В наушниках мозг локализует их сзади/сбоку — прямая демонстрация HRTF.
🎮 Сыграй: Hellblade обязательно в наушниках — заметь, как голоса ощущаются позиционно (сзади, слева), а не «в стерео». Это HRTF-свёртка направления в бинауральный сигнал. Сними наушники — иллюзия рушится (HRTF рассчитан на два независимых уха).
В нагруженной или плохо оптимизированной игре звук иногда «трещит»/заикается — это аудио-поток не успел заполнить буфер к дедлайну (underrun). Слышно мгновенно, в отличие от просевшего FPS.
🎮 Заметь: поймай момент, когда игра тормозит и звук трещит — это промах аудио-дедлайна. Сравни с визуальным лагом: кадр можно «проглотить», щелчок — нет. Вот почему аудио дают отдельный высокоприоритетный поток с жёстким крошечным буфер-дедлайном.
Хардкор · DSP: дискретизация, буфер-дедлайн, микс и свёрткаможно пропустить
Дискретизация и Найквист
Непрерывный сигнал берут раз/сек; по Найквисту точно представимы частоты до . Выше — алиасинг (высокая частота маскируется под низкую), поэтому перед дискретизацией ставят анти-алиас low-pass. 48 кГц → потолок 24 кГц, с запасом над слухом (~20 кГц). Битность (16/24) задаёт динамический диапазон (шаг квантования амплитуды) — прямой аналог fixed-point precision.
Real-time колбэк
Аудио-callback — это hard real-time: в нём нельзя аллоцировать память, брать локи, ходить в файлы — всё, что может заблокироваться дольше дедлайна буфера, вызовет underrun и щелчок. Отсюда правила аудио-программирования: lock-free очереди для связи с игровым потоком, пре-аллокация, стриминг с диска в отдельном (не аудио) потоке. Дедлайн — 5–10 мс — и промах слышен, а не «сглаживается».
Микс, клиппинг и свёртка
Микс — сумма сэмплов источников; если сумма выходит за ±1.0, происходит клиппинг (обрезание пика = резкое искажение), поэтому нужны громкости шин, лимитеры/компрессоры. Reverb и HRTF — это свёртка потока с импульсным откликом (комнаты или уха): выход = вход ∗ IR. Длинные IR считают быстрой свёрткой через FFT (partitioned convolution) ради дедлайна. Тот же матаппарат, что в фильтрах сигналов вообще.
Хардкор · дизайн: адаптивная музыка, процедурное аудио, мидлварьможно пропустить
Горизонтальное vs вертикальное
Адаптивная музыка бывает вертикальной (слои-стемы одного трека врубаются/спадают по интенсивности — Hades) и горизонтальной (пересборка секций: intro→loop→bridge→outro по состоянию, со стыковкой на музыкальных долях, чтобы не рвать ритм). Часто комбинируют. Ключевая тонкость — переходы на бите: смена/кроссфейд приурочены к такту, иначе слышен шов.
Процедурное: функция вместо выхода
Записанный звук — фиксированный ассет; процедурный — генератор (синтез из осцилляторов, шума, огибающих, физ-моделей). Плюсы: бесконечная вариация (никогда два одинаковых шага/выстрела), крошечная память, параметризация по геймплею (скорость, поверхность, материал). Минус — реализм и нужна экспертиза DSP-синтеза. Это ровно «храни функцию, а не материализованный выход», применённое к звуку.
Зачем мидлварь
FMOD/Wwise выносят DSP-граф, спатиализацию и адаптивную логику в визуальный авторинг для саунд-дизайнера: он собирает события, шины, параметры и переходы без кода, а движок лишь триггерит события и шлёт параметры. Это разделение труда (как шейдер-граф для художника) — и причина, по которой ААА почти не пишут аудио на голых API.
ML / AI (твой домен): аудио-DSP — форма стримингового инференса, особенно audio-ML. Буфер-колбэк-дедлайн ⇄ латентный бюджет стриминговых ASR/TTS: потоковый TTS обязан выдавать аудио-чанки прежде, чем опустеет буфер, — тот же underrun-констрейнт (и прямо про TTS-задержку LLM-NPC). Дискретизация/Найквист ⇄ основа любого сигнального ML, а «звук в дискретные кадры» ⇄ аудио-токены VQ-VAE (кодбук аудио — см. дискретизацию). HRTF-свёртка ⇄ свёрточные примитивы и spatial-audio ML. Адаптивная музыка (состояние → выбор слоя) ⇄ управляемая/условная генерация. Процедурное аудио (синтез vs запись) ⇄ генеративное vs retrieval («храни функцию, а не выход»). А нейро-вокодеры/RAVE/нейро-TTS — это уже DSP-граф с обученным узлом: фронтир, где DSP встречает ML. Выделенный аудио-поток с крошечным дедлайном ⇄ изоляция латентно-критического пути инференса.
Сигналы / DSP: дискретизация, свёртка/фильтры, FFT, real-time буферизация — общая база аудио, радио, сенсоров, управления.
Real-time системы: hard-deadline колбэк без блокировок (lock-free, пре-аллокация), стриминг с backpressure, отдельный приоритетный поток под латентно-критику.
Принцип: у потоковой обработки под дедлайном промах слышен/виден сразу — изолируй критический путь на свой поток, не блокируйся в колбэке, считай буфер за буфером.
Почему аудио нужен отдельный поток, а дедлайн жёстче кадрового?
Что именно делает HRTF и почему это работает только в наушниках?
Размер буфера: почему нельзя просто взять маленький ради низкой задержки?
Процедурное или записанное аудио — что лучше?
Зачем адаптивная музыка сложнее, чем просто «сменить трек в бою»?
- «Game Audio Implementation» (Richard Stevens, Dave Raybould) — FMOD/Wwise, адаптивная музыка на практике.
- FMOD Studio / Wwise docs + бесплатные версии — DSP-граф, события, параметры руками.
- «The Audio Programming Book» / Will Pirkle «Designing Audio Effect Plugins» — DSP, свёртка, real-time колбэк.
- GDC audio talks — Hellblade (бинаурал), Hades (адаптив), процедурное аудио (No Man's Sky).
- Модуль 8, «FMOD/Wwise Architecture», «Spatial Audio & HRTF», «Dynamic Music», «Procedural Audio» (
08-technical-deep-dives.md).