2013-04-10 2 views
1

Я создаю отдельные заметки из одной заметки, которая читается с использованием функции wavread.Matlab - Двойная продолжительность .wav

Я использую функцию 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. 

Что самый простой, почему удвоить длину of not/wav без изменения примечания? (растяните, но сохраните правильную ноту?) Спасибо.

ответ

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); 
+0

Я пробовал метод 'repmat', но он выдает ошибку при ее конкатенации, например' sample = [f5_db; d4_short]; '. И использование вашего второго метода не выгодно, так как есть небольшая пауза до и после оригинальных заметок, поэтому вы получаете паузу внутри удлиненной заметки ... – Reanimation

+0

Вы уверены, что вам нужно конкатенировать по вертикали с символом ';'? Если они имеют разную длину, вы получите ошибку. Попробуйте ',' конкатенировать по горизонтали. Что такое 'a' в вашем первом выражении? Можете ли вы привести пример для его создания? – yuk

+0

А, вы используете Инструмент обработки сигналов. Не иметь его. Но если у вас есть пауза в начале и в конце последовательности, вы, вероятно, можете умножить некоторую последовательность из середины. Что такое размер 'f5_short'? – yuk