压缩机
动态范围压缩机
描述
的压缩机系统对象™在每个输入通道上独立地执行动态范围压缩。动态范围压缩衰减了超过给定阈值的响亮声音的音量。它使用指定的攻击和释放时间来实现平滑的应用增益曲线。的属性压缩机对象指定动态范围压缩的类型。
执行动态范围压缩:
创建压缩机对象并设置其属性。
使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
语法
描述
压缩机
创建一个System对象,刚果民主共和国,随着时间的推移,它在每个输入通道上独立地执行动态范围压缩。
压缩机(thresholdValue)
设置阈值财产thresholdValue.
压缩机(thresholdValue,ratioValue)
设置比财产ratioValue.
压缩机(<年代pan class="argument_placeholder">___,名称,值)
设置每个属性的名字到指定的价值.未指定的属性有默认值。
例子:dRC =压缩机('AttackTime',0.01,'SampleRate',16000)创建一个System对象,刚果民主共和国,在16 kHz采样率下,具有10 ms的攻击时间。
属性
除非另有说明,属性为<年代pan class="emphasis">nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。
如果属性为<年代pan class="emphasis">可调,您可以随时更改其值。
有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计.
阈值
- - - - - -<年代pan itemprop="purpose">操作阈值(dB)
-10年
(默认)|<年代pan itemprop="inputvalue">真正的标量
操作阈值(以dB为单位),指定为实标量。
操作阈值是对输入信号施加增益的电平。
可调:是的
数据类型:单|双
比
- - - - - -<年代pan itemprop="purpose">压缩比
5
(默认)|<年代pan itemprop="inputvalue">真正的标量
压缩比,指定为大于或等于1的实标量。
压缩比是超过操作阈值的信号的输入/输出比。
假设硬膝特性和稳态输入是这样的x[n] dB >阈值,压缩比定义为<年代pan class="inlineequation">
.
R是压缩比。
x[n为输入信号,单位为dB。
y[n为输出信号,单位为dB。
T为阈值,单位为dB。
可调:是的
数据类型:单|双
KneeWidth
- - - - - -<年代pan itemprop="purpose">膝宽(dB)
0
(默认)|<年代pan itemprop="inputvalue">真正的标量
膝盖宽度(以dB为单位),指定为大于或等于0的实标量。
膝盖宽度是压缩特性中的过渡区域。
对于软膝特征,利用该关系定义过渡区域
对于范围<年代pan class="inlineequation">
.
y为输出电平,单位为dB。
x为输入电平,单位为dB。
R是压缩比。
T为阈值,单位为dB。
W为膝盖宽度,单位dB。
可调:是的
数据类型:单|双
AttackTime
- - - - - -<年代pan itemprop="purpose">攻击时间(秒)
0.05
(默认)|<年代pan itemprop="inputvalue">真正的标量
攻击时间(以秒为单位),指定为大于或等于0的实标量。
攻击的时间是当输入超过阈值时,压缩机增益从其最终值的10%上升到90%所需的时间。
可调:是的
数据类型:单|双
ReleaseTime
- - - - - -<年代pan itemprop="purpose">发布时间(秒)
0.2
(默认)|<年代pan itemprop="inputvalue">真正的标量
释放时间(以秒为单位),指定为大于或等于0的实标量。
释放时间是当输入低于阈值时,压缩机增益从其最终值的90%下降到10%所需的时间。
可调:是的
数据类型:单|双
MakeUpGainMode
- - - - - -<年代pan itemprop="purpose">补偿增益模式
“属性”
(默认)|<年代pan itemprop="inputvalue">“汽车”
补偿增益模式,指定为“汽车”或“属性”.
“汽车”—补增益应用于动态范围压缩机的输出,使稳态0 dB输入具有0 dB输出。
“属性”—补强增益设置为中指定的值MakeUpGain财产。
可调:没有
数据类型:字符|字符串
MakeUpGain
- - - - - -<年代pan itemprop="purpose">补强增益(dB)
0
(默认)|<年代pan itemprop="inputvalue">真正的标量
补偿增益(dB),指定为实标量。
化妆获得补偿压缩过程中损失的增益。它应用于动态范围压缩机的输出。
可调:是的
依赖关系
若要启用此属性,请设置MakeUpGainMode来“属性”.
数据类型:单|双
SampleRate
- - - - - -<年代pan itemprop="purpose">输入采样率(Hz)
44100
(默认)|<年代pan itemprop="inputvalue">积极的标量
输入采样率(以Hz为单位),指定为正标量。
可调:是的
数据类型:单|双
EnableSidechain
- - - - - -<年代pan itemprop="purpose">启用侧链输入
假
(默认)|<年代pan itemprop="inputvalue">真正的
启用侧链输入,指定为真正的或假.属性上可用输入的数量压缩机对象。
假—侧链输入被禁用压缩机对象接受一个输入:audioIn需要压缩的数据。
真正的—侧链输入已启用压缩机对象接受两个输入:audioIn要压缩的数据和用于计算压缩的侧链输入获得.
侧链数据类型和(帧)长度必须保持一致audioIn.
侧链输入的通道数必须等于的通道数audioIn或者等于1。当侧链通道数为1时,获得基于此信道计算的是适用于所有信道的audioIn.当侧链的通道数等于其中的通道数audioIn,获得计算出来的每个侧链通道都应用到相应的通道上audioIn.
可调:没有
使用
描述
输入参数
audioIn- - - - - -<年代pan itemprop="purpose">压缩机音频输入
矩阵
音频输入到压缩机,指定为矩阵。矩阵的列被视为独立的音频通道。
数据类型:单|双
输出参数
audioOut-压缩机音频输出矩阵
音频输出从压缩机,返回作为一个矩阵大小相同audioIn.
数据类型:单|双
获得-压缩机增益(dB)矩阵
由压缩机施加的增益,以相同大小的矩阵形式返回audioIn.
数据类型:单|双
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:
发行版(obj)
压缩机专用
可视化
可视化动态范围控制器的静态特性
staticCharacteristic
返回动态范围控制器的静态特性
createAudioPluginClass
创建音频插件类,实现的功能<年代pan class="trademark entity">系统对象
parameterTuner
在流处理时调优对象参数
MIDI
configureMIDI
配置音频对象与MIDI控制器之间的MIDI连接
disconnectMIDI
从音频对象断开MIDI控件
getMIDIConnections
获取音频对象的MIDI连接
的createAudioPluginClass而且configureMIDI属性的可调属性压缩机面向用户参数的系统对象:
财产
范围
映射
单位
阈值
(-50 0)
线性
dB
比
(1、50)
线性
没有一个
KneeWidth
[0, 20]
线性
dB
AttackTime
[0, 4]
线性
秒
ReleaseTime
[0, 4]
线性
秒
MakeUpGain(设置时可用MakeUpGainMode来“属性”)
(-10年,24)
线性
dB
例子
压缩音频信号
使用动态范围压缩来衰减大音量的声音。
设置dsp。一个udioFileReader而且audioDeviceWriter™系统对象。
framength = 1024;fileReader = dsp。AudioFileReader (<年代pan style="color:#0000FF">...“文件名”,<年代pan style="color:#A020F0">“RockDrums-44p1-stereo-11secs.mp3”,<年代pan style="color:#0000FF">...“SamplesPerFrame”, frameLength);deviceWriter = audioDeviceWriter(<年代pan style="color:#0000FF">...“SampleRate”, fileReader.SampleRate);
将压缩机设置为阈值为-15 dB,比值为7,膝宽为5 dB。使用音频文件阅读器的采样率。
dRC =压缩机(-15,7,<年代pan style="color:#0000FF">...“KneeWidth”5,<年代pan style="color:#0000FF">...“SampleRate”, fileReader.SampleRate);
设置范围以可视化原始音频信号、压缩音频信号和应用的压缩器增益。
Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#A020F0">“时间间隔”, 1<年代pan style="color:#0000FF">...“BufferLength”44100 * 4,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“LayoutDimensions”(2, 1),<年代pan style="color:#0000FF">...“NumInputPorts”2,<年代pan style="color:#0000FF">...“标题”,<年代pan style="color:#0000FF">...[<年代pan style="color:#A020F0">“原始音频vs.压缩音频(上)”...'和压缩机增益(dB)(下)']);范围。一个ctiveDisplay = 2; scope.YLimits = [-4,0]; scope.YLabel =<年代pan style="color:#A020F0">“获得(dB)”;
播放经过处理的音频,并在瞄准镜上可视化它。
而~isDone(fileReader) x = fileReader();[y,g] = dRC(x);deviceWriter (y);范围([x (: 1), y (: 1)), g (: 1))<年代pan style="color:#0000FF">结束发布(dRC)发布(deviceWriter)发布(范围)
比较动态范围限制器和压缩机
动态范围限制器是一种特殊类型的动态范围压缩机。在限制器中,高于操作阈值的水平是严格限制的。在限制器的最简单实现中,效果相当于音频剪辑。在压缩机中,使用指定的压缩比降低高于操作阈值的水平。使用压缩比可以得到更平滑的处理信号。
比较限制器和压缩器在正弦波中的应用
创建一个限幅器系统对象™和一个压缩机系统对象。设置AttackTime而且ReleaseTime将两个对象的属性均置零。创建一个audioOscillator用系统对象生成一个正弦信号频率设置为5而且振幅设置为0.1.
限制器(<年代pan style="color:#A020F0">“AttackTime”0,<年代pan style="color:#A020F0">“ReleaseTime”, 0);压缩机(<年代pan style="color:#A020F0">“AttackTime”0,<年代pan style="color:#A020F0">“ReleaseTime”, 0);osc = audio振荡器(<年代pan style="color:#A020F0">“频率”5,<年代pan style="color:#A020F0">“振幅”, 0.1);
创建一个时间范围来可视化生成的正弦信号和处理后的正弦信号。
Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”osc。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#A020F0">“时间间隔”2,<年代pan style="color:#0000FF">...“BufferLength”osc。SampleRate * 4,<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“LayoutDimensions”(2 - 1),<年代pan style="color:#0000FF">...“NumInputPorts”2);范围。一个ctiveDisplay = 1; scope.Title =<年代pan style="color:#A020F0">“原始信号vs.有限信号”;范围。YLimits = [-1,1];范围。一个ctiveDisplay = 2; scope.Title =<年代pan style="color:#A020F0">“原始信号与压缩信号”;范围。YLimits = [-1,1];
在音频流循环中,可视化原始正弦波和经过限制器和压缩机处理的正弦波。增加原始正弦信号的振幅来说明效果。
而osc。一个米plitude < 0.75 x = osc(); xLimited = dRL(x); xCompressed = dRC(x); scope([x xLimited],[x xCompressed]); osc.Amplitude = osc.Amplitude + 0.0002;<年代pan style="color:#0000FF">结束(范围)
发布(dRL)发布(dRC)发布(osc)
音频信号中限制器和压缩器的比较
比较动态范围限制器和压缩器对鼓轨道的影响。创建一个dsp。一个udioFileReader系统对象和audioDeviceWriter系统对象从文件中读取音频并写入音频输出设备。为了强调动态范围控制的效果,将限位器和压缩机的工作阈值设置为- 20db。
dRL实验室。Threshold = -20; dRC.Threshold = -20; fileReader = dsp.AudioFileReader(<年代pan style="color:#A020F0">“FunkyDrums-44p1-stereo-25secs.mp3”);deviceWriter = audioDeviceWriter(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);
在循环中从音频文件中读取连续帧。听并比较动态范围限制和动态范围压缩对音频信号的影响。
numFrames = 300;流(<年代pan style="color:#A020F0">“现在播放原始信号……\n”)
现在播放原始信号…
为i = 1:numFrames x = fileReader();deviceWriter (x);<年代pan style="color:#0000FF">结束重置(fileReader);流(<年代pan style="color:#A020F0">“现在播放有限信号……\n”)
现在播放有限信号…
为i = 1:numFrames x = fileReader();xLimited = dRL(x);deviceWriter (xLimited);<年代pan style="color:#0000FF">结束重置(fileReader);流(<年代pan style="color:#A020F0">“现在正在播放压缩信号…\n”)
现在正在播放压缩信号…
为i = 1:numFrames x = fileReader();xCompressed = dRC(x);deviceWriter (xCompressed);<年代pan style="color:#0000FF">结束release(fileReader) release(deviceWriter) release(dRC) release(dRL)
减少语音信号中的爆破音
爆破音是由于气流突然释放而产生的辅音。它们在以。开头的单词中最为明显<年代pan class="emphasis">p,<年代pan class="emphasis">d,<年代pan class="emphasis">g的声音。爆破音在录音过程中会被强调,听起来往往不舒服。在本例中,您通过应用高通滤波和低频带压缩来最小化语音信号的爆破音。
创建一个dsp。一个udioFileReader对象和audioDeviceWriter对象从文件中读取音频信号并将音频信号写入设备。播放未处理的信号。然后释放文件读取器和设备写入器。
fileReader = dsp。AudioFileReader (<年代pan style="color:#A020F0">“audioPlosives.wav”);deviceWriter = audioDeviceWriter(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);<年代pan style="color:#0000FF">而~isDone(fileReader) audioIn = fileReader();deviceWriter (audioIn);<年代pan style="color:#0000FF">结束发布(deviceWriter)发布(fileReader)
设计一个高通滤波器,所有频率在120hz以下都有陡滚降。使用一个dsp。BiquadFilter对象实现高通滤波器的设计。创建一个250赫兹的交叉滤波器。交叉滤波器使您能够分离感兴趣的频带进行处理。创建一个动态范围压缩器来压缩爆破声音的动态范围。若要应用无补增益,请设置MakeUpGainMode“财产”并使用默认的0 dBMakeUpGain属性值。创建一个时间范围来可视化处理和未处理的音频信号。
[B,A] = designVarSlopeFilter(48,120/(fileReader.SampleRate/2),<年代pan style="color:#A020F0">“嗨”);biquadFilter = dsp。BiquadFilter (<年代pan style="color:#0000FF">...“SOSMatrixSource”,<年代pan style="color:#A020F0">“输入端口”,<年代pan style="color:#0000FF">...“ScaleValuesInputPort”、假);crossFilt =交叉过滤(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“NumCrossovers”, 1<年代pan style="color:#0000FF">...“CrossoverFrequencies”, 250,<年代pan style="color:#0000FF">...“CrossoverSlopes”48岁);dRCompressor =压缩机(<年代pan style="color:#0000FF">...“阈值”, -35,<年代pan style="color:#0000FF">...“比”10<年代pan style="color:#0000FF">...“KneeWidth”, 20岁,<年代pan style="color:#0000FF">...“AttackTime”1的军医,<年代pan style="color:#0000FF">...“ReleaseTime”3 e 1<年代pan style="color:#0000FF">...“MakeUpGainMode”,<年代pan style="color:#A020F0">“财产”,<年代pan style="color:#0000FF">...“SampleRate”, fileReader.SampleRate);Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“财产”,<年代pan style="color:#A020F0">“时间间隔”3,<年代pan style="color:#0000FF">...“BufferLength”, fileReader。SampleRate*3*2,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“ShowLegend”,真的,<年代pan style="color:#0000FF">...“ChannelNames”, {<年代pan style="color:#A020F0">“原始”,<年代pan style="color:#A020F0">“加工”});
在音频流循环中:
读入音频文件的一帧。
使用双向滤波器应用高通滤波。
把音频信号分成两个波段。
应用动态范围压缩到较低的波段。
混音频道。
将处理后的音频信号写入音频设备进行监听。
在时间范围内可视化已处理和未处理的信号。
作为最佳实践,一旦完成就释放对象。
而~isDone(fileReader) audioIn = fileReader();audioIn = biquadFilter(audioIn,B,A);[band1,band2] = crossFilt(audioIn);band1compressed = dRCompressor(band1);audioOut = band1compressed + band2;deviceWriter (audioOut);范围([audioIn audioOut])<年代pan style="color:#0000FF">结束
作为最佳实践,一旦完成就释放对象。
释放(deviceWriter)释放(fileReader)释放(crossFilt)释放(dRCompressor)释放(scope)
压缩机参数调优
创建一个dsp。一个udioFileReader逐帧读取音频。创建一个audioDeviceWriter将音频写入声卡。创建一个压缩机来处理音频数据。调用可视化的静态特性压缩机.
framength = 1024;fileReader = dsp。AudioFileReader (<年代pan style="color:#A020F0">“RockDrums-44p1-stereo-11secs.mp3”,<年代pan style="color:#0000FF">...“SamplesPerFrame”, frameLength);deviceWriter = audioDeviceWriter(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);压缩机(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);可视化(dRC)
创建一个timescope将原始和处理过的音频可视化。
Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#0000FF">...“时间间隔”, 1<年代pan style="color:#0000FF">...“BufferLength”, fileReader。SampleRate*4,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“LayoutDimensions”(2, 1),<年代pan style="color:#0000FF">...“NumInputPorts”2,<年代pan style="color:#0000FF">...“标题”,<年代pan style="color:#A020F0">“原始与压缩音频(上)和以分贝为单位的压缩机增益(下)”);范围。一个ctiveDisplay = 2; scope.YLimits = [-4,0]; scope.YLabel =<年代pan style="color:#A020F0">“获得(dB)”;
调用parameterTuner打开一个UI,在流媒体时调整压缩机的参数。
parameterTuner (dRC)
在音频流循环中:
从文件中读入一帧音频。
应用动态范围压缩。
将音频帧写入音频设备以供收听。
可视化原始音频,处理音频,和增益应用。
流媒体时,调整动态范围压缩机的参数,并收听效果。
而~isDone(fileReader) audioIn = fileReader();[audioOut,g] = dRC(audioIn);deviceWriter (audioOut);范围([audioIn (: 1), audioOut (: 1)), g (: 1));drawnow<年代pan style="color:#A020F0">limitrate%需要更新参数结束
作为最佳实践,一旦完成就释放对象。
release(deviceWriter) release(fileReader) release(dRC) release(scope)
压缩机侧链鸭
使用EnableSidechaina的输入压缩机对象来降低单独音频信号的振幅水平。侧链信号控制输入音频信号的压缩。侧链信号超过压缩机时阈值时,压缩机激活并降低输入信号的幅值。当侧链信号电平低于阈值时,音频输入返回其未压缩的振幅。
准备音频文件
类的语音文件的输入,将对语音文件进行重新采样和零填充EnableSidechain您的财产压缩机对象。
读入音频信号。重新采样以匹配输入音频信号的采样率(44.1 kHz)。
targetFs = 44100;[originalSpeech,originalFs] = audioread(<年代pan style="color:#A020F0">“彩虹- 16 - 8 mono - 114 secs.wav”);resampledSpeech = resample(originalSpeech,targetFs,originalFs);
用10秒的零填充重新采样信号的开始。这允许输入音频信号在任何压缩应用之前被清楚地听到。
resampledSpeech = [0 (10* targetf,1);resampledSpeech];
将振幅归一化以避免潜在剪切。
resampledSpeech = resampledSpeech ./ max(resampledSpeech);
将重新采样、填充零和标准化的侧链信号写入一个文件。
audiowrite (<年代pan style="color:#A020F0">“resampledSpeech.wav”、resampledSpeech targetFs);
构造音频对象
构造一个dsp。一个udioFileReader
对象用于输入信号和侧链信号。使用ReadRange的属性AudioFileReader,选择输入信号的第二段和侧链信号的前26.5秒进行回放。要允许脚本无限期地运行,请更改playbackCount变量的1来正.
inputAudio =<年代pan style="color:#A020F0">“SoftGuitar-44p1_mono-10mins.ogg”;sidechainAudio =<年代pan style="color:#A020F0">“resampledSpeech.wav”;playbackCount = 1;inputAudioAFR = dsp。AudioFileReader (inputAudio,<年代pan style="color:#A020F0">“PlayCount”playbackCount,<年代pan style="color:#A020F0">“ReadRange”,<年代pan style="color:#0000FF">...(115 * targetFs轮(145.4 * targetFs)));sidechainAudioAFR = dsp。AudioFileReader (年代idechainAudio,<年代pan style="color:#A020F0">“PlayCount”playbackCount,<年代pan style="color:#0000FF">...“ReadRange”[1轮(26.5 * targetFs)));
构造一个压缩机对象。使用兴奋剂比,快AttackTime,速度适中ReleaseTime.这些设置非常适合画外音工作。快速攻击时间确保输入音频在侧链信号超过压缩器阈值后几乎立即被压缩.缓慢的释放时间确保输入音频上的压缩持续通过侧链信号中任何潜在的短静默区域。
iAmYourCompressor =压缩机(<年代pan style="color:#A020F0">“EnableSidechain”,真的,<年代pan style="color:#0000FF">...“SampleRate”targetFs,<年代pan style="color:#0000FF">...“阈值”, -40,<年代pan style="color:#0000FF">...“比”8<年代pan style="color:#0000FF">...“AttackTime”, 0.01,<年代pan style="color:#0000FF">...“ReleaseTime”, 1.5);
构造一个audioDeviceWriter对象来播放侧链和输入信号。
afw = audioDeviceWriter;
构造一个timescope对象查看未压缩的输入信号、侧链信号以及压缩的输入信号。
Scope = timescope(<年代pan style="color:#A020F0">“NumInputPorts”3,<年代pan style="color:#0000FF">...“SampleRate”targetFs,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#0000FF">...“时间间隔”5,<年代pan style="color:#0000FF">...“TimeDisplayOffset”0,<年代pan style="color:#0000FF">...“LayoutDimensions”(3 - 1),<年代pan style="color:#0000FF">...“BufferLength”, targetFs * 15,<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“标题”,<年代pan style="color:#A020F0">“未压缩输入音频-吉他”);范围。一个ctiveDisplay = 2; scope.YLimits = [-1 1]; scope.Title =<年代pan style="color:#A020F0">“侧链音频-演讲”;范围。ShowGrid = true;范围。一个ctiveDisplay = 3; scope.YLimits = [-1 1]; scope.ShowGrid = true; scope.Title =<年代pan style="color:#A020F0">压缩输入音频-吉他;
创建音频流循环
从输入和侧链信号中读取一帧音频。处理输入和侧链信号压缩机对象。播放处理过的音频信号并显示音频数据timescope对象。
你的顶部面板timescope显示未压缩的输入音频信号,中间面板显示侧链音频信号。底部面板显示压缩输入音频信号。注意顶部和底部面板的信号振幅是相同的,直到侧链信号开始。一旦侧链信号被激活,底部面板中的信号振幅就会被压缩。一旦侧链信号结束,底部面板中的信号振幅开始返回到其未压缩水平。
而~isDone(inputAudioAFR) inputAudioFrame = inputAudioAFR();sidechainaudiofframe = sidechainAudioAFR();compressorOutput = iAmYourCompressor(inputAudioFrame,sideChainAudioFrame);afw (sideChainAudioFrame + compressorOutput);范围(inputAudioFrame sideChainAudioFrame compressorOutput);<年代pan style="color:#0000FF">结束
释放对象。
释放(inputAudioAFR)释放(sidechainAudioAFR)释放(iAmYourCompressor)释放(afw)释放(scope)
算法
的压缩机系统对象逐帧逐元素处理信号。
将输入信号转换为dB
的N分信号,x[n],以分贝为单位:
获得计算机
xdB[n]通过增益计算机。增益计算机利用动态范围压缩机的静态特性来衰减超出阈值的增益。
如果指定软膝,增益计算机具有以下静态特性:
在哪里T是阈值,R和W是膝盖的宽度。
如果指定硬膝,增益计算机具有以下静态特性:
计算得到的增益,<年代pan class="inlineequation">gc[n]的计算方法为
获得平滑
gc[n]使用指定的攻击和释放时间属性平滑:
攻击时间系数,<年代pan class="inlineequation">α一个
的计算方法为
释放时间系数,<年代pan class="inlineequation">αR的计算方法为
T<年代ub>一个 攻击时间段是否由AttackTime财产。<年代pan class="inlineequation">TR发布时间段是否由ReleaseTime财产。<年代pan class="inlineequation">Fs输入采样率是否由SampleRate财产。
计算和应用补偿增益
如果MakeUpGainMode设置为默认值“汽车”时,补强增益计算为0 dB输入的计算增益的负数,
给定一个0 dB的稳态输入,该配置实现了0 dB的稳态输出。补强增益由阈值,比,KneeWidth属性。它不依赖于输入信号。
弥补收益,米,被添加到平滑增益中,<年代pan class="inlineequation">g年代[n]:
计算和应用线性增益
计算增益,单位为dB,<年代pan class="inlineequation">g米[n],则转换为线性域:
动态范围压缩机的输出为
参考文献
扬诺里斯,迪米特里奥斯,迈克尔·马斯伯格和约书亚·d·赖斯。数字动态范围压缩机设计教程与分析音频工程学会杂志.第60卷,第6期,2012,第399-408页。
扩展功能
C/ c++代码生成使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
版本历史
在R2016a中引入
另请参阅
noiseGate
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">扩张器
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">限幅器
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">压缩机
主题
动态范围压缩机
描述
的压缩机系统对象™在每个输入通道上独立地执行动态范围压缩。动态范围压缩衰减了超过给定阈值的响亮声音的音量。它使用指定的攻击和释放时间来实现平滑的应用增益曲线。的属性压缩机对象指定动态范围压缩的类型。
执行动态范围压缩:
创建压缩机对象并设置其属性。
使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
的 执行动态范围压缩: 创建 使用参数调用对象,就像调用函数一样。 有关系统对象如何工作的详细信息,请参见
创建
语法
描述
压缩机
创建一个System对象,刚果民主共和国,随着时间的推移,它在每个输入通道上独立地执行动态范围压缩。
压缩机(thresholdValue)
设置阈值财产thresholdValue.
压缩机(thresholdValue,ratioValue)
设置比财产ratioValue.
压缩机(<年代pan class="argument_placeholder">___,名称,值)
设置每个属性的名字到指定的价值.未指定的属性有默认值。
例子:dRC =压缩机('AttackTime',0.01,'SampleRate',16000)创建一个System对象,刚果民主共和国,在16 kHz采样率下,具有10 ms的攻击时间。
语法
描述
压缩机
创建一个System对象,刚果民主共和国,随着时间的推移,它在每个输入通道上独立地执行动态范围压缩。
压缩机(thresholdValue)
设置阈值财产thresholdValue.
压缩机(thresholdValue,ratioValue)
设置比财产ratioValue.
压缩机(<年代pan class="argument_placeholder">___,名称,值)
设置每个属性的名字到指定的价值.未指定的属性有默认值。
例子:dRC =压缩机('AttackTime',0.01,'SampleRate',16000)创建一个System对象,刚果民主共和国,在16 kHz采样率下,具有10 ms的攻击时间。
压缩机
创建一个System对象,
压缩机(
设置
压缩机(
设置
例子:压缩机(<年代pan class="argument_placeholder">___
设置每个属性dRC =压缩机('AttackTime',0.01,'SampleRate',16000)
属性
除非另有说明,属性为<年代pan class="emphasis">nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。
如果属性为<年代pan class="emphasis">可调,您可以随时更改其值。
有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计.
阈值
- - - - - -<年代pan itemprop="purpose">操作阈值(dB)
-10年
(默认)|<年代pan itemprop="inputvalue">真正的标量
操作阈值(以dB为单位),指定为实标量。
操作阈值是对输入信号施加增益的电平。
可调:是的
数据类型:单|双
比
- - - - - -<年代pan itemprop="purpose">压缩比
5
(默认)|<年代pan itemprop="inputvalue">真正的标量
压缩比,指定为大于或等于1的实标量。
压缩比是超过操作阈值的信号的输入/输出比。
假设硬膝特性和稳态输入是这样的x[n] dB >阈值,压缩比定义为<年代pan class="inlineequation">
.
R是压缩比。
x[n为输入信号,单位为dB。
y[n为输出信号,单位为dB。
T为阈值,单位为dB。
可调:是的
数据类型:单|双
KneeWidth
- - - - - -<年代pan itemprop="purpose">膝宽(dB)
0
(默认)|<年代pan itemprop="inputvalue">真正的标量
膝盖宽度(以dB为单位),指定为大于或等于0的实标量。
膝盖宽度是压缩特性中的过渡区域。
对于软膝特征,利用该关系定义过渡区域
对于范围<年代pan class="inlineequation">
.
y为输出电平,单位为dB。
x为输入电平,单位为dB。
R是压缩比。
T为阈值,单位为dB。
W为膝盖宽度,单位dB。
可调:是的
数据类型:单|双
AttackTime
- - - - - -<年代pan itemprop="purpose">攻击时间(秒)
0.05
(默认)|<年代pan itemprop="inputvalue">真正的标量
攻击时间(以秒为单位),指定为大于或等于0的实标量。
攻击的时间是当输入超过阈值时,压缩机增益从其最终值的10%上升到90%所需的时间。
可调:是的
数据类型:单|双
ReleaseTime
- - - - - -<年代pan itemprop="purpose">发布时间(秒)
0.2
(默认)|<年代pan itemprop="inputvalue">真正的标量
释放时间(以秒为单位),指定为大于或等于0的实标量。
释放时间是当输入低于阈值时,压缩机增益从其最终值的90%下降到10%所需的时间。
可调:是的
数据类型:单|双
MakeUpGainMode
- - - - - -<年代pan itemprop="purpose">补偿增益模式
“属性”
(默认)|<年代pan itemprop="inputvalue">“汽车”
补偿增益模式,指定为“汽车”或“属性”.
“汽车”—补增益应用于动态范围压缩机的输出,使稳态0 dB输入具有0 dB输出。
“属性”—补强增益设置为中指定的值MakeUpGain财产。
可调:没有
数据类型:字符|字符串
MakeUpGain
- - - - - -<年代pan itemprop="purpose">补强增益(dB)
0
(默认)|<年代pan itemprop="inputvalue">真正的标量
补偿增益(dB),指定为实标量。
化妆获得补偿压缩过程中损失的增益。它应用于动态范围压缩机的输出。
可调:是的
依赖关系
若要启用此属性,请设置MakeUpGainMode来“属性”.
数据类型:单|双
SampleRate
- - - - - -<年代pan itemprop="purpose">输入采样率(Hz)
44100
(默认)|<年代pan itemprop="inputvalue">积极的标量
输入采样率(以Hz为单位),指定为正标量。
可调:是的
数据类型:单|双
EnableSidechain
- - - - - -<年代pan itemprop="purpose">启用侧链输入
假
(默认)|<年代pan itemprop="inputvalue">真正的
启用侧链输入,指定为真正的或假.属性上可用输入的数量压缩机对象。
假—侧链输入被禁用压缩机对象接受一个输入:audioIn需要压缩的数据。
真正的—侧链输入已启用压缩机对象接受两个输入:audioIn要压缩的数据和用于计算压缩的侧链输入获得.
侧链数据类型和(帧)长度必须保持一致audioIn.
侧链输入的通道数必须等于的通道数audioIn或者等于1。当侧链通道数为1时,获得基于此信道计算的是适用于所有信道的audioIn.当侧链的通道数等于其中的通道数audioIn,获得计算出来的每个侧链通道都应用到相应的通道上audioIn.
可调:没有
除非另有说明,属性为<年代pan class="emphasis">nontunable 如果属性为<年代pan class="emphasis">可调 有关更改属性值的详细信息,请参见 操作阈值(以dB为单位),指定为实标量。 操作阈值 可调: 数据类型: 压缩比,指定为大于或等于1的实标量。 压缩比 假设硬膝特性和稳态输入是这样的 R x y T 可调: 数据类型: 膝盖宽度(以dB为单位),指定为大于或等于0的实标量。 膝盖宽度 对于软膝特征,利用该关系定义过渡区域
对于范围<年代pan class="inlineequation">
. y x R T W 可调: 数据类型: 攻击时间(以秒为单位),指定为大于或等于0的实标量。 攻击的时间 可调: 数据类型: 释放时间(以秒为单位),指定为大于或等于0的实标量。 释放时间 可调: 数据类型: 补偿增益模式,指定为 可调: 数据类型: 补偿增益(dB),指定为实标量。 化妆获得 可调: 若要启用此属性,请设置 数据类型: 输入采样率(以Hz为单位),指定为正标量。 可调: 数据类型: 启用侧链输入,指定为 侧链数据类型和(帧)长度必须保持一致 侧链输入的通道数必须等于的通道数 可调:释放
阈值
- - - - - -<年代pan itemprop="purpose">操作阈值(dB)-10年
(默认)|<年代pan itemprop="inputvalue">真正的标量单
比
- - - - - -<年代pan itemprop="purpose">压缩比5
(默认)|<年代pan itemprop="inputvalue">真正的标量
单
KneeWidth
- - - - - -<年代pan itemprop="purpose">膝宽(dB)0
(默认)|<年代pan itemprop="inputvalue">真正的标量
单
AttackTime
- - - - - -<年代pan itemprop="purpose">攻击时间(秒)0.05
(默认)|<年代pan itemprop="inputvalue">真正的标量单
ReleaseTime
- - - - - -<年代pan itemprop="purpose">发布时间(秒)0.2
(默认)|<年代pan itemprop="inputvalue">真正的标量单
MakeUpGainMode
- - - - - -<年代pan itemprop="purpose">补偿增益模式“属性”
(默认)|<年代pan itemprop="inputvalue">“汽车”
“汽车”
“属性”
字符
MakeUpGain
- - - - - -<年代pan itemprop="purpose">补强增益(dB)0
(默认)|<年代pan itemprop="inputvalue">真正的标量依赖关系
单
SampleRate
- - - - - -<年代pan itemprop="purpose">输入采样率(Hz)44100
(默认)|<年代pan itemprop="inputvalue">积极的标量单
EnableSidechain
- - - - - -<年代pan itemprop="purpose">启用侧链输入假
(默认)|<年代pan itemprop="inputvalue">真正的
假
audioIn
真正的
audioIn
获得
audioIn
audioIn
获得
audioIn
audioIn
获得
audioIn
使用
描述
输入参数
audioIn- - - - - -<年代pan itemprop="purpose">压缩机音频输入
矩阵
音频输入到压缩机,指定为矩阵。矩阵的列被视为独立的音频通道。
数据类型:单|双
输出参数
audioOut-压缩机音频输出矩阵
音频输出从压缩机,返回作为一个矩阵大小相同audioIn.
数据类型:单|双
获得-压缩机增益(dB)矩阵
由压缩机施加的增益,以相同大小的矩阵形式返回audioIn.
数据类型:单|双
描述
输入参数
audioIn- - - - - -<年代pan itemprop="purpose">压缩机音频输入
矩阵
音频输入到压缩机,指定为矩阵。矩阵的列被视为独立的音频通道。
数据类型:单|双
audioIn- - - - - -<年代pan itemprop="purpose">压缩机音频输入
矩阵
矩阵
音频输入到压缩机,指定为矩阵。矩阵的列被视为独立的音频通道。 数据类型:单
输出参数
audioOut-压缩机音频输出矩阵
音频输出从压缩机,返回作为一个矩阵大小相同audioIn.
数据类型:单|双
获得-压缩机增益(dB)矩阵
由压缩机施加的增益,以相同大小的矩阵形式返回audioIn.
数据类型:单|双
audioOut-压缩机音频输出矩阵
音频输出从压缩机,返回作为一个矩阵大小相同 数据类型:单
获得-压缩机增益(dB)矩阵
由压缩机施加的增益,以相同大小的矩阵形式返回 数据类型:单
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:
发行版(obj)
压缩机专用
可视化
可视化动态范围控制器的静态特性
staticCharacteristic
返回动态范围控制器的静态特性
createAudioPluginClass
创建音频插件类,实现的功能<年代pan class="trademark entity">系统对象
parameterTuner
在流处理时调优对象参数
MIDI
configureMIDI
配置音频对象与MIDI控制器之间的MIDI连接
disconnectMIDI
从音频对象断开MIDI控件
getMIDIConnections
获取音频对象的MIDI连接
的createAudioPluginClass而且configureMIDI属性的可调属性压缩机面向用户参数的系统对象:
财产
范围
映射
单位
阈值
(-50 0)
线性
dB
比
(1、50)
线性
没有一个
KneeWidth
[0, 20]
线性
dB
AttackTime
[0, 4]
线性
秒
ReleaseTime
[0, 4]
线性
秒
MakeUpGain(设置时可用MakeUpGainMode来“属性”)
(-10年,24)
线性
dB
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源 的发行版(obj)
压缩机专用
可视化
可视化动态范围控制器的静态特性
staticCharacteristic
返回动态范围控制器的静态特性
createAudioPluginClass
创建音频插件类,实现的功能<年代pan class="trademark entity">系统对象
parameterTuner
在流处理时调优对象参数 MIDI
configureMIDI
配置音频对象与MIDI控制器之间的MIDI连接
disconnectMIDI
从音频对象断开MIDI控件
getMIDIConnections
获取音频对象的MIDI连接
财产 范围 映射 单位
阈值
(-50 0) 线性 dB
比
(1、50) 线性 没有一个
KneeWidth
[0, 20] 线性 dB
AttackTime
[0, 4] 线性 秒
ReleaseTime
[0, 4] 线性 秒
MakeUpGain
(-10年,24) 线性 dB
例子
压缩音频信号
使用动态范围压缩来衰减大音量的声音。
设置dsp。一个udioFileReader而且audioDeviceWriter™系统对象。
framength = 1024;fileReader = dsp。AudioFileReader (<年代pan style="color:#0000FF">...“文件名”,<年代pan style="color:#A020F0">“RockDrums-44p1-stereo-11secs.mp3”,<年代pan style="color:#0000FF">...“SamplesPerFrame”, frameLength);deviceWriter = audioDeviceWriter(<年代pan style="color:#0000FF">...“SampleRate”, fileReader.SampleRate);
将压缩机设置为阈值为-15 dB,比值为7,膝宽为5 dB。使用音频文件阅读器的采样率。
dRC =压缩机(-15,7,<年代pan style="color:#0000FF">...“KneeWidth”5,<年代pan style="color:#0000FF">...“SampleRate”, fileReader.SampleRate);
设置范围以可视化原始音频信号、压缩音频信号和应用的压缩器增益。
Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#A020F0">“时间间隔”, 1<年代pan style="color:#0000FF">...“BufferLength”44100 * 4,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“LayoutDimensions”(2, 1),<年代pan style="color:#0000FF">...“NumInputPorts”2,<年代pan style="color:#0000FF">...“标题”,<年代pan style="color:#0000FF">...[<年代pan style="color:#A020F0">“原始音频vs.压缩音频(上)”...'和压缩机增益(dB)(下)']);范围。一个ctiveDisplay = 2; scope.YLimits = [-4,0]; scope.YLabel =<年代pan style="color:#A020F0">“获得(dB)”;
播放经过处理的音频,并在瞄准镜上可视化它。
而~isDone(fileReader) x = fileReader();[y,g] = dRC(x);deviceWriter (y);范围([x (: 1), y (: 1)), g (: 1))<年代pan style="color:#0000FF">结束发布(dRC)发布(deviceWriter)发布(范围)
比较动态范围限制器和压缩机
动态范围限制器是一种特殊类型的动态范围压缩机。在限制器中,高于操作阈值的水平是严格限制的。在限制器的最简单实现中,效果相当于音频剪辑。在压缩机中,使用指定的压缩比降低高于操作阈值的水平。使用压缩比可以得到更平滑的处理信号。
比较限制器和压缩器在正弦波中的应用
创建一个限幅器系统对象™和一个压缩机系统对象。设置AttackTime而且ReleaseTime将两个对象的属性均置零。创建一个audioOscillator用系统对象生成一个正弦信号频率设置为5而且振幅设置为0.1.
限制器(<年代pan style="color:#A020F0">“AttackTime”0,<年代pan style="color:#A020F0">“ReleaseTime”, 0);压缩机(<年代pan style="color:#A020F0">“AttackTime”0,<年代pan style="color:#A020F0">“ReleaseTime”, 0);osc = audio振荡器(<年代pan style="color:#A020F0">“频率”5,<年代pan style="color:#A020F0">“振幅”, 0.1);
创建一个时间范围来可视化生成的正弦信号和处理后的正弦信号。
Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”osc。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#A020F0">“时间间隔”2,<年代pan style="color:#0000FF">...“BufferLength”osc。SampleRate * 4,<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“LayoutDimensions”(2 - 1),<年代pan style="color:#0000FF">...“NumInputPorts”2);范围。一个ctiveDisplay = 1; scope.Title =<年代pan style="color:#A020F0">“原始信号vs.有限信号”;范围。YLimits = [-1,1];范围。一个ctiveDisplay = 2; scope.Title =<年代pan style="color:#A020F0">“原始信号与压缩信号”;范围。YLimits = [-1,1];
在音频流循环中,可视化原始正弦波和经过限制器和压缩机处理的正弦波。增加原始正弦信号的振幅来说明效果。
而osc。一个米plitude < 0.75 x = osc(); xLimited = dRL(x); xCompressed = dRC(x); scope([x xLimited],[x xCompressed]); osc.Amplitude = osc.Amplitude + 0.0002;<年代pan style="color:#0000FF">结束(范围)
发布(dRL)发布(dRC)发布(osc)
音频信号中限制器和压缩器的比较
比较动态范围限制器和压缩器对鼓轨道的影响。创建一个dsp。一个udioFileReader系统对象和audioDeviceWriter系统对象从文件中读取音频并写入音频输出设备。为了强调动态范围控制的效果,将限位器和压缩机的工作阈值设置为- 20db。
dRL实验室。Threshold = -20; dRC.Threshold = -20; fileReader = dsp.AudioFileReader(<年代pan style="color:#A020F0">“FunkyDrums-44p1-stereo-25secs.mp3”);deviceWriter = audioDeviceWriter(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);
在循环中从音频文件中读取连续帧。听并比较动态范围限制和动态范围压缩对音频信号的影响。
numFrames = 300;流(<年代pan style="color:#A020F0">“现在播放原始信号……\n”)
现在播放原始信号…
为i = 1:numFrames x = fileReader();deviceWriter (x);<年代pan style="color:#0000FF">结束重置(fileReader);流(<年代pan style="color:#A020F0">“现在播放有限信号……\n”)
现在播放有限信号…
为i = 1:numFrames x = fileReader();xLimited = dRL(x);deviceWriter (xLimited);<年代pan style="color:#0000FF">结束重置(fileReader);流(<年代pan style="color:#A020F0">“现在正在播放压缩信号…\n”)
现在正在播放压缩信号…
为i = 1:numFrames x = fileReader();xCompressed = dRC(x);deviceWriter (xCompressed);<年代pan style="color:#0000FF">结束release(fileReader) release(deviceWriter) release(dRC) release(dRL)
减少语音信号中的爆破音
爆破音是由于气流突然释放而产生的辅音。它们在以。开头的单词中最为明显<年代pan class="emphasis">p,<年代pan class="emphasis">d,<年代pan class="emphasis">g的声音。爆破音在录音过程中会被强调,听起来往往不舒服。在本例中,您通过应用高通滤波和低频带压缩来最小化语音信号的爆破音。
创建一个dsp。一个udioFileReader对象和audioDeviceWriter对象从文件中读取音频信号并将音频信号写入设备。播放未处理的信号。然后释放文件读取器和设备写入器。
fileReader = dsp。AudioFileReader (<年代pan style="color:#A020F0">“audioPlosives.wav”);deviceWriter = audioDeviceWriter(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);<年代pan style="color:#0000FF">而~isDone(fileReader) audioIn = fileReader();deviceWriter (audioIn);<年代pan style="color:#0000FF">结束发布(deviceWriter)发布(fileReader)
设计一个高通滤波器,所有频率在120hz以下都有陡滚降。使用一个dsp。BiquadFilter对象实现高通滤波器的设计。创建一个250赫兹的交叉滤波器。交叉滤波器使您能够分离感兴趣的频带进行处理。创建一个动态范围压缩器来压缩爆破声音的动态范围。若要应用无补增益,请设置MakeUpGainMode“财产”并使用默认的0 dBMakeUpGain属性值。创建一个时间范围来可视化处理和未处理的音频信号。
[B,A] = designVarSlopeFilter(48,120/(fileReader.SampleRate/2),<年代pan style="color:#A020F0">“嗨”);biquadFilter = dsp。BiquadFilter (<年代pan style="color:#0000FF">...“SOSMatrixSource”,<年代pan style="color:#A020F0">“输入端口”,<年代pan style="color:#0000FF">...“ScaleValuesInputPort”、假);crossFilt =交叉过滤(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“NumCrossovers”, 1<年代pan style="color:#0000FF">...“CrossoverFrequencies”, 250,<年代pan style="color:#0000FF">...“CrossoverSlopes”48岁);dRCompressor =压缩机(<年代pan style="color:#0000FF">...“阈值”, -35,<年代pan style="color:#0000FF">...“比”10<年代pan style="color:#0000FF">...“KneeWidth”, 20岁,<年代pan style="color:#0000FF">...“AttackTime”1的军医,<年代pan style="color:#0000FF">...“ReleaseTime”3 e 1<年代pan style="color:#0000FF">...“MakeUpGainMode”,<年代pan style="color:#A020F0">“财产”,<年代pan style="color:#0000FF">...“SampleRate”, fileReader.SampleRate);Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“财产”,<年代pan style="color:#A020F0">“时间间隔”3,<年代pan style="color:#0000FF">...“BufferLength”, fileReader。SampleRate*3*2,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“ShowLegend”,真的,<年代pan style="color:#0000FF">...“ChannelNames”, {<年代pan style="color:#A020F0">“原始”,<年代pan style="color:#A020F0">“加工”});
在音频流循环中:
读入音频文件的一帧。
使用双向滤波器应用高通滤波。
把音频信号分成两个波段。
应用动态范围压缩到较低的波段。
混音频道。
将处理后的音频信号写入音频设备进行监听。
在时间范围内可视化已处理和未处理的信号。
作为最佳实践,一旦完成就释放对象。
而~isDone(fileReader) audioIn = fileReader();audioIn = biquadFilter(audioIn,B,A);[band1,band2] = crossFilt(audioIn);band1compressed = dRCompressor(band1);audioOut = band1compressed + band2;deviceWriter (audioOut);范围([audioIn audioOut])<年代pan style="color:#0000FF">结束
作为最佳实践,一旦完成就释放对象。
释放(deviceWriter)释放(fileReader)释放(crossFilt)释放(dRCompressor)释放(scope)
压缩机参数调优
创建一个dsp。一个udioFileReader逐帧读取音频。创建一个audioDeviceWriter将音频写入声卡。创建一个压缩机来处理音频数据。调用可视化的静态特性压缩机.
framength = 1024;fileReader = dsp。AudioFileReader (<年代pan style="color:#A020F0">“RockDrums-44p1-stereo-11secs.mp3”,<年代pan style="color:#0000FF">...“SamplesPerFrame”, frameLength);deviceWriter = audioDeviceWriter(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);压缩机(<年代pan style="color:#A020F0">“SampleRate”, fileReader.SampleRate);可视化(dRC)
创建一个timescope将原始和处理过的音频可视化。
Scope = timescope(<年代pan style="color:#0000FF">...“SampleRate”, fileReader。SampleRate,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#0000FF">...“时间间隔”, 1<年代pan style="color:#0000FF">...“BufferLength”, fileReader。SampleRate*4,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“LayoutDimensions”(2, 1),<年代pan style="color:#0000FF">...“NumInputPorts”2,<年代pan style="color:#0000FF">...“标题”,<年代pan style="color:#A020F0">“原始与压缩音频(上)和以分贝为单位的压缩机增益(下)”);范围。一个ctiveDisplay = 2; scope.YLimits = [-4,0]; scope.YLabel =<年代pan style="color:#A020F0">“获得(dB)”;
调用parameterTuner打开一个UI,在流媒体时调整压缩机的参数。
parameterTuner (dRC)
在音频流循环中:
从文件中读入一帧音频。
应用动态范围压缩。
将音频帧写入音频设备以供收听。
可视化原始音频,处理音频,和增益应用。
流媒体时,调整动态范围压缩机的参数,并收听效果。
而~isDone(fileReader) audioIn = fileReader();[audioOut,g] = dRC(audioIn);deviceWriter (audioOut);范围([audioIn (: 1), audioOut (: 1)), g (: 1));drawnow<年代pan style="color:#A020F0">limitrate%需要更新参数结束
作为最佳实践,一旦完成就释放对象。
release(deviceWriter) release(fileReader) release(dRC) release(scope)
压缩机侧链鸭
使用EnableSidechaina的输入压缩机对象来降低单独音频信号的振幅水平。侧链信号控制输入音频信号的压缩。侧链信号超过压缩机时阈值时,压缩机激活并降低输入信号的幅值。当侧链信号电平低于阈值时,音频输入返回其未压缩的振幅。
准备音频文件
类的语音文件的输入,将对语音文件进行重新采样和零填充EnableSidechain您的财产压缩机对象。
读入音频信号。重新采样以匹配输入音频信号的采样率(44.1 kHz)。
targetFs = 44100;[originalSpeech,originalFs] = audioread(<年代pan style="color:#A020F0">“彩虹- 16 - 8 mono - 114 secs.wav”);resampledSpeech = resample(originalSpeech,targetFs,originalFs);
用10秒的零填充重新采样信号的开始。这允许输入音频信号在任何压缩应用之前被清楚地听到。
resampledSpeech = [0 (10* targetf,1);resampledSpeech];
将振幅归一化以避免潜在剪切。
resampledSpeech = resampledSpeech ./ max(resampledSpeech);
将重新采样、填充零和标准化的侧链信号写入一个文件。
audiowrite (<年代pan style="color:#A020F0">“resampledSpeech.wav”、resampledSpeech targetFs);
构造音频对象
构造一个dsp。一个udioFileReader
对象用于输入信号和侧链信号。使用ReadRange的属性AudioFileReader,选择输入信号的第二段和侧链信号的前26.5秒进行回放。要允许脚本无限期地运行,请更改playbackCount变量的1来正.
inputAudio =<年代pan style="color:#A020F0">“SoftGuitar-44p1_mono-10mins.ogg”;sidechainAudio =<年代pan style="color:#A020F0">“resampledSpeech.wav”;playbackCount = 1;inputAudioAFR = dsp。AudioFileReader (inputAudio,<年代pan style="color:#A020F0">“PlayCount”playbackCount,<年代pan style="color:#A020F0">“ReadRange”,<年代pan style="color:#0000FF">...(115 * targetFs轮(145.4 * targetFs)));sidechainAudioAFR = dsp。AudioFileReader (年代idechainAudio,<年代pan style="color:#A020F0">“PlayCount”playbackCount,<年代pan style="color:#0000FF">...“ReadRange”[1轮(26.5 * targetFs)));
构造一个压缩机对象。使用兴奋剂比,快AttackTime,速度适中ReleaseTime.这些设置非常适合画外音工作。快速攻击时间确保输入音频在侧链信号超过压缩器阈值后几乎立即被压缩.缓慢的释放时间确保输入音频上的压缩持续通过侧链信号中任何潜在的短静默区域。
iAmYourCompressor =压缩机(<年代pan style="color:#A020F0">“EnableSidechain”,真的,<年代pan style="color:#0000FF">...“SampleRate”targetFs,<年代pan style="color:#0000FF">...“阈值”, -40,<年代pan style="color:#0000FF">...“比”8<年代pan style="color:#0000FF">...“AttackTime”, 0.01,<年代pan style="color:#0000FF">...“ReleaseTime”, 1.5);
构造一个audioDeviceWriter对象来播放侧链和输入信号。
afw = audioDeviceWriter;
构造一个timescope对象查看未压缩的输入信号、侧链信号以及压缩的输入信号。
Scope = timescope(<年代pan style="color:#A020F0">“NumInputPorts”3,<年代pan style="color:#0000FF">...“SampleRate”targetFs,<年代pan style="color:#0000FF">...“TimeSpanSource”,<年代pan style="color:#A020F0">“属性”,<年代pan style="color:#0000FF">...“时间间隔”5,<年代pan style="color:#0000FF">...“TimeDisplayOffset”0,<年代pan style="color:#0000FF">...“LayoutDimensions”(3 - 1),<年代pan style="color:#0000FF">...“BufferLength”, targetFs * 15,<年代pan style="color:#0000FF">...“TimeSpanOverrunAction”,<年代pan style="color:#A020F0">“滚动”,<年代pan style="color:#0000FF">...“YLimits”[1],<年代pan style="color:#0000FF">...“ShowGrid”,真的,<年代pan style="color:#0000FF">...“标题”,<年代pan style="color:#A020F0">“未压缩输入音频-吉他”);范围。一个ctiveDisplay = 2; scope.YLimits = [-1 1]; scope.Title =<年代pan style="color:#A020F0">“侧链音频-演讲”;范围。ShowGrid = true;范围。一个ctiveDisplay = 3; scope.YLimits = [-1 1]; scope.ShowGrid = true; scope.Title =<年代pan style="color:#A020F0">压缩输入音频-吉他;
创建音频流循环
从输入和侧链信号中读取一帧音频。处理输入和侧链信号压缩机对象。播放处理过的音频信号并显示音频数据timescope对象。
你的顶部面板timescope显示未压缩的输入音频信号,中间面板显示侧链音频信号。底部面板显示压缩输入音频信号。注意顶部和底部面板的信号振幅是相同的,直到侧链信号开始。一旦侧链信号被激活,底部面板中的信号振幅就会被压缩。一旦侧链信号结束,底部面板中的信号振幅开始返回到其未压缩水平。
而~isDone(inputAudioAFR) inputAudioFrame = inputAudioAFR();sidechainaudiofframe = sidechainAudioAFR();compressorOutput = iAmYourCompressor(inputAudioFrame,sideChainAudioFrame);afw (sideChainAudioFrame + compressorOutput);范围(inputAudioFrame sideChainAudioFrame compressorOutput);<年代pan style="color:#0000FF">结束
释放对象。
释放(inputAudioAFR)释放(sidechainAudioAFR)释放(iAmYourCompressor)释放(afw)释放(scope)
压缩音频信号
使用动态范围压缩来衰减大音量的声音。 设置 将压缩机设置为阈值为-15 dB,比值为7,膝宽为5 dB。使用音频文件阅读器的采样率。 设置范围以可视化原始音频信号、压缩音频信号和应用的压缩器增益。 播放经过处理的音频,并在瞄准镜上可视化它。framength = 1024;fileReader = dsp。AudioFileReader (<年代pan style="color:#0000FF">...
dRC =压缩机(-15,7,<年代pan style="color:#0000FF">...
Scope = timescope(<年代pan style="color:#0000FF">...
而
比较动态范围限制器和压缩机
动态范围限制器是一种特殊类型的动态范围压缩机。在限制器中,高于操作阈值的水平是严格限制的。在限制器的最简单实现中,效果相当于音频剪辑。在压缩机中,使用指定的压缩比降低高于操作阈值的水平。使用压缩比可以得到更平滑的处理信号。 比较限制器和压缩器在正弦波中的应用 创建一个 创建一个时间范围来可视化生成的正弦信号和处理后的正弦信号。 在音频流循环中,可视化原始正弦波和经过限制器和压缩机处理的正弦波。增加原始正弦信号的振幅来说明效果。 音频信号中限制器和压缩器的比较 比较动态范围限制器和压缩器对鼓轨道的影响。创建一个 在循环中从音频文件中读取连续帧。听并比较动态范围限制和动态范围压缩对音频信号的影响。限制器(<年代pan style="color:#A020F0">“AttackTime”
Scope = timescope(<年代pan style="color:#0000FF">...
而
发布(dRL)发布(dRC)发布(osc)
dRL实验室。Threshold = -20; dRC.Threshold = -20; fileReader = dsp.AudioFileReader(<年代pan style="color:#A020F0">“FunkyDrums-44p1-stereo-25secs.mp3”
numFrames = 300;流(<年代pan style="color:#A020F0">“现在播放原始信号……\n”
现在播放原始信号…
为
现在播放有限信号…
为
现在正在播放压缩信号…
为
减少语音信号中的爆破音
爆破音是由于气流突然释放而产生的辅音。它们在以。开头的单词中最为明显<年代pan class="emphasis">p 创建一个 设计一个高通滤波器,所有频率在120hz以下都有陡滚降。使用一个 在音频流循环中: 读入音频文件的一帧。 使用双向滤波器应用高通滤波。 把音频信号分成两个波段。 应用动态范围压缩到较低的波段。 混音频道。 将处理后的音频信号写入音频设备进行监听。 在时间范围内可视化已处理和未处理的信号。 作为最佳实践,一旦完成就释放对象。 作为最佳实践,一旦完成就释放对象。fileReader = dsp。AudioFileReader (<年代pan style="color:#A020F0">“audioPlosives.wav”
[B,A] = designVarSlopeFilter(48,120/(fileReader.SampleRate/2),<年代pan style="color:#A020F0">“嗨”
而
释放(deviceWriter)释放(fileReader)释放(crossFilt)释放(dRCompressor)释放(scope)
压缩机参数调优
创建一个 创建一个 调用 在音频流循环中: 从文件中读入一帧音频。 应用动态范围压缩。 将音频帧写入音频设备以供收听。 可视化原始音频,处理音频,和增益应用。 流媒体时,调整动态范围压缩机的参数,并收听效果。 作为最佳实践,一旦完成就释放对象。framength = 1024;fileReader = dsp。AudioFileReader (<年代pan style="color:#A020F0">“RockDrums-44p1-stereo-11secs.mp3”
Scope = timescope(<年代pan style="color:#0000FF">...
parameterTuner (dRC)
而
release(deviceWriter) release(fileReader) release(dRC) release(scope)
压缩机侧链鸭
使用 准备音频文件 类的语音文件的输入,将对语音文件进行重新采样和零填充 读入音频信号。重新采样以匹配输入音频信号的采样率(44.1 kHz)。 用10秒的零填充重新采样信号的开始。这允许输入音频信号在任何压缩应用之前被清楚地听到。 将振幅归一化以避免潜在剪切。 将重新采样、填充零和标准化的侧链信号写入一个文件。 构造音频对象 构造一个 构造一个 构造一个 构造一个 创建音频流循环 从输入和侧链信号中读取一帧音频。处理输入和侧链信号 你的顶部面板 释放对象。压缩机
targetFs = 44100;[originalSpeech,originalFs] = audioread(<年代pan style="color:#A020F0">“彩虹- 16 - 8 mono - 114 secs.wav”
resampledSpeech = [0 (10* targetf,1);resampledSpeech];
resampledSpeech = resampledSpeech ./ max(resampledSpeech);
audiowrite (<年代pan style="color:#A020F0">“resampledSpeech.wav”
dsp。一个udioFileReader
对象用于输入信号和侧链信号。使用inputAudio =<年代pan style="color:#A020F0">“SoftGuitar-44p1_mono-10mins.ogg”
iAmYourCompressor =压缩机(<年代pan style="color:#A020F0">“EnableSidechain”
audioDeviceWriter
afw = audioDeviceWriter;
timescope
Scope = timescope(<年代pan style="color:#A020F0">“NumInputPorts”
而
释放(inputAudioAFR)释放(sidechainAudioAFR)释放(iAmYourCompressor)释放(afw)释放(scope)
算法
的压缩机系统对象逐帧逐元素处理信号。
将输入信号转换为dB
的N分信号,x[n],以分贝为单位:
获得计算机
xdB[n]通过增益计算机。增益计算机利用动态范围压缩机的静态特性来衰减超出阈值的增益。
如果指定软膝,增益计算机具有以下静态特性:
在哪里T是阈值,R和W是膝盖的宽度。
如果指定硬膝,增益计算机具有以下静态特性:
计算得到的增益,<年代pan class="inlineequation">gc[n]的计算方法为
获得平滑
gc[n]使用指定的攻击和释放时间属性平滑:
攻击时间系数,<年代pan class="inlineequation">α一个
的计算方法为
释放时间系数,<年代pan class="inlineequation">αR的计算方法为
T<年代ub>一个 攻击时间段是否由AttackTime财产。<年代pan class="inlineequation">TR发布时间段是否由ReleaseTime财产。<年代pan class="inlineequation">Fs输入采样率是否由SampleRate财产。
计算和应用补偿增益
如果MakeUpGainMode设置为默认值“汽车”时,补强增益计算为0 dB输入的计算增益的负数,
给定一个0 dB的稳态输入,该配置实现了0 dB的稳态输出。补强增益由阈值,比,KneeWidth属性。它不依赖于输入信号。
弥补收益,米,被添加到平滑增益中,<年代pan class="inlineequation">g年代[n]:
计算和应用线性增益
计算增益,单位为dB,<年代pan class="inlineequation">g米[n],则转换为线性域:
动态范围压缩机的输出为
的 的
x 如果指定软膝,增益计算机具有以下静态特性:
在哪里 如果指定硬膝,增益计算机具有以下静态特性:
计算得到的增益,<年代pan class="inlineequation">g
g
攻击时间系数,<年代pan class="inlineequation">α
释放时间系数,<年代pan class="inlineequation">α
T<年代ub>一个 如果
给定一个0 dB的稳态输入,该配置实现了0 dB的稳态输出。补强增益由 弥补收益,
计算增益,单位为dB,<年代pan class="inlineequation">g
动态范围压缩机的输出为
将输入信号转换为dB
获得计算机
获得平滑
计算和应用补偿增益
计算和应用线性增益
参考文献
扬诺里斯,迪米特里奥斯,迈克尔·马斯伯格和约书亚·d·赖斯。数字动态范围压缩机设计教程与分析音频工程学会杂志.第60卷,第6期,2012,第399-408页。
扬诺里斯,迪米特里奥斯,迈克尔·马斯伯格和约书亚·d·赖斯。数字动态范围压缩机设计教程与分析
扩展功能
C/ c++代码生成使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
C/ c++代码生成使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
版本历史
另请参阅
noiseGate
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">扩张器
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">限幅器
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">压缩机
主题
noiseGate
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">扩张器
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">限幅器
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">压缩机
主题
Matlabコマンド
次のmatlabコマンドに対応するリンクがクリックされました。 コマンドをmatlabコマンドウィンドウに入力して実行してください。Webブラウザ,はMATLABコマンドをサポ,トしていません。
您也可以从以下列表中选择一个网站: 选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。如何获得最佳的网站性能
欧洲