Unity 6.3
0 онлайн 2 гостей 3 в системе
Вход

Пример нативных аудио плагинов, включенных в SDK

аудио плагин SDK содержит разные типы аудиоплагинов. Код плагинов в SDK находится в общественном достоянии, поэтому его можно использовать как шаблон. В проекте есть примеры нативных DSP-плагинов с настраиваемым GUI и без него.

Если вы хотите использовать IDE для редактирования и компиляции примерного кода плагина, SDK включает проекты для нескольких IDEs. В следующей таблице показано, где найти проекты для каждого из IDEs:

IDE Местоположение
визуальная студия NativeAudioPlugins-master\NativeCode\VisualStudio\AudioPluginDemo.sln (Проект плагина).
визуальная студия NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI\AudioPluginDemoGUI.sln (проект GUI).
XCode NativeAudioPlugins-master\NativeCode\Xcode\AudioPluginDemo.xcodeproj
UWP NativeAudioPlugins-master\NativeCode\UWP\AudioPluginDemo.sln

Чтобы получить доступ к примеру плагинов в Unity:

  1. Откройте проект demos Unity (папка: NativeAudioPlugin > Ассеты).

  2. В проекте Unity перейдите в Ассеты > mixers.

  3. Нажмите на стрелку рядом с некоторыми миксерами, чтобы расширить их.

  4. Нажмите на любой контроллер группы Audio Mixer. В Inspector, он показывает любые эффекты, прикрепленные к контроллеру группы Audio Mixer.

  5. Чтобы добавить эффект, нажмите кнопку Добавить эффект. В этом списке перечислены все эффекты плагинов, которые можно добавить.

  6. Выберите эффект, который вы хотите добавить. Unity отображает ваш эффект в Inspector.

Если вы вступаете в режим воспроизведения с открытым Inspector, некоторые эффекты обновляются по мере изменения звуков.

Примеры плагинов без пользовательских GUIs

В этом разделе перечислены несколько примеров плагинов, включенных в проект AudioNativePlugin, которые имеют по умолчанию слайдеры Unity вместо пользовательского GUI.

Чтобы получить прямой доступ к файлам кода плагина, в папке SDK перейдите в NativeAudioPlugins/NativeCode.

Простые плагины без пользовательских GUIs.
Простые плагины без пользовательских GUIs.

Плагин NoiseBox

Плагин NoiseBox является плагином, который добавляет и умножает входной сигнал на белый шум на переменных частотах. Вы можете использовать это в сочетании с плагином Lofinator и анимированными параметрами, чтобы симулировать такие эффекты, как звуки мобильного телефона, плохое радиоприем и сломанные динамики.

Пример плагина Ring Modulator

Пример плагина Ring Modulator является примером простого модулятора, который умножает любой входящий сигнал на синусоидальную волну. Это дает радио-шум или эффект потерянного сигнала. Чтобы увеличить эффект, цепьте вместе несколько эффектов кольцевой модуляции с разными частотами.

Пример плагина StereoWidener

Плагин StereoWidener разлагает стерео входной сигнал на моно и боковые компоненты с переменной задержкой и затем рекомбинирует их для увеличения воспринимаемого стерео эффекта.

Плагин Lofinator

Плагин Lofinator выполняет простое понижение семплирования и квантование сигнала. Вы можете использовать это в сочетании с плагином NoiseBox и анимированными параметрами, чтобы симулировать такие эффекты, как звуки мобильного телефона, плохое радиоприем, и сломанные динамики.

Пример аудио плагинов с пользовательским GUIs

В этом разделе представлены расширенные варианты использования плагинов, включая эффекты для эквалайзера и многодиапазонного сжатия. Эти плагины имеют больше параметров, чем плагины в предыдущем разделе. Некоторые параметры плагинов слишком сложны для стандартных ползунков.

Чтобы получить прямой доступ к примеру пользовательского кода GUI, в папке SDK перейдите в NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI.

Пример плагина эквалайзера

Эквалайзер включает в себя график, показывающий кривую результата и вклад отдельных фильтров. Чтобы изменить один или несколько параметров, нажмите и перетащите parameter(s) на графике управления. Таким образом, вам не нужно изменять каждый ползунок по отдельности.

Окно Inspector отображает плагин Эквалайзер с графом управления и ползунок для индивидуальных настраиваемых параметров.
Окно Inspector отображает плагин Эквалайзер с графом управления и ползунок для индивидуальных настраиваемых параметров.

