主要内容

audioTimeScaler

对流音频应用时间缩放

描述

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

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

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

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

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

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

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

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

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

属性

全部展开

除非另有说明,属性是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一定是真的N-乘1列向量N——- - - - - -C矩阵。行数,N,必须等于或小于跳长(大小(audioIn1) < =元素个数(窗口)-OverlapLength).矩阵的列被解释为单独的通道。

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

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

输出参数

全部展开

时间拉长的音频,返回为列向量或矩阵。

数据类型:|

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

为了最小化开窗造成的伪影,创建一个能够完美重建的平方根Hann窗口。使用iscola验证设计。

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

创建一个audioTimeScaler加速因子为1.5.改变α听听加速因子的效果。

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

创建一个dsp。AudioFileReader对象从音频文件中读取帧。输入到音频时间标量的帧长度必须小于或等于定义的分析跳距长度audioTimeScaler.为了最小化缓冲,将文件读取器的每帧样本设置为分析跳数长度。

hopLength = numel(aTS.Window) - overlapLength;fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”...“SamplesPerFrame”, hopLength);

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

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

在音频流循环中,将帧读取到文件中,应用时间尺度修改,然后将帧写入设备。

~isDone(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. 将修改后的音频写入音频设备。

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

作为一种最佳实践,一旦完成就释放对象。

release(fileReader) release(shortTimeFourierTransform) release(timeScaleModification) release(deviceWriter)

算法

audioTimeScaler使用相同的相位声码器算法stretchAudio是基于[1][2]

参考文献

[1] Driedger, Johnathan, Meinard Müller。音乐信号的时间尺度修正综述应用科学.2016年第6卷第2期。

[2] Driedger, Johnathan。音乐音频信号的时间尺度修正算法硕士论文,萨尔州大学,2011。

扩展功能

介绍了R2019b