Volume for audio player

Hi,
I'd like to use a slider for the control of the volume.
I tried this :
y_temp=y;
disp(get(hObject,'Value'));
if(get(hObject,'Value')==0)
y_temp=0;
else
y_temp=(get(hObject,'Value')/10)*y;
end
pl=audioplayer(y_temp,f);
resume(pl);
But it doesn't work because when I change the volume, the music starts at the beginning.
Is there a way to control the volume without retarting the music ?
Thank you

Risposte (2)

Walter Roberson
Walter Roberson il 25 Mar 2014

0 voti

Get the audioplayer CurrentSample property. use the audioplayer stop() method to stop playing. Scale the samples for the entire rest of the sound after CurrentSample. audioplayer() that new data.
As you go remember that CurrentSample will be relative to what was queued, so you need to keep track of how far into the original sound you had gotten in order to be able to scale and continue properly.
audioplayer() does not offer any method to flush the queue and queue new samples, or to change the data that is currently queued. If you want to do add more samples to the queue on the fly, you need to work with the Data Acquisition Toolbox.
Note MS Windows systems you may be able to use ActiveX to adjust the volume controls.

6 Commenti

Thibault
Thibault il 25 Mar 2014
Thank you, I understand ! :) But one more question : how can I scale the samples for the entire rest of the sound after CurrentSample ?
Thank you
Honglei Chen
Honglei Chen il 25 Mar 2014
You could set up a variable, say k, and at the beginning, it's 1. Then you always pass in k*x instead of x into the audio player. You want to be able to control volume in real time any way.
Thibault
Thibault il 25 Mar 2014
Yes, but if I don't want to start at the beginning each time I change the volume. I have to get the audioplayer CurrentSample property, then I stop audio player, then I want to resume my music but after CurrentSample.
Honglei Chen
Honglei Chen il 25 Mar 2014
which syntax are you using? If you are using audioplayer with an input argument, then you just need to scale the input samples, no need to touch audioplayer
Thibault
Thibault il 25 Mar 2014
Thank you, I succeed :) But how can I get : get(pl,'TotalSamples') in seconds ? Thanks
Walter Roberson
Walter Roberson il 25 Mar 2014
get() the SampleRate property and divide TotalSamples by that.

Accedi per commentare.

JIANGYU HUANG
JIANGYU HUANG il 14 Apr 2016

0 voti

i meet the same problem now so do you know how to solve this. can you teach me??

Tag

Richiesto:

il 25 Mar 2014

Risposto:

il 14 Apr 2016

Community Treasure Hunt

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

Start Hunting!

Translated by