noiseGate

Динамическая область значений ворот

Описание

The noiseGate Система object™ выполняет динамическое преобразование области значений независимо по каждому входному каналу. Динамическое стробирование области значений подавляет сигналы ниже заданного порога. Он использует указанные время атаки, релизы и удержания, чтобы достичь плавной приложенной кривой усиления. Свойства noiseGate Системный объект задает тип динамической области значений стробирования.

Для выполнения динамической области значений стробирования:

  1. Создайте noiseGate Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

dRG = noiseGate создает Системный объект, dRG, который выполняет динамическую область значений независимо по каждому входному каналу.

dRG = noiseGate(thresholdValue) устанавливает свойство Threshold на thresholdValue.

пример

dRG = noiseGate(___,Name,Value) устанавливает каждое свойство Name к заданной Value. Неопределенные свойства имеют значения по умолчанию.

Пример: dRG = noiseGate('AttackTime',0.01,'SampleRate',16000) создает Системный объект, dRG, со временем атаки 10 мс и частотой дискретизации 16 кГц.

Свойства

расширить все

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

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Операционный порог в дБ, заданный как действительный скаляр.

Operation threshold - уровень, ниже которого коэффициент усиления прикладывается к входному сигналу.

Настраиваемый: Да

Типы данных: single | double

Время атаки в секундах, заданное как действительный скаляр, больший или равный 0.

Attack time время, когда приложенный коэффициент усиления увеличивается с 10% до 90% от его конечного значения, когда вход идет ниже порога.

Настраиваемый: Да

Типы данных: single | double

Время релиза в секундах, заданное как действительный скаляр, больший или равный 0.

Release time время, когда приложенный коэффициент усиления падает с 90% до 10% от его конечного значения, когда вход переходит выше порога.

Настраиваемый: Да

Типы данных: single | double

Время удержания в секундах, заданное как действительный скаляр, больший или равный 0.

Hold time - период, в течение которого (отрицательный) коэффициент усиления удерживается перед началом уменьшения к своему установившемуся значению, когда входной уровень падает ниже порога.

Настраиваемый: Да

Типы данных: single | double

Вход скорость выборки в Гц, заданная как положительная скалярная величина.

Настраиваемый: Да

Типы данных: single | double

Включите вход боковой цепи, заданный как true или false. Это свойство определяет количество доступных входов на noiseGate объект.

  • false - Вход Sidechain отключен, и noiseGate объект принимает один вход: audioIn данные, которые должны быть закрыты.

  • true - Вход Sidechain включен и noiseGate объект принимает два входов: audioIn данные, которые будут стробироваться, и вход боковой цепи, используемый для вычисления gain применяется noiseGate.

Тип данных sidechain и (система координат) должны быть такими же, как и audioIn.

Количество каналов боковой цепи должно быть равно количеству каналов audioIn или равен единице. Когда количество боковых каналов равно единице, gain Вычисленный на основе этого канала применяется ко всем каналам audioIn. Когда количество боковых каналов равно количеству каналов в audioIn, а gain Вычисленный для каждого бокового канала применяется к соответствующему каналу audioIn.

Настраиваемый: Нет

Использование

Описание

пример

audioOut = dRG(audioIn) выполняет динамическую область значений стробирования по входному сигналу, audioIn, и возвращает закрытый сигнал, audioOut. Тип динамической области значений стробирования задается алгоритмом и свойствами noiseGate Системный объект, dRG.

[audioOut,gain] = dRG(audioIn) также возвращает приложенный коэффициент усиления в дБ для каждой входной выборки.

Входные параметры

расширить все

Аудио вход в шумовой затвор, заданный как матрица. Столбцы матрицы рассматриваются как независимые аудиоканалы.

Типы данных: single | double

Выходные аргументы

расширить все

Аудио выхода от шумовых ворот, возвращенный как матрица того же размера, как audioIn.

Типы данных: single | double

Усиление, приложенное шумовыми воротами, возвращается как матрица того же размера, как audioIn.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

