How can I alter the speed of a wav file without altering its pitch?
조회 수: 43 (최근 30일)
이전 댓글 표시
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
답변 (2개)
Brian Hemmat
2018년 3월 29일
편집: Brian Hemmat
2020년 4월 5일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Audio and Video Data에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!