在MATLAB中增加/减少WAV文件的播放速度

时间:2015-04-16 09:31:00

标签: matlab

您好我需要MATLAB的帮助。 我的wave文件使用以下代码:

x=wavread('D:\\Sample.wav');

现在我想用reshape在MATLAB中增加/减少WAV文件的播放速度。例如,速度加倍。

让我来解释一下。 当我们使用这段代码时:

x=wavread('D:\\\Sample.wav');

现在x是Matrix 92086 * 1 现在我想为X的Decussate设置零像这样:

0
value1
0
value2
...
...

现在我该如何处理重塑

之后,我需要将两个WAV文件合并为一个WAV文件。例如,我有两个文件:

  x=wavread('D:\\Sample1.wav');
  y=wavread('D:\\Sample2.wav');

需要合并这些并播放它。

1 个答案:

答案 0 :(得分:2)

我认为您的意思是使用resample而不是reshape功能。 reshape用于(好)重塑矩阵,即改变行数和列数。 resample函数可用于更改信号的采样率。您可以使用它来增加/降低WAV文件的播放速度。 resample的语法是:

y = resample(x,p,q);

其中x是输入信号,p是所需的采样率,q是当前的采样率。然后输出y为输入x,重新采样为原始费率的p/q倍。

现在我们怎样才能加快速度? - 如果我们设置p=2q=1,我们会以采样率的两倍得到重采样信号,即我们有两倍的采样率。如果您使用相同的命令播放WAV,则信号需要两倍的播放时间,因此我们将播放速度除以2.

为了加快播放速度,我们必须反过来设置p=1q=2

x = wavread('D:\\Sample.wav');
y = resample(x,1,2);

-

根据编辑中的要求,当然可以添加零,例如在每隔一个位置改变采样率。请注意,这会产生高频噪声,通常通过FIR滤波消除。然而,程序非常简单:

x = x(:).';                  % Make x a row vector
y = [x; zeros(1,numel(x))];  % add one zero between elements
y = y(:);

最后一行在这里发挥了作用:它采用y的列并将它们堆叠在彼此之上。由于x是一行,并且我们在其下方添加了一行零,因此生成的y将包含x的所有元素,其中值之间为零。

由于您特别想使用reshape,我们可以使用重塑进行相同操作:

x = x(:).';                  % Make x a row vector
y = [x; zeros(1,numel(x))];  % add one zero between elements
y = reshape(y,[],1);

-

要将两个WAV文件合并为一个,我们可以使用[...]表示法或cat函数简单地连接向量。

x = wavread('D:\\Sample1.wav');
y = wavread('D:\\Sample2.wav');

z = [x,y];
z = cat(2,x,y);