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短)
返回什么?您能检测到开始暂停和结束暂停的开始位置吗?什么时候你有一个恒定的序列?