Чтобы изменить усиление и частоты кривой фильтра, перетащите три полосы на графе управления. Чтобы изменить форму каждой полосы, удерживайте клавишу Shift и щелкните и перетащите полосу.

Внутренние функции API Unity позволяют строить кривые и рисовать сглаженные кривые для амплитудно-частотной характеристики.

Код для анализа данных плагина и производительности GUI

Оба плагина Equalizer и Multiband также предоставляют код для наложения входных и выходных спектров для визуализации эффекта плагинов. Код GUI работает с гораздо меньшей частотой обновления, чем обработка аудио и не имеет доступа к аудио потокам. Поэтому, для чтения этих данных, нативный код предоставляет следующую функцию:

UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK GetFloatParameterCallback(
    UnityAudioEffectState* state,
    int index,
    float* value,
    char *valuestr)
{
    EffectData::Data* data = &state->GetEffectData<EffectData>()->data;
    if(index >= P_NUM)
        return UNITY_AUDIODSP_ERR_UNSUPPORTED;
    if(value != NULL)
        *value = data->p[index];
    if(valuestr != NULL)
        valuestr[0] = 0;
  return UNITY_AUDIODSP_OK;
}

Эта функция позволяет GUI читать данные с плавающей точкой из нативного плагина. Существует также вариант массива, называемый GetFloatBufferCallback. Система плагина принимает любые данные, пока запрос не влияет на производительность UI или нативного кода.

Для кода Equalizer и Multiband вспомогательный класс с именем FFTAnalyzer позволяет легко вводить и выводить данные из плагина и получать спектр обратно. Затем, GetFloatBufferCallback пересемплирует эти спектральные данные и отправляет их в код C# GUI.

Данные должны быть переформатированы, чтобы FFTAnalyzer запустил анализ с фиксированным разрешением частоты. GetFloatBufferCallback просто возвращает количество запрошенных образцов, которое определяется шириной представления, отображающего данные.

Пример плагина CorrelationMeter

Плагин CorrelationMeter имеет минимальное количество кода DSP. Этот плагин рисует амплитуду левого канала против амплитуды правого канала, чтобы показать стерео эффекты сигнала.

Настраиваемый GUI плагина CorrelationMeter.
Настраиваемый GUI плагина CorrelationMeter.
Эквалайзер GUI с наложенным спектральным анализом (зеленая кривая — источник, красная — обработка).
Эквалайзер GUI с наложенным спектральным анализом (зеленая кривая — источник, красная — обработка).

Эквалайзер и мультидиапазонные эффекты намеренно сохранены простыми и неоптимизированными, но они служат хорошими примерами более сложных UIs, которые поддерживаются системой плагинов.

Инструмент мониторинга громкости

Это пример инструмента мониторинга громкости, измеряющего уровни в 3 различных временных масштабах. Это только для демонстрационных целей, но позволяет вам создать инструмент мониторинга, соответствующий современным стандартам громкости. Код отображения кривой встроен в Unity.

Окно Inspector отображает плагин инструмента мониторинга громкости с графиком и ползунок для индивидуальных настраиваемых параметров.
Окно Inspector отображает плагин инструмента мониторинга громкости с графиком и ползунок для индивидуальных настраиваемых параметров.

Синхронизация с часами DSP

Вы также можете использовать систему плагинов для генерации звука вместо его обработки.

Plugin_TeeBee.cpp и Plugin_TeeDee.cpp являются простыми синтезаторами, которые: * генерируют паттерны с случайными нотами * имеют параметры для настройки фильтров и конвертов в синтезирующем движке

ProcessCallback читает параметр state->dsptick для определения позиции в песне. Этот счетчик является глобальной позицией семпла. Чтобы все эффекты плагина оставались синхронизированными с одним и тем же семплом:

  1. Делите счетчик на длину каждой ноты, указанной в образце.

  2. Когда это деление имеет нулевой остаток, подать событие ноты в синтезатор.

Если вы хотите воспроизвести предварительно записанный музыкальный трек с известным темпом с помощью такого эффекта, используйте информацию о времени для применения синхронизированных с темпом эффектов фильтра или задержек к музыке.

Пространственность

Пространственность SDK является примером плагина, который использует нативный аудио плагин SDK пространственная пространственность как основа. SDK позволяет разрабатывать настраиваемые эффекты пространственной локализации для каждого источника звука. Дополнительные сведения см. в Аудио пространственный анализатор SDK.

Дополнительные ресурсы