wavetableSynthesizer

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

Описание

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

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

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

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

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

Создание

Синтаксис

waveSynth = wavetableSynthesizer
waveSynth = wavetableSynthesizer(wavetableValue)
waveSynth = wavetableSynthesizer(wavetableValue,frequencyValue)
waveSynth = wavetableSynthesizer(___,Name,Value)

Описание

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 Используя Системные объекты (MATLAB).

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

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

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

Типы данных: 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

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

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

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

Синтаксис

waveform = waveSynth()

Описание

пример

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 = dsp.TimeScope( ...
    'SampleRate',waveSynth.SampleRate, ...
    '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-24-96-stereo-63secs.wav');

engine = audio(5.35e6:5.45e6);
sound(engine,fs)

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

duration = numel(engine)/fs;
waveSynth = wavetableSynthesizer('Wavetable',engine,'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 object™ в то время как потоковая обработка. Визуализируйте 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, чтобы сгенерировать форму волны. Создайте dsp.TimeScope, чтобы визуализировать форму волны. Создайте audioDeviceWriter, чтобы записать аудио в вашу звуковую карту.

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

scope = dsp.TimeScope( ...
    'SampleRate',wvSynth.SampleRate, ...
    '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