Рендерер аудио что это
Как не надо разрабатывать звуковые движки
Программируя звук в приложениях и в играх, мне часто приходилось переписывать всю кодовую базу звуковых модулей, так как многие из них обладали либо слишком запутанной архитектурой, либо наоборот ничего не умели кроме простого проигрывания звуков.
Со звуковыми движками хорошо подходит аналогия с рендером изображения в играх: Если у тебя слишком простой pipeline с большим кол-вом абстракций, то ты вряд ли сможешь адекватно программировать что-то сложнее чем куб с шестеренками. С другой стороны, если у тебя весь код состоит из прямых OpenGL или D3D вызовов, то ты не сможешь без боли масштабировать свой спагетти-код.
Насколько уместно сравнение с графическим рендером?
В рендере звука происходят те же процессы, что и в рендере графики: Обновления ресурсов из игровой логики, обработка данных в удобоваримый вид, пост-обработка, вывод конечного результата. Все это может занимать довольно большой промежуток времени, поэтому для показательности я использую свою аудио библиотеку для теста производительности рендера.
Помимо чтения файла из SSD диска, декодирования Opus файла и записывания его даты в микшерный буфер, библиотека создает имитацию объемного звука, обрабатывает сигнал с помощью DSP модулей (компрессор, эквалайзер), а также ресемплирует сигнал. Конфиг машины, на которой проводился тест: Inte Core i9 9900 4.5GHz, 32GB RAM, SSD 480GB SATA. Ресемплинг принимал на вход сигнал с частотой дискретизации 48000Гц и выдавал с 44100Гц.
Если добавить уже несколько элементов, то время рендера будет сопоставимо с графическими рендером движком, с единственным отличием в том, что это все происходит в одном потоке. Если же это все попробовать распараллелить на систему задач, сделать более оптимальные алгоритмы микширования, то время рендера с большим количеством уникальных звуков может уменьшиться в несколько раз.
Каким стоит делать звуковой рендер для игр?
Чтобы ответить на этот вопрос, нужно уточнить ваши первоначальные данные. Если вы — инди-разработчик, и вы не обладая знаниями в звуке решили разрабатывать игру на C++, то вам подойдут простые библиотеки вроде SoLoud или OpenAL. Они сочетают в себе удобство более продвинутых систем и относительно неплохим функционалом, но при этом обладают важнейшим недостатком — плохая переносимость. Так как у всех этих библиотек API элементарный и монолитный, то сложно представить себе портирование с OpenAL на тот же Wwise.
Как выглядит сейчас этот звуковой движок
По этой причине, Core часть звукового движка проблематично портировать как на высокоуровневые фреймворки (FMOD либо Wwise), так и на низкоуровневые прослойки над системным API (PortAudio).
А как бы он мог выглядеть, если из него вырезать ненужные компоненты
Основные архитектуры звуковых движков
Как говорилось ранее, движок должен состоять из двух частей — низкоуровневой (hardware) и высокоуровневой (mixer). Низкоуровневая часть отвечает либо за вывод звука напрямую в динамик, либо за вывод звука через дополнительную прослойку, облегчающую работу с системным API. Высокоуровневая часть отвечает за микширование и управление звуками.
Такая архитектура позволяет очень легко поменять реализацию одних из модулей на что-то более продвинутое с точки зрения технологий. Тот же AudioHardware я могу написать как через прослойку PortAudio, так и напрямую через Windows Audio Session API. Также и с SoundManager — он может быть переписан с использованием библиотек FMOD или Wwise. В этом случае работу модуля AudioHardware принимает на себя именно фреймворк, и вам даже не придется думать о реализации вывода звука.
Высокоуровневая часть звукового движка может быть реализована с помощью разных архитектур: routing и emitters-source систем. Первая в основном используется в DAW, и представляет из себя звуковые дорожки, которые связаны между собой с помощью систем маршрутизаций. Это позволяет посылать сигнал из одного канала в другой, делать side-chain из одного канала в другой, а также использовать сразу несколько звуков на одной дорожке. Данный функционал подходит для рабочего софта, но никак не подходит для игровых движков из-за сложности в реализации а также высоких требований к железу.
Как выглядит современная звуковая система
Пример реализации emitters-source системы можно посмотреть на этом репозитории. Здесь я воспользовался библиотекой miniaudio, поэтому проблем с реализацией вывода звука у меня не было.
Музыкальные сети
Разбираемся с сетевым стримингом музыки
Музыкальные сети
Разбираемся с сетевым стримингом музыки. Подсказки для начинающих
Сегодня цифровой формат записи музыки наконец обретает гармоничную форму хранения. С развитием сетевых технологий и совершенствованием каналов передачи данных удалось избавиться от последнего атавизма – материального носителя информации. Фонотека перекочевала с полок стеллажей и шкафов в директории на серверах в сети и облачных хранилищ, роскошная полиграфия виниловых изданий прошлого века уступила место фотографии обложки альбома на экране телефона, а многостраничный буклет с подробнейшей информацией по изданию в полном соответствии с духом эпохи “твиттера” съежился до перечня названий композиций. При этом, один положительный момент оспаривать бессмысленно – пользоваться фонотекой стало гораздо удобнее. Часто довольно продолжительный поиск нужной пластинки на полках сегодня заменяется на несколько касаний сенсорного экрана, а о составлении плей-листов с любимыми композициями под разное настроение приверженцы винила даже мечтать не могли.
По-старчески поворчав по поводу уходящих ценностей, попробуем отметить наиболее очевидные преимущества сетевого хранения музыкальной коллекции. Прежде всего, размер фонотеки теперь никак не регламентируется жилищными условиями коллекционера и определяется лишь выделенным для ее хранения объемом дисковых накопителей. Причем, при грамотной организации домашней компьютерной сети, этот параметр является масштабируемым. То есть, может довольно безболезненно наращиваться. Стоимость терабайта хранения сейчас уже не такая большая, причем, в отличие от видео высокого разрешения, для хранения записей музыки даже в ультимативном качестве требуется сравнительно скромные объемы дисковой памяти. Достаточно сказать, что даже для записей высокого разрешения с параметрами 24 бит / 192 кГц на диск объемом 1 ТБ поместится примерно 6 000 треков или около 600 музыкальных альбомов.
В-третьих, появилась возможность выйти за рамки качества звучания, обусловленного требованиями Red book – иначе говоря, слушать записи в высоком разрешении. Конечно, в вашей коллекции оптических дисков вполне вероятно найдутся позиции в формате SACD или даже ушедшего DVD-Audio, которые позволяли познакомиться с высоким разрешением и раньше, но сегодня подобные записи распространяются все чаще именно в виде мультимедийных файлов в форматах высокого разрешения DSD, WAV, FLAC, ALAC и тому подобное. В качестве примера можно привести HDtracks, NAIM Label, HD Classic.
Переходя на высокое разрешение важно учитывать один момент. Сам факт, что аудиозапись представлена в таком формате не гарантирует действительно высокое качество звучания. Многое зависит от этапов, которые прошла композиция в процессе записи и мастеринга, прежде чем была сконвертирована в конкретный формат высокого разрешения. К тому же, сама возможность источника воспроизводить аудио высокого разрешения тоже, строго говоря, не гарантирует высокое качество звучания, которое во многом определяется возможностями всех компонентов вашей музыкальной системы.
В-четвертых, сетевые технологии в аудио открыли дополнительные возможности. К примеру, прослушивание интернет-радиостанций. Трансляции в Интернете стирают любые границы, что физически невозможно при эфирном вещании. Опять же, ничем не ограничено количество доступных станций, поскольку за частотный диапазон вещания теперь конкурировать не нужно.
В-шестых, появилась удобная возможность использовать свою коллекцию не только дома, но и в автомобиле и даже на пробежке или в общественном транспорте. Современные портативные гаджеты уже имеют достаточный объем памяти, чтобы вместить если не всю, то львиную часть вашей музыкальной коллекции. То есть, можно либо организовать синхронизацию записей в таком устройстве и сервере в сети, либо вообще использовать проигрыватель в качестве внешнего накопителя для стримера в домашней системе. При этом, такой гаджет позволит пользоваться фонотекой в любом месте, где бы вы не оказались.
Новой эпохе – новые инструменты
Под присмотром профессионалов
Рендеринг (просчёт) треков
Окно Рендеринг выбранного позволяет вам настроить параметры рендеринга треков.
Доступны следующие параметры:
Как отдельные фрагменты
Будет создан один или несколько треков. Они будут содержать отдельные события или партии, которые будут сохранены как отдельные аудио файлы.
Будет создан один или несколько треков. Они будут содержать смежные события или партии, объединённые в блоки. Каждый блок будет сохранён как отдельный аудио файл.
Будет создан один или несколько треков. Они будут содержать события/партии, которые будут скомбинированы в одно событие/партию. Каждая комбинация будет сохранена как отдельный аудио файл.
Если активирован этот пункт, все эффекты и регулятор панорамы копируются в новые аудио треки. Полученные аудио треки останутся в формате исходных треков. Например, из моно трека получится моно трек.
Если активирован этот пункт, при рендеринге в новые аудио файлы используются все эффекты. Сюда входят эффекты в инсертах, параметры ячейки канала, группового канала и посылов канала на эффекты. Параметры регулятора панорамы также учитываются при создании новых аудио треков. Полученные аудио треки останутся в формате исходных треков. Например, результатом рендеринга моно трека будет моно трек.
Полный путь прохождения сигнала
Если активирован этот пункт, при рендеринге в новые аудио файлы учитывается полный путь прохождения сигнала, включая все параметры канала, группового канала, посылов канала на эффекты, а также параметры регулятора панорамы. На новом созданном аудио треке не будет загруженных плагинов эффектов. Параметры регулятора панорамы будут активированы. Формат полученных аудио файлов определяется конфигурацией выходного канала исходного трека. Результатом рендеринга моно трека, выход которого скоммутирован на стерео шину, будет стерео аудио файл.
Полный путь прохождения сигнала + Мастер FX
Если активирован этот пункт, при рендеринге в новые аудио файлы используются все эффекты и параметры мастер-шины. Сюда входят все параметры ячейки канала, параметры группового канала, посылов канала на эффекты, а также параметры регулятора панорамы. Формат полученных аудио файлов определяется конфигурацией выходного канала исходного трека. Результатом рендеринга моно трека, выход которого скоммутирован на стерео шину, будет стерео аудио файл.
Просчитать микс в один трек
Позволяет вам установить для просчитываемых файлов длительность затухания в секундах или тактах и долях. Это добавляет время к концу просчитанного файла, чтобы позволить хвосту реверберации и задержки полностью утихнуть.
Позволяет вам установить разрешение (битность) для получаемого в результате материала, равное одному из значений: 16 бит, 24 бит, 32 бит, 32 бита с плавающей точкой или 64 бита с плавающей точкой.
Позволяет вам ввести название для просчитанных файлов. Чтобы это сделать, разблокируйте эту опцию, нажав на изображение замка.
Оставить треки-источники без изменений
Если выбран этот пункт, исходные треки остаются нетронутыми.
Если выбран этот пункт, исходные треки автоматически мьютируются.
Если выбран этот пункт, исходные треки удаляются из списка треков.
Если выбран этот пункт, исходные треки после рендеринга скрываются. Чтобы треки заново отображались, выберите вкладку Показать в окне Проект и выберите трек, который необходимо отобразить.
Streaming Audio Renderer
The streaming audio renderer (SAR) is a media sink that renders audio. Each instance of the SAR renders a single audio stream. To render multiple streams, use multiple instances of the SAR.
To create the SAR, call either of the following functions:
The second function, which returns an activation object, is required if you are playing protected content, because the activation object must be serialized to the protected process. For clear content, you can use either function.
The SAR can receive uncompressed audio in either PCM or IEEE floating-point format. If the playback rate is faster or slower than 1Г—, the SAR automatically adjusts the pitch.
Configuring the Audio Renderer
The SAR supports several configuration attributes. The mechanism for setting these attributes depends on which function you call to create the SAR. If you use the MFCreateAudioRenderer function, do the following:
If you use the MFCreateAudioRendererActivate function, the function returns a pointer to the IMFAttributes interface in the ppActivate parameter. Use this pointer to add the attributes.
For a list of configuration attributes, see Audio Renderer Attributes.
Selecting the Audio Endpoint Device
An audio endpoint device is a hardware device that either renders or captures audio. Examples include speakers, headphones, microphones, and CD players. The SAR always uses an audio rendering device. There are two ways to select the device.
The first approach is to enumerate the audio rendering devices on the system, using the IMMDeviceEnumerator interface. This interface is documented in the core audio API documentation.
Rather than enumerate devices, you can specify the audio device by its role. An audio role identifies a general category of usage. For example, the console role is defined for games and system notifications, while the multimedia role is defined for music and movies. Each role has one audio rendering device assigned to it, and the user can change these assignments. If you specify a device role, the SAR uses whatever audio device has been assigned for that role. To specify the device role, set the MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE attribute.
The two attributes listed in this section are mutually exclusive. If you do not set either of them, the SAR uses the audio device that is assigned to the eConsole role.
The following code enumerates the audio rendering devices and assigns the first device in the list to the SAR. This example uses the MFCreateAudioRenderer function to create the SAR.
To create the activation object for the SAR, change the code that appears after the call to IMMDevice::GetId to the following:
Selecting the Audio Session
An audio session is a group of related audio streams that an application can manage collectively. The application can control the volume level and mute state of each session. Sessions are identified by GUID. To specify the audio session for the SAR, use the MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID attribute. If you do not set this attribute, the SAR joins the default session for that process, identified by GUID_NULL.
By default, an audio session is process-specific, meaning it contains only streams from the calling process. To join a cross-process session, set the MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS attribute with the value MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_CROSSPROCESS.
After you create the SAR, you use the IMFAudioPolicy interface to join the session to a group of sessions, all of which are controlled by the same volume control in the control panel. You can also use this interface to set the display name and the icon that appear in the volume control.
Controlling Volume Levels
To control the master volume level of all the streams in the SAR’s audio session, use the IMFSimpleAudioVolume interface. To control the volume of an individual stream, or to control the volume of individual channels within a stream, use the IMFAudioStreamVolume interface. Both interfaces are obtained by calling IMFGetService::GetService. You can call GetService directly on the SAR, or call it on the Media Session. Volume levels are expressed as attenuation values. For each channel, the attenuation level is the product of the master volume and the channel volume.
Рендеринг и предпросмотр эпизодов
В этой справочной статье описаны особенности рендеринга, предпросмотра и воспроизведения эпизодов в Premiere Pro.
Premiere Pro пытается воспроизвести все эпизоды в режиме реального времени с полной частотой кадров. В Premiere Pro такой подход, как правило, применяется для всех разделов, которым не требуется рендеринг или для которых Premiere Pro уже выполнил рендеринг файлов предпросмотра. Тем не менее, в режиме реального времени воспроизведение составных разделов с полной частотой кадров не всегда возможно без файлов предпросмотра: разделы, для которых не выполнен рендеринг.
Для воспроизведения составных разделов в режиме реального времени с полной частотой кадров может потребоваться предварительный рендеринг файлов предпросмотра для этих разделов. Premiere Pro помечает разделы в эпизоде, для которых не выполнен рендеринг, цветной полосой рендеринга. Полоса рендеринга красного цвета на линейке времени эпизода указывает на раздел, для которого рендеринг не выполнен, но выполнить его желательно для воспроизведения в режиме реального времени и с полной частотой кадров. Полоса рендеринга желтого цвета указывает на раздел, для которого рендеринг не выполнен и которому он не требуется для воспроизведения в режиме реального времени и с полной частотой кадров. Независимо от качества предпросмотра, для разделов, помеченных полосой рендеринга красного или желтого цвета, необходимо выполнить рендеринг перед экспортом на пленку. Полоса рендеринга зеленого цвета указывает на раздел, для которого уже выполнен рендеринг файлов предпросмотра, связанных с ним.
Эпизоды ссылаются на файлы предпросмотра примерно так же, как и на исходные медиаданные. При перемещении или удалении файлов предпросмотра из обозревателя файлов Windows или Mac, а не с панели «Проект», при следующем открытии проекта вам будет предложено выполнить поиск или пропустить файлы предпросмотра.
Чтобы разрешить предпросмотр 10-битного или 8-битного материала без сжатия, можно настроить шаблон настроек эпизода. Дополнительные сведения см. в разделе Создание эпизода с воспроизведением видео без сжатия.
В этом сборнике часто задаваемых вопросов на форумах Adobe описано, что может означать в эпизоде красная или желтая полоса.