Hi all,
I would like to create an abstraction to adjust the amplitude of synthetic sounds according to the ear sensitivity. At a given amplitude, we hear the notes in the middle range louder than the high and low notes. This perceptual property of the audition can be somewhat undesired in a musical work. (in my opinion at least)
The equal lines of actual amplitude of notes that seem to have the same loudness are called "isosonic curves". Here are 2 different graphics of these curves :
http://www.multimedia.uqam.ca/cours/audio/images/diag/sonpsy_isoson.gif http://www.comm.uqam.ca/GRAM/illu/mus/nature/CourbeDIsosonie.GIF
A few links that might give you a few hint for the calculations :
http://en.wikipedia.org/wiki/DB%28A%29 http://en.wikipedia.org/wiki/Weighting_filter http://en.wikipedia.org/wiki/Stevens%27_power_law
Anyone would have a formula or a table containing data that could help me to calculate this ? For instance, we would be able to generate sine waves of any frequencies that would be perceived as having the same intensity for all of them, by changing their amplitude according to this leveling formula . This way, we could hear our low freq notes as much as the middle ones. Very valuable. :)
Alexandre Quessy http://alexandre.quessy.net
Hi, Alexandre,
On the one hand, a filter could be designed to approximate what you need, but this sounds like a job for the wavelet transform. A linear filter can't handle the level-dependent changes in iso-sonic curves. In the wavelet domain, you could apply different compression/expansion curves for each subband to approximately invert the equal loudness contours.
The only big problem here is that you need to have a calibrated system to make a real difference. You need to know, when you tell your loudspeaker to output 90 dB at 1000 Hz, it will *be* 90 dB for your listeners (same for all the other frequencies in your composition). Also, the loudness can vary over the listening area, and may depend on reverberation.
If you've already got a multi-band equalizer set up and a microphone to take measurements in some particular listening position, you can already make a decent linear approximation, without anything else.
Chuck
On 1/25/07, Alexandre Quessy listes@sourcelibre.com wrote:
Hi all,
I would like to create an abstraction to adjust the amplitude of synthetic sounds according to the ear sensitivity. At a given amplitude, we hear the notes in the middle range louder than the high and low notes. This perceptual property of the audition can be somewhat undesired in a musical work. (in my opinion at least)
The equal lines of actual amplitude of notes that seem to have the same loudness are called "isosonic curves". Here are 2 different graphics of these curves :
http://www.multimedia.uqam.ca/cours/audio/images/diag/sonpsy_isoson.gif http://www.comm.uqam.ca/GRAM/illu/mus/nature/CourbeDIsosonie.GIF
A few links that might give you a few hint for the calculations :
http://en.wikipedia.org/wiki/DB%28A%29 http://en.wikipedia.org/wiki/Weighting_filter http://en.wikipedia.org/wiki/Stevens%27_power_law
Anyone would have a formula or a table containing data that could help me to calculate this ? For instance, we would be able to generate sine waves of any frequencies that would be perceived as having the same intensity for all of them, by changing their amplitude according to this leveling formula . This way, we could hear our low freq notes as much as the middle ones. Very valuable. :)
Thanks !
Alexandre Quessy http://alexandre.quessy.net
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Alexandre Quessy wrote:
Hi all,
I would like to create an abstraction to adjust the amplitude of synthetic sounds according to the ear sensitivity. At a given amplitude, we hear the notes in the middle range louder than the high and low notes. This perceptual property of the audition can be somewhat undesired in a musical work. (in my opinion at least)
The equal lines of actual amplitude of notes that seem to have the same loudness are called "isosonic curves". Here are 2 different graphics of these curves :
http://www.multimedia.uqam.ca/cours/audio/images/diag/sonpsy_isoson.gif http://www.comm.uqam.ca/GRAM/illu/mus/nature/CourbeDIsosonie.GIF
A few links that might give you a few hint for the calculations :
http://en.wikipedia.org/wiki/DB%28A%29 http://en.wikipedia.org/wiki/Weighting_filter http://en.wikipedia.org/wiki/Stevens%27_power_law
Anyone would have a formula or a table containing data that could help me to calculate this ? For instance, we would be able to generate sine waves of any frequencies that would be perceived as having the same intensity for all of them, by changing their amplitude according to this leveling formula . This way, we could hear our low freq notes as much as the middle ones. Very valuable. :)
btw, there is an object in iemmatrix called [mtx_phon_curve] which should give you what you want.
since it is an abstraction, you can even see how the curves are created.
mfga.sdr IOhannes
Thanks !
Hello all, Very nice, mr. Zmoelnig. Of course, this is exactly what I need.
It appears that the object [list length] cannot be created. Is this a pd 0.40 new feature of the [list] object ? (using pd 0.39-2 extended on Linux)
To use this very nice abstraction, I simply need to multiply the amplitude of the pitch I want to level by the corresponding amplitude in db, which will need to passed in [db2rms] ?
[tabread] | [db2rms] | [*~] ...
Awesome !
Alexandre Quessy http://alexandre.quessy.net
2007/1/25, IOhannes m zmoelnig zmoelnig@iem.at:
Alexandre Quessy wrote:
Hi all,
I would like to create an abstraction to adjust the amplitude of synthetic sounds according to the ear sensitivity. At a given amplitude, we hear the notes in the middle range louder than the high and low notes. This perceptual property of the audition can be somewhat undesired in a musical work. (in my opinion at least)
The equal lines of actual amplitude of notes that seem to have the same loudness are called "isosonic curves". Here are 2 different graphics of these curves :
http://www.multimedia.uqam.ca/cours/audio/images/diag/sonpsy_isoson.gif http://www.comm.uqam.ca/GRAM/illu/mus/nature/CourbeDIsosonie.GIF
A few links that might give you a few hint for the calculations :
http://en.wikipedia.org/wiki/DB%28A%29 http://en.wikipedia.org/wiki/Weighting_filter http://en.wikipedia.org/wiki/Stevens%27_power_law
Anyone would have a formula or a table containing data that could help me to calculate this ? For instance, we would be able to generate sine waves of any frequencies that would be perceived as having the same intensity for all of them, by changing their amplitude according to this leveling formula . This way, we could hear our low freq notes as much as the middle ones. Very valuable. :)
btw, there is an object in iemmatrix called [mtx_phon_curve] which should give you what you want.
since it is an abstraction, you can even see how the curves are created.
mfga.sdr IOhannes
Thanks !
x
Hallo, Alexandre Quessy hat gesagt: // Alexandre Quessy wrote:
It appears that the object [list length] cannot be created. Is this a pd 0.40 new feature of the [list] object ? (using pd 0.39-2 extended on Linux)
Yes, it's new. You could use the [list-len] abstraction from [list]-abs instead, but you need to check out an older version, because the newest one just wraps [list length].
Frank Barknecht _ ______footils.org_ __goto10.org__
Hi all,
2007/2/8, Frank Barknecht fbar@footils.org:
Yes, it's new. You could use the [list-len] abstraction from [list]-abs instead, but you need to check out an older version, because the newest one just wraps [list length].
zexy's [length] also does the job, as far as I know.
As I can see, I am still very bad at using the dB unit for audio amplitude... Anyone has a rule of thumb for this ? Should I use dB with a simple ADSR filter, let say ? I know that if you use them, -6 dB is somewhat half as loud and +6 dB is twice as loud. Great. Now, in pd, 100 is unity while in the industry, the consoles use 0 for unity level. 0 in pd is minus infinity, as far as I know. Now, what is usable ? After a drop of a few dB, we don't hear anything. Perceptualy, I find the standard [*~] range of numbers more linear than using the dB scale.
So, the RMS kind of mean the actual amplitude of the vibrating membrane of the speaker... http://en.wikipedia.org/wiki/Audio_power : hence we use [- 100] [dbtorms] for the conversion. Anything else one should know ?
Alexandre Quessy http://alexandre.quessy.net
Hi Alex, all
...but PDs dB goes to 0, because we have to have the numbers following the same scheme - so that 0 means 0 always I think. Industry uses dBFS (deciBel Full Scale) because it is measuring the signal against the full scale from -96dB in 16bit recordings to 0dB (all bits used).
Basically, the reason for dB is that our ears hear sound in a non-linear fashion, rather like frequency in fact which is why we have [mtof]
Each drop of (n)dB will be heard as the same amount of reduction in loudness, whereas every linear drop is different perceptually. So, if you have a signal at 96dBPD (-4dBFS) and you set it to 90dBPD (-10dbFS), the loudness will be heard to drop by the same amount as when you then set it to 84dBPD (-16dBFS). In fact, you have halved the amplitude twice, so it is a quarter of what it was, but each drop is heard as the same. This is the difference between amplitude (linear [*~ ]) and loudness (logarithmic)
...so you could relate dB to pitch accounting for the energy at different pitches quite simply, if you use inputs to [dBtorms] and [mtof] in some form of inverse-proportion.
[dbtorms] | [*~ ]
Best, Ed
Alexandre Quessy listes@sourcelibre.com wrote: Hi all,
2007/2/8, Frank Barknecht :
Yes, it's new. You could use the [list-len] abstraction from [list]-abs instead, but you need to check out an older version, because the newest one just wraps [list length].
zexy's [length] also does the job, as far as I know.
As I can see, I am still very bad at using the dB unit for audio amplitude... Anyone has a rule of thumb for this ? Should I use dB with a simple ADSR filter, let say ? I know that if you use them, -6 dB is somewhat half as loud and +6 dB is twice as loud. Great. Now, in pd, 100 is unity while in the industry, the consoles use 0 for unity level. 0 in pd is minus infinity, as far as I know. Now, what is usable ? After a drop of a few dB, we don't hear anything. Perceptualy, I find the standard [*~] range of numbers more linear than using the dB scale.
So, the RMS kind of mean the actual amplitude of the vibrating membrane of the speaker... http://en.wikipedia.org/wiki/Audio_power : hence we use [- 100] [dbtorms] for the conversion. Anything else one should know ?
Alexandre Quessy http://alexandre.quessy.net
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
/
/
| |
<======>
| |
/ \
Lone Shark "Aviation" out now on http://www.pyramidtransmissions.com http://www.pyramidtransmissions.com/process.php?pname=ShopfrontProcess-Start
The all-new Yahoo! Mail goes wherever you go - free your email address from your Internet provider.
2007/2/9, Ed Kelly morph_2016@yahoo.co.uk:
So, if you have a signal at 96dBPD (-4dBFS) and you set it to 90dBPD (-10dbFS), the loudness will be heard to drop by the same amount as when you then set it to 84dBPD (-16dBFS).
... but remember, that ear's frequency response curve is dependent on the level of sound... So the amount is not "the same".
Hello all, This abstraction is very nice, but computing matrices on every note is quite expensive on the CPU, no? Perhaps it would be better to store it in a table, let say using 60 (pd)db as a reference. The only thing is that low and high notes are multiplied by factor much bigger than 1 and it makes the sound clip much. Maybe I should just use a [clip] with the values read from the table. Any suggestion for something usable on every day patching ?
Thanks,
a
2007/2/12, Denis Trapeznikoff denissimo@gmail.com:
2007/2/9, Ed Kelly morph_2016@yahoo.co.uk:
So, if you have a signal at 96dBPD (-4dBFS) and you set it to 90dBPD
(-10dbFS), the loudness will be heard to drop by the same amount as when you then set it to 84dBPD (-16dBFS). ... but remember, that ear's frequency response curve is dependent on the level of sound... So the amount is not "the same".
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Hi Alexandre, hi all,
Yesterday I corrected an error in mtx_phon_curve-help.pd and changed the behaviour of [mtx_phon_curve] abstraction (pure-data.cvs.sf.net/cvsroot/puredata/externals/iem/iemmatrix/abs). Now the output is in dB, just like everyone would expect; before it was p^2/p0^2 ...
On Thursday 08 February 2007 06:43, Alexandre Quessy wrote:
Hello all, Very nice, mr. Zmoelnig. Of course, this is exactly what I need. To use this very nice abstraction, I simply need to multiply the amplitude of the pitch I want to level by the corresponding amplitude in db, which will need to passed in [db2rms] ?
[tabread]
[db2rms]
[*~] ...
Awesome !
Alexandre Quessy
Perhaps a nice version could be now:
number box [osc~] | [mtx 1 1] [mtx_phon_curve 60] [$3( [dbtorms] [*~]
btw, there is an object in iemmatrix called [mtx_phon_curve] which should give you what you want.
since it is an abstraction, you can even see how the curves are created.
mfga.sdr IOhannes
Thanks !
Franz