主要内容

audioTimeScaler

时间扩展应用于流式音频

描述

audioTimeScaler独立对象执行修改音频的时间尺度(TSM)在每个输入通道。

修改流式音频的时间尺度:

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

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

美国胸科协会= audioTimeScaler创建一个对象,美国胸科协会独立,执行音频修改时间尺度在每个输入通道。

美国胸科协会= audioTimeScaler (speedupFactor)设置SpeedupFactor财产speedupFactor

美国胸科协会= audioTimeScaler (___,“名字”,价值)每个属性集的名字到指定的价值。未指定的属性有默认值。

例子:aTS = audioTimeScaler(1.2,“窗口”,sqrt(损害(1024年,“周期性”),“OverlapLength”, 768年)创建一个对象,美国胸科协会,增加音频的节奏由原来的1.2倍速度使用一个周期损害窗口1024点和768点重叠。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

加速因子,指定为一个积极的真正的标量。

可调:是的

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

域的输入信号,指定为“时间”“频率”

数据类型:字符|字符串

分析窗口中,指定为一个真正的向量。

请注意

如果使用audioTimeScaler与频域输入,您必须指定窗口同一个窗口用于转换audioIn频域。

数据类型:|

重叠相邻的长度分析窗口,指定为一个非负整数。

请注意

如果使用audioTimeScaler与频域输入,您必须指定OverlapLength相同的重叠长度用来变换audioIn时频表示。

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

FFT长度指定为一个正整数。默认的,[],意味着FFT长度等于输入信号的行数。

依赖关系

要启用这个特性,设置InputDomain“时间”

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

申请身份锁相,指定为真正的

数据类型:逻辑

使用

描述

例子

audioOut= aTS (audioIn)时标修改适用于输入,audioIn,并返回时间尺度的输出,audioOut

输入参数

全部展开

输入音频、指定为一个列向量或矩阵。如何audioTimeScaler解释audioIn取决于InputDomain财产。

  • 如果InputDomain被设置为“时间”,audioIn必须是一个真正的N1列向量或N——- - - - - -C矩阵。的行数,N,必须等于或小于跳长度(大小(audioIn1)< =元素个数(窗口)- - -OverlapLength)。矩阵的列解释为单个通道。

  • 如果InputDomain被设置为“频率”,指定audioIn作为一个真正的或复杂的NFFT1列向量或NFFT——- - - - - -C矩阵。的行数,NFFT,DFT计算点的数量,和设置在第一次调用音频时间计数器。NFFT必须大于或等于窗口长度(大小(audioIn1)> =元素个数(窗口))。矩阵的列解释为单个通道。

数据类型:|
复数的支持:金宝app是的

输出参数

全部展开

Time-stretched音频,返回一个列向量或矩阵。

数据类型:|

对象的功能

使用一个目标函数,指定系统对象™作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

最小化窗口造成的工件,创建一个平方根损害窗口能够完美的重建。使用iscola来验证设计。

赢得=√损害(1024“周期”));overlapLength = 896;iscola(赢,overlapLength)
ans =逻辑1

创建一个audioTimeScaler加速因子1.5。变化的值α听到加速因子的影响。

α=1.5;aTS = audioTimeScaler (“SpeedupFactor”α,“窗口”,赢了,“OverlapLength”,overlapLength);

创建一个dsp.AudioFileReader对象阅读帧从一个音频文件。帧音频的输入时间定标器的长度必须小于或等于分析跳中定义的长度audioTimeScaler。减少缓冲,设置文件的样本每帧读者分析跳长度。

hopLength =元素个数(aTS.Window)——overlapLength;fileReader = dsp.AudioFileReader (“Counting-16-44p1-mono-15secs.wav”,“SamplesPerFrame”,hopLength);

创建一个audioDeviceWriter帧写入您的音频设备。使用相同的采样率文件阅读器。

deviceWriter = audioDeviceWriter (“SampleRate”,fileReader.SampleRate);

在一个音频流循环,读一个框架文件,申请时间范围修改,然后写一个框架的设备。

~结束(fileReader) audioIn = fileReader ();audioOut = aTS (audioIn);deviceWriter (audioOut);结束

作为一项最佳实践,一旦完成释放你的对象。

发行版(deviceWriter)发布(fileReader)发布(aTS)

创建一个窗口能够完美的重建。使用iscola来验证设计。

赢得= kbdwin (512);overlapLength = 256;iscola(赢,overlapLength)
ans =逻辑1

创建一个audioTimeScaler加速因子0.8。集InputDomain“频率”并指定窗口和重叠长度用于音频时域变换到频域。集LockPhase真正的提高保真度在时间尺度的输出。

α= 0.8;timeScaleModification = audioTimeScaler (“SpeedupFactor”α,“InputDomain”,“频率”,“窗口”,赢了,“OverlapLength”overlapLength,“LockPhase”,真正的);

创建一个dsp.AudioFileReader对象阅读帧从一个音频文件。创建一个dsp.STFT对象执行流式音频的短时傅里叶变换。指定相同的长度你用来创建窗口和重叠audioTimeScaler。创建一个audioDeviceWriter对象编写框架到您的音频设备。

fileReader = dsp.AudioFileReader (“RockDrums-44p1-stereo-11secs.mp3”,“SamplesPerFrame”元素个数(赢得)-overlapLength);shortTimeFourierTransform = dsp.STFT (“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”元素个数(赢得));deviceWriter = audioDeviceWriter (“SampleRate”,fileReader.SampleRate);

在一个音频流循环:

  1. 从文件读取一帧。

  2. 输入STFT的框架。的dsp.STFT对象执行缓冲。

  3. 申请时间范围修改。

  4. 写修改音频音频设备。

~结束(fileReader) x = fileReader ();X = shortTimeFourierTransform (X);y = timeScaleModification (X);deviceWriter (y);结束

作为一项最佳实践,一旦完成释放你的对象。

发布(fileReader)发布(shortTimeFourierTransform)发布(timeScaleModification)发布(deviceWriter)

算法

audioTimeScaler声码器算法,使用相同的阶段stretchAudio基于描述[1][2]

引用

[1]Driedger, Johnathan, Meinard穆勒。“回顾时标修改音乐信号。”应用科学。问题2卷。6日,2016年。

[2]Driedger, Johnathan。“时间尺度修正算法对音乐音频信号。”Master's thesis, Saarland University, 2011.

扩展功能

介绍了R2019b