visualizeВизуализируйте статическую характеристику контроллера динамической области значений
createAudioPluginClassСоздайте класс аудиоплагина, который реализует функциональность Системного объекта
parameterTunerНастройка параметров объекта во время потоковой передачи
configureMIDIСконфигурируйте соединения MIDI между аудио объекта и MIDI контроллера
disconnectMIDIОтсоедините элементы управления MIDI от аудио объекта
getMIDIConnectionsПолучите MIDI-соединения аудио объекта
cloneСоздайте повторяющийся системный объект
isLockedОпределите, используется ли системный объект
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта
stepЗапуск алгоритма системного объекта

createAudioPluginClass и configureMIDI функции сопоставляют настраиваемые свойства noiseGate Системный объект по пользовательским параметрам:

СвойствоОбласть значенийОтображениеМодуль
Threshold[–140, 0]линейныйdB
AttackTime[0, 4]линейныйсекунды
ReleaseTime[0, 4]линейныйсекунды
HoldTime[0, 4]линейныйсекунды

Примеры

свернуть все

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

Настройте dsp.AudioFileReader и audioDeviceWriter Системные objects™.

frameLength = 1024;
fileReader = dsp.AudioFileReader( ...
    'Filename','Counting-16-44p1-mono-15secs.wav', ...
    'SamplesPerFrame',frameLength);
deviceWriter = audioDeviceWriter( ...
    'SampleRate',fileReader.SampleRate);

Портируйте аудиосигнал с Гауссовым шумом. Воспроизведение аудио.

while ~isDone(fileReader)
    x = fileReader();
    xCorrupted = x + (1e-2/4)*randn(frameLength,1);
    deviceWriter(xCorrupted);
end

release(fileReader)

Установите динамическую область значений ворот с порогом -25 дБ, временем атаки 0,01 секунды, временем релиза 0,02 секунды и временем удержания 0 секунд. Используйте частоту дискретизации устройства чтения аудио файла.

gate = noiseGate(-25, ...
    'AttackTime',0.01, ...
    'ReleaseTime',0.02, ...
    'HoldTime',0, ...
    'SampleRate',fileReader.SampleRate);

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

scope = timescope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpanSource','property',...
    'TimeSpan',16, ...
    'BufferLength',1.5e6, ...
    'YLimits',[-1 1], ...
    'ShowGrid',true, ...
    'ShowLegend',true, ...
    'Title','Corrupted vs. Gated Audio');

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

while ~isDone(fileReader)
    x = fileReader();
    xCorrupted = x + (1e-2/4)*randn(frameLength,1);
    y = gate(xCorrupted);
    deviceWriter(y);
    scope([xCorrupted,y]);
end

release(fileReader)
release(gate)
release(deviceWriter)
release(scope)

Создайте dsp.AudioFileReader для чтения в аудиокадре за кадром. Создайте audioDeviceWriter чтобы записать аудио на звуковую карту. Создайте noiseGate для обработки аудио данных.

frameLength = 1024;
fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3', ...
    'SamplesPerFrame',frameLength);
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

dRG = noiseGate('SampleRate',fileReader.SampleRate);

Функции parameterTuner чтобы открыть пользовательский интерфейс для настройки параметров noiseGate во время потоковой передачи.

parameterTuner(dRG)

В цикле аудиопотока:

  1. Чтение в системе координат аудио из файла.

  2. Применить динамическую область значений стробирования.

  3. Запишите систему координат аудио в своё аудио устройство для прослушивания.

Во время потоковой передачи настройте параметры динамической области значений ворот и прослушайте эффект.

while ~isDone(fileReader)
    audioIn = fileReader();
    audioOut = dRG(audioIn);
    deviceWriter(audioOut);
    drawnow limitrate % required to update parameter
end

Как лучшая практика, отпустите объекты после выполнения.

release(deviceWriter)
release(fileReader)
release(dRG)

Используйте вход EnableSidechain noiseGate объект для эмуляции электронного контроллера барабана, также известного как мультипад. Этот метод распространён в звукозаписи студийного производства и создает интересные изменения в тембре инструмента. Боковой сигнал управляет стробированием входного сигнала. Строение боковой цепи уменьшает амплитуду входного сигнала, когда сигнал боковой цепи падает ниже Порога noiseGate. Шумовые ворота по сути являются expander с бесконечным Отношением.

Подготовка аудио Файлов

Преобразуйте боковой сигнал из стерео в моно.

