Время, проведенное за компьютером, сводится в основном к «смотрению в экран»: пишет ли человек код, смотрит фильм, играет или узнает новости. Просто потому, что основное чувство человека — зрение. И оно во многом определяет восприятие реальности, механизмы взаимодействия с ней, и направляет развитие многих технологий.
Обычный пример эволюции железа и софта за последние 30 лет: сравните Wolfenstein 3D (1992) и Crysis 3 (2013). То как продвинулась и усложнилась компьютерная графика за это время сложно недооценить.
Но увы, этого нельзя сказать о звуке. О том, как исправить ситуацию, и будет статья.
Изображение со страницы peripheriques.free.fr/blog/index.php?/past/2010-pure-data-read-as-pure-data/
Основу статьи составляет материал лекций, которые периодически читает Энди Фарнелл (Andy Farnell). В этих лекциях он излагает суть своего видения развития и использования вычислительного аудио (или процедурного аудио, procedural/computational audio) и приводит ряд интереснейших примеров, которыми я хотел бы поделиться с сообществом.
Пару слов об Энди: дизайнер звука, программист, профессор в ряде университетов, в прошлом аудиоинженер. На его сегодняшнюю профессиональную деятельность когда-то сильно повлияла демосцена, в частности работы The Black Lotus. Энди также автор книги «Designing Sound», в которой содержится масса полезной теории по физике звука, моделированию и психоакустике, и множество разнообразных практических упражнений, написанных на языке визуального программирования Pure Data.
Статья получилась немного больше ожидаемого, так что если интересно просто послушать результаты — переходите сразу к разделу с примерами.
Если же наоборот, хочется больше углубиться в детали, посмотрите лекцию целиком, в ней Энди рассказывает много интересного.
Немного истории
Итак, возможности компьютерной графики дошли до детального моделирования объектов и их взаимодействий в режиме реального времени. Все это за счет применения многих технологий и концепций, среди которых отдельные графические ядра и более оптимальные алгоритмы построения изображения. Это делает визуализацию адаптивной по отношению к ресурсам системы без видимой потери качества. Использование динамического уровня детализации визуального пространства заметно экономит ресурсы (метод Mipmapping, например). Но естественно, это появилось не сразу. Уже упомянутая игра Wolfenstein 3D выглядела ужасно, если кто-нибудь помнит. Среди некоторых специалистов тогда существовало мнение, что фотографический подход а-ля Myst (1993) останется навсегда. Но низкие мощности компьютеров и страшные результаты не остановили энтузиастов.
Параллельно с развитием графики о серьезном синтезе звука в приложениях особо не задумывались, так как компьютерное аудио «за недостатком внимания» все еще находилось на эмбриональной стадии. Согласитесь, даже сегодня когда человек слышит слово «синтезатор», первой ассоциацией скорее всего будет мужик с блестящей шевелюрой, извлекающий из пластмассового параллелепипеда нелепые звуки. Хотя сейчас существуют синтезаторы, способные создавать благозвучные, сложные и красивые звуки совершенно разного характера (скажем, Massive от Native Instruments или Zebra от U-he, о применении которого на Хабре недавно писали). Интересно, что когда я слышу слова «шутер от первого лица», у меня не возникает ассоциаций с огромными пикселями и восьмибитным цветом, хоть я вообще не геймер.
Текущая ситуация
Аудиотехнологии в не ориентированных на звук приложениях не отличаются адаптивностью и гибкостью. Подход к созданию звука чаще всего основан на заранее подготовленных данных, и это создает ряд серьезных ограничений. С линейным ростом количества объектов в моделируемом пространстве число их возможных взаимодействий растет нелинейно (n(n-1)/2). Это не позволяет создавать реалистичное звуковое поле, ведь в общем случае нельзя предугадать все возможные типы взаимодействия и подготовить звуки для каждого из них. Помимо этого, независимо от важности и приближенности объекта на сцене, ресурсы, затрачиваемые на воспроизведение связанного с объектом аудио, совершенно не меняются. Как был исходный аудио файл, скажем, 44,1 кГц 24 бита, так он и воспроизводится. В приближении к бесконечности такой подход является неэффективным. При этом по умолчанию аргументом против использования вычислительного аудио является то, что производительности современных обычных компьютеров якобы недостаточно. Как станет ясно дальше, это давно не соответствует действительности. Все примеры этой лекции просчитывались вживую на обычном гигагерцовом ноутбуке, используя небольшую часть ресурсов.
В отличие от дизайна, основанного на данных, в процедурном аудио мы можем использовать динамический уровень детализации звука. Включать и отключать отдельные блоки моделей и использовать психоакустические особенности восприятия звука человеком, убирая сложные детали сигнала или заменяя их чем-то попроще, если нужно. Например, моделируя звук дождя естественно начать с падения отдельных капель. Со временем, когда плотность падения капель становится достаточно высокой, шум дождя отлично апроксимируется обычным фильтрованным розовым шумом — это своеобразный аудио-Mitmapping.
Процесс разработки процедурного аудио
Процедурное аудио подразумевает хорошо структурированный процесс дизайна, применение тех же принципов, что и при написании программ: модульность и повторное использование. Подобный организованный подход имеет много положительных последствий. Сразу скажу — он вовсе не убивает творческую составляющую работы дизайнера, так как стэк дизайна звука имеет несколько уровней абстракции, и дизайнер может работать на том уровне, на котором ему комфортно. В пользу этого Энди приводит аналогию с практичностью семиуровневой модели OSI и предлагает следующую общую структуру стэка:
- Поведение (Behaviour)
- Модель (Model)
- Метод (Method)
- Реализация (Implementation)
Поведение, как несложно догадаться, это то поведение, которое является причиной звука. В этом нет особых сложностей.
Моделирование, с другой стороны, это самый сложный этап. Здесь важно понимать не только физику процесса, но и особенности восприятия нами звука. Не стоит слишком углубляться в структуру объекта. В конце концов, хоть производительность десктопов и высокая, всегда можно написать избыточно сложную модель, которую будет невозможно просчитывать в реальном времени (некоторые помнят точное моделирование звука воды, на создание нескольких секунд которого ушло много часов). Но даже для очень сложных моделей существуют достаточные мощности: по словам Энди, исследовательская группа из Queen Mary University оf London показала, что технология CUDA может очень успешно использоваться в вычислительном аудио и давать прекрасные результаты (к сожалению, описания результатов не нашел).
Как говорит Дэвид Бэк (дизайнер звука, автор отличной книги «The Csound Book»), реалистичность звука связана вовсе не с запредельной детализацией и точностью, а с тем, что можно назвать «акустической жизненностью» (acoustic viability), то есть с тем, насколько хорошо физические параметры соотносятся со слышимым звуком. Если воспринимаемое кажется нам осмысленным, мы интуитивно думаем, что «звучит как надо».
Один из важнейших концептов в физическом моделировании — «ключевой процесс» (signature process) — тот процесс, от которого в большей части зависит издаваемый звук. Для ходьбы, например, важна реакция опоры. Она, в свою очередь, зависит от силы, прилагаемой стопой на определенную площадь. В зависимости от вида ходьбы большая часть веса может перекладываться на пятку, а может на мысок. Со структурной точки зрения ногу можно представить как три сустава. Плюс, ноги две, и они находятся в фазовой корреляции. И так далее. Модель усложняется. Но в конечном счете она целиком зависит только от одного параметра — скорости движения объекта, и этим параметром элементарно управлять на высоком уровне абстракции.
В общем случае в моделировании нужно использовать взвешенный подход, понимать, как что-то звучит снаружи, и, в зависимости от потребностей, прибегать к физической специфике (phenomenal approach, physically informed/contextualised models). Это иногда подразумевает и отход от реалистической концепции в сторону гиперреализма. Например, в жизни пистолет звучит вовсе не так выразительно, как его привыкли слышать в играх. Гиперреализм часто воспринимается геймерами лучше, чем реализм.
Метод — это та палитра технических приемов звукового дизайна, которая используется для синтеза конкретного звука. Например, можно использовать аддитивный синтез или вместо него частотную модуляцию. Это отдельная большая тема, в которую в этой статье не стоит углубляться. Важно отметить, что методы часто являются взаимозаменяемыми.
В плане реализации в целом и в деталях тоже есть много интересных моментов.
Один из возможных способов реализации следующий. Каждый моделируемый объект имеет свои методы. Часть этих методов соотносится с издаваемыми объектом звуками. На физическом уровне можно сказать, что объект реагирует на импульс, который ему передается при столкновении с другим объектом. В зависимости от параметров импульса и свойств объектов и генерируется звук. Для этого у каждого объекта должен быть свой «импульсный ключ» (impulse signature), который определяет акустическую реакцию объекта на импульс.
В слое реализации тоже присутствует заменяемость. Дэн Столл — тоже специалист в программировании аудио — взял за основу примеры из книги Энди (до методов включительно) и переписал их на языке SuperCollider. Результат был такого же качества.
Больше плюсов
Как я уже сказал, модульность и повторное использование имеют массу положительных следствий.
Давайте рассмотрим такой пример. Мы создали объект класса «Турбина», который генерирует шум двигателя самолета. У самолета два двигателя. Мы создаем второй объект нашего класса. Теперь, для человека, который виртуально находится в кабине пилота, мы используем звук, сгенерированный этими же двумя объектами, но пропускаем их через модуль пространственной обработки (психоакустика в действии: человек будет слышать слева и справа позади по одному двигателю) и навешиваем на них импульсную характеристику кабины пилота (impulse response — уникальная характеристика любого пространства; грубо говоря это то, как стены помещения отражают различные спектральные компоненты звука, это создает эффект присутствия в помещении). А для человека, мимо которого по взлетно-посадочной полосе проносится самолет, исходный генерируемый звук нужно просто пропустить через модуль, имитирующий эффект Доплера, и модуль приближения/удаления (при желании можно добавить отраженный звук от ВПП).
Еще одним положительным следствием такого подхода является масштабируемость. Скажем, один и тот же класс «Цилиндр», в зависимости от настройки параметров, будет моделировать и консервную банку, и большой барабан, и кусок огромной трубы. Или один и тот же модуль прерывистого трения использовать для скрипа дверной петли, скрипа кожаной выделки на мебели, визга покрышек или для трения мочалки о стекло.
Один из самых важных аспектов — финансовый. Энди рассказал интересную историю из своего опыта. Его друг, звукорежиссер, записывал звук настоящего мотора самолета для авиасимулятора. Для этого понадобилось взять микрофоны за несколько тысяч евро, арендовать на день сам двигатель, купить для него топливо, оплатить день работы квалифицированного обслуживающего инженера, оплатить аренду ангара и — дело происходит не в России — оплатить медстраховку всей команде. Звукорежиссер занимался т.н. аналитической записью — то есть записью отдельных компонентов и процессов в двигателе: последовательность зажигания, специфические резонансные вибрации различных полостей, шум щеток ротора после прекращения подачи топлива и прочие подобные детали. На выходе получилось несколько десятков гигабайт высококачественных записей. Энди, тщательно проанализировав эти записи, сделал модель, которая весит меньше 1 кБ и запросто просчитывается в реальном времени на нетбуке. Звук, естественно, получился очень реалистичный.
Перспективы
Несколько лет назад, в 2005-м, Энди пытался найти единомышленников в области разработки игр, но, по его словам, эта индустрия изнутри оказалась намного более консервативной, нежели принято думать. Помимо того, что люди не особо задумываются над альтернативами, даже если привести все доводы за — мало кто захочет менять устаканившийся процесс разработки игр и терять деньги в случае неудачного эксперимента. К тому же, проверенного и эффективного способа создавать процедурное аудио пока нет, так как первопроходцев очень мало. Но они все же есть, и в последнее время их становится больше. Например, есть игра Pugs Luv Beats, основная фишка которой именно в процедурной музыке, зависящей от геймплея. Аудиодвижок тоже реализован на Pure Data.
Конечно, начинать использовать процедурное аудио сложно, но библиотеки модулей и компонентов постепенно будут насыщаться, и в перспективе процесс создания звукового дизайна будет проходить все быстрее и давать все более качественные результаты.
Опасаться, что этот подход вытеснит традиционный звуковой дизайн, тоже не стоит — вычислительное аудио будет дополнять существующий набор инструментов, а не заменять его целиком. Несложно представить себе, сколько специализаций это создаст и как расширит рынок. Тем более, что между записанными звуками и процедурным аудио сейчас есть градации (например, могут использоваться словари гранул (grain dictionaries) — микросемплы оригинального звука, из которых алгоритмически собирается звук в процессе игры).
Насколько далеко может зайти такой подход к звуку? Постепенно появляется множество новых ниш в интерактивном искусстве и синхронизованном медиа. Наверное, можно будет и купить диск не c музыкальной записью, а с генерирующим ее алгоритмом (в некоторой степени и сейчас уже можно). Впрочем, живого звука и человеческой записи полностью это не заменит, зато заметно расширит и обогатит опыт восприятия искусства в целом. Опять же, это вовсе не биполярная вещь, на ум приходит целый спектр полноценных подходов с использованием процедурного аудио. Как, например, в компьютерной графике после полностью смоделированных движений со временем перешли к моделям, движение которых записывается с живых актеров. Это просто иной способ записи реальности.
Примеры
В порядке возрастания сложности звука:
- ходьба и бег по гравию (@50:53)
- модуль прерывистого трения, параметризованный для дверной петли (@48:55)
- выключатель (@54:07) и часы на его основе (@55:50)
- двигатель машины (из другого видео) с визгом покрышек (модуль прерывистого трения) (@53:08)
- электромотор (@1:01:49) и робот из нескольких таких модулей (@1:02:15)
- лопасти винта (@1:03:53)
- вентилятор в вентшахте (лопасти + электромотор + импульсная характеристика шахты) (@1:05:34)
- ветер (@1:07:36), дождь (@1:09:14), окно (@46:50), все три вместе, «сидя у окна во время шторма» (@1:10:15)
- «голосовой модуль» для роботов (@1:11:37), лев и корова на той же основе (@1:12:28)
- пламя (@1:13:41), тот самый движок самолета (турбина + пламя) (@1:16:01)
- вертолет на земле (с использованием модели винта) (@1:19:38) и пролетающий (с модулем приближения/удаления) (@1:25:02)
Материалы:
- Лекция Энди Фарнелла в Лондоне, 2013: www.youtube.com/watch?v=sp83-Pq7TyQ (тот же материал, но в пяти частях и в худшем качестве: 1, 2, 3, 4, 5)
- Большая выдержка из книги «Designing Sound» в открытом доступе: aspress.co.uk/ds/pdf/pd_intro.pdf
- Интервью с Энди на Designingsound.org: designingsound.org/2012/01/procedural-audio-interview-with-andy-farnell/
- Интервью с создателями Pugs Luv Beats там же: designingsound.org/2012/01/the-sound-of-pugs-luv-beats/
- Исследование эффективности и качества моделирования аудио в Queen Mary University of London: http://www.eecs.qmul.ac.uk/~josh/documents/HendryReiss-AES129.pdf
- Pure Data: puredata.info/
- Так же хочу упомянуть замечательный с практической и культурологической точки зрения курс Survey of Music Technology: class.coursera.org/musictech-001 и начинающийся скоро курс по ChucK: www.coursera.org/course/
Автор: 1eqinfinity