How can I alter the speed of a wav file without altering its pitch?
17 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I'm trying to be able to load a wav file, and either speed it up or slow it down. I've tried only changing the sampling frequency, but that changes the pitch of the signal. I find that the problem keeps becoming more and more complex as I go through to problem, so any help at all would be valuable. here's what I've attempted to do so far, but I only get static when I play back the file:
clear
[fName, pName] = uigetfile('*.wav');
[sig, fs, nbits] = wavread([pName fName]);
n = 2; %speed by which file will be altered
for x = 2:(length(sig)-1);
newFreq(x) = fs/(2*pi)*acos((sig(x+1)+sig(x-1))/(2*sig(x)));
newFreq(length(sig)) = 0;
end
Fs = fs*n;
t = 0:1/Fs:(length(newFreq)-1)/Fs;
newSig = cos(2*pi*newFreq.*t);
size(newSig)
newerSig = transpose(newSig);
size(newerSig)
myAP = audioplayer(newSig,Fs);
playblocking(myAP);
3 comentarios
Respuestas (2)
Brian Hemmat
el 29 de Mzo. de 2018
Editada: Brian Hemmat
el 5 de Abr. de 2020
Typically, you would use a phase vocoder. The Pitch Shifting and Time Dilation Using a Phase Vocoder example in Audio Toolbox walks you through the algorithm.
Starting in R2019b, you can use the stretchAudio function or the audioTimeScaler object (for streaming).
0 comentarios
Ver también
Categorías
Más información sobre Audio Processing Algorithm Design en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!