wavetableSynthesizer

Сгенерируйте периодический сигнал от одноциклических форм волны

Описание

The wavetableSynthesizer Система object™ генерирует периодический сигнал с настраиваемыми свойствами. Периодический сигнал определяется одноциклической формой волны, кэшированной как Wavetable свойство вашего wavetableSynthesizer объект.

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

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

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

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

Создание

Описание

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

waveSynth = wavetableSynthesizer(wavetableValue) устанавливает свойство Wavetable на wavetableValue.

waveSynth = wavetableSynthesizer(wavetableValue,frequencyValue) устанавливает свойство Frequency на frequencyValue.

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

Пример: waveSynth = wavetableSynthesizer('Amplitude',2,'DCOffset',2.5) создает Системный объект, waveSynth, который генерирует сигнал синуса по умолчанию с амплитудой 2 и смещением постоянного тока 2,5.

Свойства

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

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

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

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

Одноступенчатая форма волны, заданная как вектор вещественных значений. Алгоритм wavetableSynthesizer индексы в одноступенчатую форму волны для синтеза периодической волны.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это свойство определяет длину вектора, которую вы wavetableSynthesizer выходы объекта.

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

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

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

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

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

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

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

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

Синтаксис

Описание

пример

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

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

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

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

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

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

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

release(obj)

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

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

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

СвойствоОбласть значенийОтображениеМодуль
Frequency[0.1, 20000]журналHz
Amplitude[0, 10]линейныйничего
DCOffset[–10, 10]линейныйничего

Примеры

свернуть все

Задайте и постройте график одноциклической формы волны.

values = -1:0.1:1;
singleCycleWave = ones(100,1) * values;
singleCycleWave = reshape(singleCycleWave,numel(singleCycleWave),1);

plot(singleCycleWave)
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes. The axes contains an object of type line.

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

waveSynth = wavetableSynthesizer(singleCycleWave,10);

Создайте временные возможности для визуализации лестничной волны, сгенерированной waveSynth.

scope = timescope( ...
    'SampleRate',waveSynth.SampleRate, ...
    'TimeSpanSource','Property','TimeSpan',0.1, ...
    'YLimits',[-1.5,1.5], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true, ...
    'Title','Variable-Frequency Staircase Wave');

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

counter = 0;
while (counter < 1e4)
    counter = counter + 1;
    staircaseWave = waveSynth();
    scope(staircaseWave)
    if mod(counter,1000)==0
        waveSynth.Frequency = waveSynth.Frequency + 10;
    end
end

Образец аудио файла и сохранение его в Wavetable свойство wavetableSynthesizer Системные object™. Используйте волновой синтезатор, чтобы манипулировать аудио выборки.

Чтение в целом аудио файла. Вырезать интересный звук из аудио и затем воспроизвести его.

[audio,fs] = audioread('MainStreetOne-16-16-mono-12secs.wav');

aSound = audio(2.5e4:5e4);
sound(aSound,fs)

Создайте волнообразный синтезатор с помощью аудиоролика. Длительность engine аудиоклип numel(aSound)/fs секунд. В wavetableSynthesizer, установите Frequency свойство для 1/( длительность клипа). Сгенерированный сигнал теперь воспроизводится с той же скоростью, с которой он был записан.

duration = numel(aSound)/fs;
waveSynth = wavetableSynthesizer('Wavetable',aSound,'SampleRate',fs, ...
    'Frequency',1/duration);

Создайте audioDeviceWriter чтобы написать на своё аудио устройство.

deviceWriter = audioDeviceWriter('SampleRate',fs);

В цикле воспроизведите волнообразный синтезатор на своем устройстве. Через три секунды начните увеличивать частоту волнообразного синтезатора. Через шесть секунд начните уменьшать частоту волнообразного синтезатора.

timeElapsed = 0;
while timeElapsed < 9
    audioWave = waveSynth();
    deviceWriter(audioWave);
    
    if (timeElapsed > 3) && (timeElapsed < 6)
        waveSynth.Frequency = waveSynth.Frequency + 0.001;
    elseif timeElapsed > 6
        waveSynth.Frequency = waveSynth.Frequency - 0.002;
    end
    
    timeElapsed = timeElapsed + waveSynth.SamplesPerFrame*(1/fs);
end

Измените Wavetable свойство wavetableSynthesizer объект во время обработки потока. Визуализируйте wavetable и проигрывайте полученный аудио.

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

t = 0:0.001:1;
exponent = 5;
waveTable = [t.^exponent,fliplr(t.^exponent)] - 0.5;

waveSynth = wavetableSynthesizer('Wavetable',waveTable);

Создайте dsp.ArrayPlot объект, чтобы построить график wavetable, который изменяется с течением времени. Создайте audioDeviceWriter объект, чтобы прослушать сигнал, выводимый вашим волновым синтезатором.

arrayPlotter = dsp.ArrayPlot('YLimits',[-1,1],'PlotType','Line');
deviceWriter = audioDeviceWriter;

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

tic
while toc < 10
    exponent = exponent - 0.01;
    waveSynth.Wavetable = [t.^abs(exponent),fliplr(t.^abs(exponent))] - 0.5;
    
    arrayPlotter(waveSynth.Wavetable')
    
    deviceWriter(waveSynth());
end

release(deviceWriter)

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

fs = 44.1e3;
wvSynth = wavetableSynthesizer('SampleRate',fs);

scope = timescope( ...
    'SampleRate',wvSynth.SampleRate, ...
    'TimeSpanSource','Property','TimeSpan',1, ...
    'YLimits',[-2,2], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true);

deviceWriter = audioDeviceWriter('SampleRate',wvSynth.SampleRate);

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

parameterTuner(wvSynth)

Figure Audio Parameter Tuner: wavetableSynthesizer [wvSynth] contains an object of type uigridlayout.

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

  1. Вызовите волновой синтезатор без аргументов, чтобы вывести одну систему координат данных.

  2. Визуализируйте данные с помощью временных возможностей.

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

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

duration = 15;
numIterations = round(wvSynth.SampleRate*duration/wvSynth.SamplesPerFrame);
for i = 1:numIterations
    audioOut = wvSynth();
    scope(audioOut)
    deviceWriter(audioOut);
    drawnow limitrate % required to update parameter
end

Figure Audio Parameter Tuner: wavetableSynthesizer [wvSynth] contains an object of type uigridlayout.

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

release(deviceWriter)
release(wvSynth)
release(scope)

Алгоритмы

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

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

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

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