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')

Создайте 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)

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

  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

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

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

Алгоритмы

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

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

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

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

|

Введенный в R2016a