[expanderSideChainStereo,Fs] = audioread('FunkyDrums-44p1-stereo-25secs.mp3');
expanderSideChainMono = (expanderSideChainStereo(:,1) + expanderSideChainStereo(:,2)) / 2;

Запишите преобразованный боковой сигнал в файл.

audiowrite('convertedSidechainSig.wav',expanderSideChainMono,Fs);

Создание аудио Объектов

Создайте dsp.AudioFileReader объект для входа и боковых сигналов. Чтобы позволить скрипту запускаться бессрочно, измените playbackCount переменная от 1 на Inf.

inputAudio = 'SoftGuitar-44p1_mono-10mins.ogg';
sidechainAudio  = 'convertedSidechainSig.wav';
playbackCount = 1;
inputAudioAFR = dsp.AudioFileReader(inputAudio,'PlayCount',playbackCount);
sidechainAudioAFR = dsp.AudioFileReader(sidechainAudio,'PlayCount',playbackCount);

Построение и визуализация noiseGate объект. Используйте Fast AttackTime и ReleaseTime, и короткое HoldTime.

dRG = noiseGate('EnableSidechain',true,'Threshold',-15,'AttackTime',...
    0.08,'ReleaseTime',0.0001,'HoldTime',0.00001);
visualize(dRG)

Создайте audioDeviceWriter объект для воспроизведения боковых и входных сигналов.

afw = audioDeviceWriter;

Создайте timescope объект для просмотра входного сигнала, бокового сигнала, а также стробированного входного сигнала.

scope = timescope('NumInputPorts',3,...
                      'SampleRate',Fs,...
                      'TimeSpanSource','property',...
                      'TimeSpan',5,...
                       'TimeDisplayOffset',0,...
                      'LayoutDimensions',[3 1],...
                      'BufferLength',Fs*15,...
                      'TimeSpanOverrunAction','Scroll',...
                      'YLimits',[-1 1],...
                      'ShowGrid',true,...
                      'Title','Input Audio - Classical Guitar');
scope.ActiveDisplay = 2;
scope.YLimits = [-1 1];
scope.Title = 'Sidechain Audio - Drums';
scope.ShowGrid = true;
scope.ActiveDisplay = 3;
scope.YLimits = [-1 1];
scope.ShowGrid = true;
scope.Title = 'Gated Input Audio - Classical Guitar';

Функции parameterTuner чтобы открыть пользовательский интерфейс для настройки параметров ворот во время потоковой передачи. Настройте значения свойств и прослушайте эффект в реальном времени.

parameterTuner(dRG)

Figure Audio Parameter Tuner: noiseGate [dRG] contains an object of type uigridlayout.

Создайте аудиопотоковый цикл

Считывайте в систему координат аудио от ваших входов и боковых сигналов. Обработка входных и боковых сигналов с помощью noiseGate объект. Воспроизведите обработанные аудиосигналы и отображение аудиосигналы данных используя timescope объект.

Верхняя панель вашего timescope отображает вход аудиосигнал, а средняя панель отображает боковой аудиосигнал. На нижней панели отображается стробированный входной аудиосигнал.

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

while ~isDone(sidechainAudioAFR)
   inputAudioFrame = inputAudioAFR();
   sideChainAudioFrame = sidechainAudioAFR();
   noiseGateOutput  = dRG(inputAudioFrame,sideChainAudioFrame);
   afw(sideChainAudioFrame+noiseGateOutput); 
   scope(inputAudioFrame,sideChainAudioFrame,noiseGateOutput);
   drawnow limitrate;   % required to update parameter settings from UI
end

Отпустите ваши объекты.

release(inputAudioAFR)
release(sidechainAudioAFR)
release(dRG)
release(afw)
release(scope)

Алгоритмы

расширить все

The noiseGate Системный объект обрабатывает систему координат за кадром и элемент за элементом.

Ссылки

[1] Джаннулис, Димитриос, Майкл Массберг и Джошуа Д. Рейсс. Digital Dynamic Range Compressor Design -- A Tutorial and Analysis (неопр.) (недоступное руководство). Журнал Общества Аудиотехники. Том 60, Выпуск 6, 2012, стр. 399-408.

Расширенные возможности

.
Введенный в R2016a