Since we are dicussing MixedSound, I have a proposal, currently

implemented in muO, for a better panning, by using a -4.5 dB pan law as

explained here:

http://www.cs.cmu.edu/~music/icm-online/readings/panlaws/index.htmlSo I propose in MixedSound

add: aSound pan: leftRightPan volume: volume

"Add the given sound with the given left-right pan, where 0.0 is full

left, 1.0 is full right, and 0.5 is centered. The loudness of the sound

will be scaled by volume, which ranges from 0 to 1.0."

| vol |

vol := (volume max: 0.0) min: 1.0.

sounds := sounds copyWith: aSound.

(self class panValuesFor: leftRightPan) allIn: [:leftPan :rightPan |

leftVols := leftVols copyWith: (leftPan * vol) rounded.

rightVols := rightVols copyWith: (rightPan * vol) rounded]

where, on the class side, we have

panValuesFor: aPos

"aPos ranges from 0.0 to 1.0 (Squeak convention)"

^ (MusicMachine db45PanAt: (aPos * 2) - 1) collect: [:ea |

((ea * ScaleFactor) rounded max: 0) min: ScaleFactor]

The MusicMachine class is in muO, so it would have to be refactored

here. The code is

db45PanAt: pNumber

"pNumber ranges from -1 (45 degrees left) to 1 (45 degrees right)"

"Uses -4.5 dB pan law

ref:

http://www.cs.cmu.edu/~music/icm-online/readings/panlaws/index.html"

| theta |

theta := (pNumber + 1) * Float pi / 4.

^ {

"left" (theta cos * (Float halfPi - theta) / Float halfPi) sqrt.

"right" (theta sin * theta / Float halfPi) sqrt

}

Stef