audioOscillator

Сгенерируйте синус, квадрат и пилообразные формы волны

Описание

Система audioOscillator object™ генерирует настраиваемые формы волны. Типичное использование включает генерацию тестовых сигналов для испытательных стендов и генерацию управляющих сигналов для звуковых эффектов. Свойства Системного объекта audioOscillator задают тип сгенерированной формы волны.

Сгенерировать настраиваемые формы волны:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

osc = audioOscillator
osc = audioOscillator(signalTypeValue)
osc = audioOscillator(signalTypeValue,frequencyValue)
osc = audioOscillator(___,Name,Value)

Описание

osc = audioOscillator создает аудио Системный объект осциллятора, osc, со значениями свойств по умолчанию.

osc = audioOscillator(signalTypeValue) устанавливает свойство SignalType на signalTypeValue.

osc = audioOscillator(signalTypeValue,frequencyValue) устанавливает свойство Frequency на frequencyValue.

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

Пример: osc = audioOscillator('SignalType','sine','Frequency',8000,'DCOffset',1) создает Системный объект, osc, который генерирует синусоиды на 8 кГц со смещением DC одного.

Свойства

развернуть все

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

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

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

Тип формы волны сгенерирован вашим объектом audioOscillator, заданным как 'sine', 'square' или 'sawtooth'.

Формы волны сгенерированы с помощью алгоритмов, заданных sin, square и функциями sawtooth.

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

Типы данных: char | string

Частота сгенерированной формы волны в Гц, заданном как действительный скаляр или вектор действительных скаляров, больше, чем или равный 0.

  • Для форм волны синуса задайте Frequency как скаляр или как вектор длины NumTones.

  • Для квадратных форм волны задайте Frequency как скаляр.

  • Для пилообразных форм волны задайте Frequency как скаляр.

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

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

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

  • Для форм волны синуса задайте Amplitude как вектор длины NumTones.

  • Для квадратных форм волны задайте Amplitude как скаляр.

  • Для пилообразных форм волны задайте Amplitude как скаляр.

Сгенерированная форма волны умножается на значение, заданное Amplitude при выводе, прежде чем DCOffset будет применен.

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

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

Нормированное смещение фазы сгенерированной формы волны, заданной как действительный скаляр или вектор действительных скаляров со значениями в области значений [0, 1]. Область значений является нормированным 2π-radian интервал.

  • Для форм волны синуса задайте PhaseOffset как вектор длины NumTones.

  • Для квадратных форм волны задайте PhaseOffset как скаляр.

  • Для пилообразных форм волны задайте PhaseOffset как скаляр.

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

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

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

  • Для форм волны синуса задайте DCOffset как вектор длины NumTones.

  • Для квадратных форм волны задайте DCOffset как скаляр.

  • Для пилообразных форм волны задайте DCOffset как скаляр.

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

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

Количество чистых тонов формы волны синуса суммировано и затем сгенерированное аудио осциллятором.

Отдельные тоны сгенерированы на основе значений, заданных Frequency, Amplitude, PhaseOffset и DCOffset.

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

Зависимости

Чтобы включить это свойство, установите SignalType на 'sine'.

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

Квадратный рабочий цикл формы волны, заданный как скаляр в области значений [0, 1].

Square waveform duty cycle является процентом одного периода, в который форма волны выше средней амплитуды. DutyCycle 1 или 0 эквивалентен смещению DC.

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

Зависимости

Чтобы включить это свойство, установите SignalType на 'square'.

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

Пилообразная ширина, заданная как скаляр в области значений [0, 1].

Sawtooth width определяет точку в пилообразный период формы волны, в который происходит максимум.

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

Зависимости

Чтобы включить это свойство, установите SignalType на 'sawtooth'.

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

Количество выборок на кадр, заданный как положительное целое число в области значений [1, 192000].

Это свойство определяет длину вектора что ваш объект audioOscillator выходные параметры.

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

Тип данных сгенерированной формы волны, заданной как 'double' или 'single'.

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

Типы данных: char | string

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

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

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

waveform = osc()

Описание

пример

waveform = osc() генерирует форму волны вывод, waveform. Тип формы волны задан алгоритмом и свойствами Системного объекта, osc.

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

развернуть все

Waveform вывод от аудио осциллятора, возвращенного как вектор-столбец с длиной, заданной свойством SamplesPerFrame.

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

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

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

release(obj)

развернуть все

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

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

