wavetableSynthesizer

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

Описание

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

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

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

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

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

Создание

Описание

waveSynth = wavetableSynthesizer создает wavetable Системный объект синтезатора, 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 и смещением DC 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.

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

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

Waveform выход от wavetable синтезатора, возвращенного как вектор-столбец с длиной, заданной свойством 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]журналГц
Amplitude[0, 10]линейный'none'
DCOffset[–10, 10]линейный'none'

Примеры

свернуть все

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

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 object. The axes object contains an object of type line.

Создайте wavetable синтезатор, 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');

Поместите wavetable синтезатор в цикл аудиопотока. Увеличьте частоту своей волны лестницы с шагом на 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™. Используйте wavetable синтезатор, чтобы управлять вашим аудиосэмплом.

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

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

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

Создайте wavetable синтезатор с помощью аудиоклипа. Длительность 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);

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

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 индексировать в. Создайте wavetable объект синтезатора.

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

waveSynth = wavetableSynthesizer('Wavetable',waveTable);

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

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

В цикле аудиопотока инкрементно измените Wavetable свойство 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 открыть пользовательский интерфейс для настроек параметров wavetable синтезатора при потоковой передаче.

parameterTuner(wvSynth)

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

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

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

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

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

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

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)

Алгоритмы

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

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

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

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

|

Введенный в R2016a