Duration of generated sound not correct
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Anton M
el 25 de Mzo. de 2022
Respondida: Mathieu NOE
el 25 de Mzo. de 2022
Hello,
I need to create 25ms ramped sounds with different frequencies. I was successful in creating the ramp, but something is not right with the duration as it is always longer than what is inserted. I think it is related to the sampling rate but I cant figure out the exact problem:
Amp = 0.5; %amplitude
Freq = 1000; %Frequency of the sound
Fsam = 44100; %Sampling rate
Dur = 2; %Duration of the sound in seconds
dt = 1/Fsam
Time = 0: dt :Dur-dt;
y = Amp*sin(2*pi*Freq*Time);
plot (y);
xlabel('Time (ms)');
ylabel('Amplitude');
%% Ramp the sound
y = Amp*sin(2*pi*Freq*Time);
RampDur = 0.01;
NsamRamp = round(RampDur/dt);
OnRamp = linspace(0,1,NsamRamp);
OffRamp = fliplr(OnRamp);
y(1:NsamRamp) = OnRamp.*y(1:NsamRamp);
y(end-NsamRamp+1:end) = OffRamp.*y(end-NsamRamp+1:end);
plot(Time, y);
xlim ([0 Dur]);
sound(y)
Thanks for your support!
0 comentarios
Respuesta aceptada
Scott MacKenzie
el 25 de Mzo. de 2022
Editada: Scott MacKenzie
el 25 de Mzo. de 2022
Change
sound(y);
to
sound(y,Fsam);
The sound function assumes a sampling rate of 8192 Hz. If a different sampling rate is used, it must be provided as a 2nd argument.
2 comentarios
Más respuestas (1)
Mathieu NOE
el 25 de Mzo. de 2022
hello
some minor modifications and suggestion
Amp = 0.5; %amplitude
Freq = 1000; %Frequency of the sound
Fsam = 44100; %Sampling rate
Dur = 2; %Duration of the sound in seconds
dt = 1/Fsam;
% Time = 0: dt :Dur-dt; % no
Time = 0: dt :Dur; % yes
y = Amp*sin(2*pi*Freq*Time);
plot (y);
%xlabel('Time (ms)'); % no
xlabel('Time (s)'); % yes
ylabel('Amplitude');
%% Ramp the sound
y = Amp*sin(2*pi*Freq*Time);
RampDur = 0.01; % 25 ms ??
NsamRamp = round(RampDur/dt);
window = ones(size(y)); % init window to 1
window(1:NsamRamp) = linspace(0,1,NsamRamp); % ramp up section
window(end-NsamRamp+1:end) = linspace(1,0,NsamRamp); % ramp down section
y = window.*y;
plot(Time, y);
% xlim ([0 Dur]); % not needed
still I don't understand where the 25ms should apply (the ramp duration ? so why define RampDur = 0.01 ? )
the code does generated a 2 seconds long signal as you requested - there is no big surprise here ; what is your issue ?
0 comentarios
Ver también
Categorías
Más información sobre Audio I/O and Waveform Generation 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!