How can I alter the speed of a wav file without altering its pitch?
    9 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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 Commenti
Risposte (2)
  Brian Hemmat
    
 il 29 Mar 2018
        
      Modificato: Brian Hemmat
    
 il 5 Apr 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 Commenti
Vedere anche
Categorie
				Scopri di più su Audio Processing Algorithm Design in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



