Matlab - .wav的双倍持续时间

时间:2013-04-10 16:06:46

标签: matlab double

我正在使用wavread函数读取的单个笔记创建单个笔记。

我正在使用resample功能创建这些笔记。例如:

    f5  = resample(a,440,698); %creates note.
    f5_short  = f5(dur:Hz);    %creates duration of note (ie 1 sec)
    f5_hf  = f5_short(dur:Hz/2); %creates note of half duration

上面的代码似乎运行良好。不幸的是我在创建“双音符”时遇到了麻烦...我不想只播放两次相同的音符而且我尝试了以下内容:

    f5_db  = f5_short(dur*2:Hz); %exceeds size of matrix
    f5_db  = f5_short(dur:Hz*2); %exceeds size of matrix
    f5_db  = resample(f5_short,Hz*2,330); %tried upSampling it and although lengths it, note becomes deeper.

最简单的原因是如何在不改变音符的情况下将not / wav的长度加倍? (伸展但保持正确的音符?)谢谢。

1 个答案:

答案 0 :(得分:2)

您需要将f5_short的大小加倍,而不是将其编入索引:

f5_db = repmat(f5_short, 2, 1);

或只是

f5_db = [f5_short; f5_short];

如果您在f5_short的开头和结尾处有暂停,但中间序列是常量,则可以重现中间值以获得双音符。像这样:

f5_short_len = length(f5_short);
f5_short_mid = floor(f5_short_len/2);
f5_db = [f5_short(1:f5_short_mid,:); ...
         repmat(f5_short(f5_short_mid,:),f5_short_len,1); ...
         f5_short(f5_short_mid+1:f5_short_len,:)];

如果您想删除暂停;

f5_short = repmat(f5_short(f5_short_mid),f5_short_len,1);
f5_db = repmat(f5_short, 2, 1);