我正在使用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的长度加倍? (伸展但保持正确的音符?)谢谢。
答案 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);