Effacer les filtres
Effacer les filtres

Audio Pitch Manipulation Through Time

2 vues (au cours des 30 derniers jours)
Hans Buchele
Hans Buchele le 30 Sep 2022
Commenté : Star Strider le 20 Oct 2022
Dear Community, I recently discovered the possibility to manipulate the pitch of a sine wave by changing the time interval values before the creation (y=sin(2*pi*f*t)) For my new project I would need to manipulate the pitch of an imported audio file in the same way but I can not figure out how to achieve it. Any help is very much appreciated! Thanks!

Réponse acceptée

Star Strider
Star Strider le 30 Sep 2022
I am not certain what you want to do. One option could be the resample: function.
  6 commentaires
Hans Buchele
Hans Buchele le 3 Oct 2022
I think you are right! Thanks for your help Star Strider!
Star Strider
Star Strider le 3 Oct 2022
Modifié(e) : Star Strider le 3 Oct 2022
As always, my pleasure!
EDIT — (3 Oct 2022 at 15:12)
Thinking about this further, while the sampling frequency must be kept constant, the intervals in the time vector used to create a specific sound does not.
Example —
Fs = 44100;
t = linspace(0, 3*Fs-1, 3*Fs).'/Fs; % Original Time Vector (Column Vector)
s = @(t) sin(2*pi*t*1000); % Original Sound Function
ts = 0.75*exp(-(t-1.5).^2*25); % 'Warped' Time Vector
th = hypot(t,ts); % Sampling Times Of 'Warped' Time Vector
figure
plot(t,th)
grid
xlabel('Time')
ylabel('Warped Time')
figure
plot(t,s(t))
grid
xlabel('Time')
ylabel('Amplitude')
title('Original Tone')
figure
plot(t,s(th))
grid
xlabel('Time')
ylabel('Amplitude')
title('''Warped'' Tone')
sound(s(t),Fs)
pause(3)
sound(s(th),Fs)
The sampling intervals must be monotonically increasing, and the sound function assumes that they are regularly-spaced, so varying the time intervals (created by taking the hypotenuse of the ‘warped’ time vector) used to calculate the tone frequency causes the frequency to change when the sound is played back. This example uses a Gaussian function to warp the time vector, however any continuouis function will likely work. (Discontinuous functions would create a ‘popping’ sound at the discontinuities, so I do not recommend them.)
.

Connectez-vous pour commenter.

Plus de réponses (1)

jibrahim
jibrahim le 20 Oct 2022
you can use shiftPitch for this:
%Read in an audio file and listen to it.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
sound(audioIn,fs)
%Increase the pitch by 3 semitones and listen to the result.
nsemitones = 3;
audioOut = shiftPitch(audioIn,nsemitones);
sound(audioOut,fs)
%Decrease the pitch of the original audio by 3 semitones and listen to the result.
nsemitones = -3;
audioOut = shiftPitch(audioIn,nsemitones);
sound(audioOut,fs)
  1 commentaire
Star Strider
Star Strider le 20 Oct 2022
The shiftPitch function requires the Audio Toolbox.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Audio Processing Algorithm Design dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by