СвойствоОбласть значенийОтображениеМодули
Frequency[0.1, 20000]журналГц
Amplitude[0, 10]линейныйникакие модули
DCOffset[–10, 10]линейныйникакие модули
DutyCycle (доступный, когда вы устанавливаете SignalType на 'square'),[0, 1]линейныйникакие модули
Width (доступный, когда вы устанавливаете SignalType на 'sawtooth'),[0, 1]линейныйникакие модули

Примеры

развернуть все

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

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

osc = audioOscillator;

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

scope = dsp.TimeScope( ...
    'SampleRate',osc.SampleRate, ...
    'TimeSpan',0.1, ...
    'YLimits',[-1.5,1.5], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true, ...
    'Title','Variable-Frequency Sine Wave');

Поместите аудио осциллятор в цикл аудиопотока. Увеличьте частоту своей синусоиды с шагом на 50 Гц.

counter = 0;
while (counter < 1e4)
    counter = counter + 1;
    sineWave = osc();
    scope(sineWave);
    if mod(counter,1000)==0
        osc.Frequency = osc.Frequency + 50;
    end
end

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

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

notes = struct('C4',261.63,'E4',329.63,'G4sharp',415.30,'A4',440,'B4',493.88, ...
    'C5',523.25,'D5',587.25,'D5sharp',622.25,'E5',659.25,'Silence',0);

Создайте audioOscillator и Систему audioDeviceWriter objects™. Используйте настройки по умолчанию.

osc = audioOscillator;
aDW = audioDeviceWriter;

Создайте вектор с начальной мелодией Фур Элис.

melody = [notes.Silence notes.Silence,...
    notes.E5 notes.D5sharp notes.E5 notes.D5sharp notes.E5 notes.B4 ...
        notes.D5 notes.C5 notes.A4 notes.A4 notes.Silence ...
    notes.C4 notes.E4 notes.A4 notes.B4 notes.B4 notes.Silence ...
    notes.E4 notes.G4sharp notes.B4 notes.C5 notes.C5 notes.Silence];

Задайте длительность примечания в секундах. В цикле аудиопотока вызовите свой аудио осциллятор и запишите звук в ваше аудио устройство. Обновите частоту аудио осциллятора во временных шагах noteDuration, чтобы следовать за мелодией. Как лучшая практика, выпустите свои объекты однажды завершенный.

noteDuration = 0.3;
      
i = 1;
tic
while i < numel(melody)
    tone = osc();
    aDW(tone);
    if toc >= noteDuration
        i = i + 1;
        osc.Frequency = melody(i);
        tic
    end
end

release(osc);
release(aDW);

Создайте низкочастотный осциллятор (LFO) lowpass фильтр, с помощью audioOscillator в качестве управляющего сигнала.

Создайте dsp.AudioFileReader и Системные объекты audioDeviceWriter, чтобы читать из звукового файла и записать в ваше аудио устройство. Создайте biquad объект фильтра, чтобы применить lowpass, фильтрующий к вашему звуковому сигналу.

fileReader = dsp.AudioFileReader('Filename','Engine-16-44p1-stereo-20sec.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);
lowpassFilter = dsp.BiquadFilter( ...
    'SOSMatrixSource','Input port', ...
    'ScaleValuesInputPort',false);

Создайте аудио объект осциллятора. Ваши аудио средства управления осциллятором частота среза lowpass просачиваются цикл аудиопотока.

osc = audioOscillator('SignalType','sawtooth', ...
    'DCOffset',0.05, ...
    'Amplitude',0.03, ...
    'SamplesPerFrame',fileReader.SamplesPerFrame, ...
    'SampleRate',fileReader.SampleRate, ...
    'Frequency',5);

В цикле пропустите звуковой сигнал через фильтр lowpass. Запишите выходной сигнал в свое аудио устройство.

while ~isDone(fileReader)
    audioIn    = fileReader();
    ctrlSignal = osc();
    [B,A]      = designVarSlopeFilter(48,ctrlSignal(end));
    audioOut   = lowpassFilter(audioIn,B,A);
    deviceWriter(audioOut);
end

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

release(osc)
release(fileReader)
release(deviceWriter)

Для большего количества полноценного внедрения Фильтра LFO см. audiopluginexample. LFOFilter в галерее Audio Plugin Example.

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

Смотрите также

Системные объекты

Введенный в R2016a

Для просмотра документации необходимо авторизоваться на сайте