Potrafię przesunąć cały sygnał za pomocą resample i wypróbowałem kod wokodera fazowegohere.Przyrostowo/stopniowo zmieniaj skok sygnału w czasie, używając kodu oktawowego/matlab
Próbowałem zostały również repmat and interpolation i zajrzałem do fft and interp1
Jak mogę narastająco/stopniowo zmienić wysokość sygnału w czasie? Dołączyłem przykład z Original Signal i staram się brzmieć tak, jak brzmiał Processed Signal (stworzyłem przetwarzany sygnał za pomocą Audacity i używając ich efektu Sliding time scale/pitch shift
). Ale chciałbym stworzyć ten sygnał w Octave 4.0. Jeśli słuchasz Processed Signal, możesz stopniowo zwiększać wysokość pliku, ale plik ten ma taką samą długość (w sekundach) co plik Original Signal.
Używam Octave 4.0, która jest jak Matlab
Oto kod, który może zmienić wysokość całego sygnału i zachować tę samą długość oryginalnego sygnału w sekundach, ale nie jestem pewien, jak niech stopniowo zmieni on wysokość sygnału w czasie. Podziękowania dla rayryeng za doprowadzenie mnie do tego miejsca.
clear, clc
[ya, fs, nbitsraw] = wavread('/tmp/original_signal.wav');
num_per_sec=2.4; %// Define total number of times we see the signal
%// Get total number of integer times we see the signal
num_whole = floor(num_per_sec);
%// Replicate signal
yb=repmat(ya,num_whole,1);
%// Determine how many samples the partial signal consists of
portion = floor((num_per_sec - num_whole)*length(ya));
%// Sample from the original signal and stack this on top of replicated signal
yb = [yb; ya(1:portion)];
%interpolation
xxo=linspace(0,1,length(yb))';
xxi=linspace(0,1,length(ya))';
yi_t=interp1(xxo,yb,xxi,'linear');
wavwrite([yi_t'] ,fs,16,strcat('/tmp/processed_signal.wav')); % export file
Ponieważ wydaje się, że jesteś zainteresowany robieniem tego dla sygnałów mowy, możesz chcieć przyjrzeć się analizie/narzędzia do resyntezy, takie jak [PSOLA] (https://en.wikipedia.org/wiki/PSOLA).Takie narzędzia powinny dawać znacznie bardziej naturalną zmianę wysokości tonu. (Zauważ, że PSOLA jest dość długa w zębach - obecnie może być lepsza alternatywa). –
audacity używa biblioteki [sbsms] (https://sourceforge.net/projects/sbsms/) do modelowania sinusoidalnego podpasma. Jeśli chcesz może przepisać wszystko w MATLAB/Octave, albo skompilować je i użyć jako mex/oct – rahnema1