Matlab-双持续时间.wav

Matlab-双持续时间.wav,matlab,double,Matlab,Double,我正在使用wavread功能从一个单独的注释中创建单独的注释 我正在使用重采样功能创建这些注释。例如: 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 上面的代码似乎工作得很好。不幸的是,我

我正在使用
wavread
功能从一个单独的注释中创建单独的注释

我正在使用
重采样
功能创建这些注释。例如:

    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的长度增加一倍,最简单的方法是什么?(拉伸但保持正确的音符?)谢谢。

您需要将
f5\u short
的大小加倍,而不是索引它:

f5_db = repmat(f5_short, 2, 1);
或者只是

f5_db = [f5_short; f5_short];

如果在
f5\u 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);

我尝试了
repmat
方法,但在连接它时会抛出错误,例如
sample=[f5_db;d4_short]。使用第二种方法是没有好处的,因为在原始注释前后都有一个轻微的停顿,所以在加长注释中会有一个停顿……你确定必须用
垂直连接吗符号?如果它们的长度不同,则会出现错误。尝试
水平连接。您的第一个表达式中的
a
是什么?你能举个例子来生成它吗?啊,你正在使用信号处理工具箱。没有。但是如果你在序列的开头和结尾有一个停顿,你可能可以从中间乘一些序列。什么是
f5\u short
size?我在中读取了wav文件并对其重新采样
f5=resample(a,440698)a是a4的钢琴音符,因此重采样中的440Hz。。。f5_short为1秒长,由
f5_short=f5(1:44100)生成我的意思是
大小(f5_短)
返回的确切值是多少?
类(f5\u短)
返回什么?您能检测到开始暂停和结束暂停的开始位置吗?什么时候你有一个恒定的序列?