主要内容

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-by-1列向量或N——- - - - - -C矩阵。行数,N,必须等于或小于跳长(大小(audioIn1) < =元素个数(窗口)-OverlapLength).矩阵的列被解释为单独的通道。

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

数据类型:|
复数的支持:是的

输出参数

全部展开

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

数据类型:|

对象的功能

要使用对象函数,请将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]德里杰,乔纳森和迈纳德Müller。《音乐信号的时间尺度修正综述》。应用科学.2016年第6卷第2期

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

扩展功能

版本历史

介绍了R2019b

Baidu
map