主要内容

wavetableSynthesizer

从单周期波形产生周期信号

描述

wavetableSynthesizer系统对象™生成具有可调属性的周期信号。周期信号由缓存在中的单周期波形定义波表您的财产wavetableSynthesizer对象。

产生一个周期信号:

  1. 创建wavetableSynthesizer对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见<一个href="//www.tatmou.com/es/es/help/matlab/matlab_prog/what-are-system-objects.html" class="a">什么是系统对象?

创建

描述

waveSynth= wavetableSynthesizer创建一个波表合成器系统对象,waveSynth,使用默认属性值。

waveSynth= wavetableSynthesizer (wavetableValue设置<一个href="//www.tatmou.com/es/es/help/audio/ref/wavetablesynthesizer-system-object.html" class="intrnllnk">波表财产wavetableValue

waveSynth= wavetableSynthesizer (wavetableValuefrequencyValue设置<一个href="//www.tatmou.com/es/es/help/audio/ref/wavetablesynthesizer-system-object.html" class="intrnllnk">频率财产frequencyValue

waveSynth =波表合成器(___名称,值设置每个属性的名字到指定的价值。未指定的属性有默认值。

例子:waveSynth =波表合成器('振幅',2,'DCOffset',2.5)创建一个System对象,waveSynth,生成默认的正弦波形,振幅为2,直流偏置为2.5。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而<一个href="//www.tatmou.com/es/es/help/matlab/ref/matlab.system.releasesystemobject.html">释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见<一个href="//www.tatmou.com/es/es/help/matlab/matlab_prog/system-design-in-matlab-using-system-objects.html" class="a">使用系统对象的MATLAB系统设计。

单周期波形,指定为实值的矢量。的算法wavetableSynthesizer索引到单周期波形合成周期波。

可调:是的

数据类型:|

产生信号的频率(以Hz为单位),指定为大于或等于0的实标量。

可调:是的

数据类型:|

所产生信号的振幅,指定为大于或等于0的实标量。

所生成的信号乘以所指定的值振幅在输出前<一个href="//www.tatmou.com/es/es/help/audio/ref/wavetablesynthesizer-system-object.html" class="intrnllnk">DCOffset应用。

可调:是的

数据类型:|

生成信号的归一化相位偏移,指定为范围为[0,1]的实标量。该范围是一个标准化的2π弧度区间。

可调:没有

数据类型:|

添加到所生成信号的每个元素的值,指定为实标量。

可调:是的

数据类型:|

每帧的采样数,指定为范围为[1,<一个href="//www.tatmou.com/es/es/help/audio/ref/wavetablesynthesizer-system-object.html" class="intrnllnk">MaxSamplesPerFrame]。

这个属性决定了向量的长度wavetableSynthesizer对象输出。

可调:是的

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

每帧的最大采样数,指定为正整数。在使用代码生成时,将此属性设置为较低的值可以节省内存。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

所产生信号的采样率(以Hz为单位),指定为实正标量。

可调:是的

所生成信号的数据类型,指定为“双”“单一”

可调:没有

数据类型:字符|字符串

使用

描述

例子

波形= waveSynth ()产生一个周期信号,波形。的算法和属性指定信号的类型wavetableSynthesizer系统对象,waveSynth

输出参数

全部展开

从波表合成器输出的波形,作为列向量返回,其长度由<一个href="//www.tatmou.com/es/es/help/audio/ref/wavetablesynthesizer-system-object.html" class="intrnllnk">SamplesPerFrame属性指定的数据类型<一个href="//www.tatmou.com/es/es/help/audio/ref/wavetablesynthesizer-system-object.html" class="intrnllnk">OutputDataType财产。

数据类型:|

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

createAudioPluginClass 创建音频插件类,实现的功能系统对象
parameterTuner 在流处理时调优对象参数
configureMIDI 配置音频对象与MIDI控制器之间的MIDI连接
disconnectMIDI 从音频对象断开MIDI控件
getMIDIConnections 获取音频对象的MIDI连接
克隆 创建重复的系统对象
isLocked 确定系统对象正在使用中
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象
一步 运行系统对象算法

createAudioPluginClass而且configureMIDI属性的可调属性wavetableSynthesizer面向用户参数的系统对象:

财产 范围 映射 单位
频率 (0.1, 20000) 日志 赫兹
振幅 [0, 10] 线性 没有一个
DCOffset (-10年,10) 线性 没有一个

例子

全部折叠

定义并绘制一个单周期波形。

值= -1:0.1:1;singleCycleWave = ones(100,1) * values;singleCycleWave =重塑(singleCycleWave,numel(singleCycleWave),1);情节(singleCycleWave)包含(“指数”) ylabel (“振幅”

图中包含一个轴对象。axis对象包含一个line类型的对象。

创造一个波表合成器,waveSynth,利用单周期波形产生阶梯波。设置频率为10hz。

waveSynth =波表合成器(singleCycleWave,10);

创建一个时间范围,以可视化楼梯波产生waveSynth

Scope = timescope(...“SampleRate”, waveSynth。SampleRate,...“TimeSpanSource”“属性”“时间间隔”, 0.1,...“YLimits”[-1.5, 1.5],...“TimeSpanOverrunAction”“滚动”...“ShowGrid”,真的,...“标题”“可变频率阶梯波”);

将波表合成器置于音频流循环中。增加阶梯波的频率,以10hz为增量。

计数器= 0;(counter < 1e4) counter = counter + 1;楼梯波= waveSynth();范围(staircaseWave)如果国防部waveSynth(计数器,1000)= = 0。频率= waveSynth。频率+ 10;结束结束

对音频文件进行采样并将其保存到波表的属性wavetableSynthesizer系统对象™。使用波表合成器来操纵您的音频样本。

读入整个音频文件。从音频中截取一段有趣的声音,然后播放。

[音频,fs] = audioread(“MainStreetOne-16-16-mono-12secs.wav”);声波=音频(2.5e4:5e4);声音(aSound fs)

使用您的音频剪辑创建一个波表合成器。的持续时间引擎音频剪辑是元素个数(aSound) / fs秒。在wavetableSynthesizer,设置频率属性为1/(剪辑持续时间)。生成的信号现在以与记录时相同的速率回放。

duration = number (aSound)/fs;waveSynth =波表合成器(“波表”aSound,“SampleRate”fs,...“频率”1 /持续时间);

创建一个audioDeviceWriter写入音频设备。

deviceWriter = audioDeviceWriter(“SampleRate”fs);

在循环中,在你的设备上播放波形合成器。三秒钟后,开始增加波表合成器的频率。六秒钟后,开始降低波形合成器的频率。

timeElapsed = 0;timeElapsed < 9 audiwave = waveSynth();deviceWriter (audioWave);如果(timeElapsed > 3) && (timeElapsed < 6) waveSynth。频率= waveSynth。频率+ 0.001;elseiftimeElapsed > 6 waveSynth。频率= waveSynth。频率- 0.002;结束timeElapsed = timeElapsed + waveSynth.SamplesPerFrame*(1/fs);结束

修改波表的属性wavetableSynthesizer对象在流处理时。可视化波形表并播放结果音频。

创建一个单周期波形wavetableSynthesizer索引到。创建一个波表合成器对象。

T = 0:0.001:1;指数= 5;waveTable = [t.^exponent,fliplr(t.^exponent)] - 0.5;waveSynth =波表合成器(“波表”、波表);

创建一个dsp。ArrayPlot对象绘制随时间修改的波表。创建一个audioDeviceWriter对象监听波形合成器输出的信号。

arrayPlotter = dsp。ArrayPlot (“YLimits”[1],“PlotType”“行”);deviceWriter = audioDeviceWriter;

在音频流循环中,增量修改波表波形合成器的性质,并绘制其图形。调用合成器输出波形,并将波形播放到您的音频设备。

抽搐Toc < 10指数=指数- 0.01;waveSynth。波表=[t.^abs(exponent),fliplr(t.^abs(exponent))] - 0.5; arrayPlotter(waveSynth.Wavetable') deviceWriter(waveSynth());结束

发行版(deviceWriter)

创建一个wavetableSynthesizer生成波形。创建一个timescope使波形可视化。创建一个audioDeviceWriter将音频写入声卡。

Fs = 44.11 e3;wvSynth =波表合成器(“SampleRate”fs);Scope = timescope(...“SampleRate”, wvSynth。SampleRate,...“TimeSpanSource”“属性”“时间间隔”, 1...“YLimits”(2, 2),...“TimeSpanOverrunAction”“滚动”...“ShowGrid”,真正的);deviceWriter = audioDeviceWriter(“SampleRate”, wvSynth.SampleRate);

调用parameterTuner打开一个UI来调整波表合成器的参数,而流。

parameterTuner (wvSynth)

在音频流循环中:

  1. 调用不带参数的波表合成器输出一帧数据。

  2. 使用时间范围可视化数据。

  3. 将音频帧写入音频设备以供收听。

流媒体时,调整波形合成器的参数,听效果。

持续时间= 15;numIterations = round(wvsynthesize . samplerate *duration/wvSynth.SamplesPerFrame);i = 1:numIterations audioOut = wvSynth();范围(audioOut) deviceWriter (audioOut);drawnowlimitrate%需要更新参数结束

作为最佳实践,在完成时释放对象。

release(scope) release(scope) release(scope)

算法

全部展开

wavetableSynthesizer系统对象使用缓存的单周期波形、指定的波形属性和相位存储器合成周期信号。

扩展功能

版本历史

在R2016a中引入

全部展开