[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Obtain actual volume of sample being played



How do you access the sndarray for a sound loaded from a .wav sample? From what I can tell, you can either create a Sound object from a .wav file, or from a sndarray object, but I don't see how you can access the backing sndarray from a .wav Sound...

Sorry if I am missing something obvious.

Cheers

Forrest Voight wrote:
You could access a sndarray and average the current portion of it. You
could probably even use numpy to do  a fourier transform on it.

On Tue, Jul 15, 2008 at 12:26 PM, Wyatt Olson <wyatt.olson@xxxxxxxxx> wrote:
Hello,

Does anyone know if it is possible to obtain the actual volume of the sample
being played at a given moment?  This is not the same as getting the volume
level which was set earlier, on either the sample or the channel.

For instance, assume that I am playing a sample which starts at low volume
(-70dB), increases to 0dB after 5 seconds, then fades out to -70dB again.
 If I play that sample at volume = 1.0, I would want to be able to return an
approximation of the actual dB value at the given time.  For instance, if I
were to query it at 0 seconds, I would get 0.000001; querying at 5 seconds
would return 1.0; querying at 7.5 seconds would give 0.5 or something.
Make sense?  I would want to have this controllable at the channel and / or
sample level, not the mixer - I need to show each channel separately.  I
don't care about linear / logarithmic conversions or anything... I
essentially just need a number from 0 to 9 indicating very approximately how
loud the sound is.

I want this information to display semi-accurate VU / peak meter
information, based on actual samples.  This is for my slave software for an
electronic drum set.  Currently I show VU information based on the velocity
of a drum pad hit, which is decent, but it would be nice to use the actual
sample information as well.

I have looked through the documentation, and I don't think it can be done,
but I figured I may as well submit this question to the gurus on teh
interwebs. 8-)

Cheers