Opened 16 years ago

Closed 16 years ago

Last modified 10 months ago

#8317 closed patch

Panning and volume

Reported by: eriktorbjorn Owned by: fingolfin
Priority: normal Component: Engine: SCUMM
Keywords: Cc:
Game: Indiana Jones 4


I didn't realize it until I started replaying some
games in preparation for 0.6.0, but sound effects are
softer in the current version of ScummVM than they are
in earlier versions. This is probably because of the
panning. When a sound isn't panned, vol_l and vol_r
won't ever exceed 127, so sound effects are muted, even
when they should be playing at full blast.

The more I think about that, the more wrong it seems.
As an experiment, the attached patch causes the panning
to affect at most one channel at a time. I was afraid
that this would affect the perceived volume badly, but
it sounds pretty ok to me.

Ticket imported from: #886786. Ticket imported from: patches/422.

Attachments (1)

panvolume.diff (1.6 KB ) - added by eriktorbjorn 16 years ago.
Patch against a January 27 CVS snapshot

Download all attachments as: .zip

Change History (10)

by eriktorbjorn, 16 years ago

Attachment: panvolume.diff added

Patch against a January 27 CVS snapshot

comment:1 by eriktorbjorn, 16 years ago

Owner: set to fingolfin

comment:2 by eriktorbjorn, 16 years ago

By the way, the game that finally made me experiment with
this was Fate of Atlantis. I realized I could hardly make
out Indy's first line in the intro. Partly because I had
cranked up the music volume. :-)

comment:3 by fingolfin, 16 years ago

That patch isn't correct - mostly because the "panning" code we
have isn't actually panning, but balance ;-)

When I am back home later today or tonight, I can look into
replacing this with either real panning code, or balance code,
depending on what we actually need (or maybe both).

Quick explanation:
* balance is the effect we have (and which your patch fixes): turn
the volume of the two channels up and down seperatly
* pan OTOH will not loose any audio data; if for example panning
is set 100% to the right, it will play *both* the left and right
channel on the right speaker, and silence on the left speaker.

The question which remains, of course, is which one the various
engines actually want/need :-)

comment:4 by eriktorbjorn, 16 years ago

The only games I know of that use "panning" (in whatever
sense we mean it):

* Curse of Monkey Island
* Broken Sword I
* Broken Sword II

Both CMI and Broken Sword use panning to simulate sound
coming from either side of the scene.

I only know of one case where CMI uses it, and that's when
van Halgen is swinging across the screen between
ship-to-ship battles. (I'm not even sure if this is still
working. It didn't sound like it when I tried, but I didn't
have a proper savegame so I had to cheat my way there.) Note
that CMI changes the panning of the sound several times
while it is playing.

I'm not too familiar with Broken Sword I, but I assume it
uses it the same way as Broken Sword II. BS2 uses it for
both sound effects and speech. I have a feeling that most of
these sounds are actually stored as mono, but at least BS1
have a few stereo sound effects, e.g. the sound of the wind
at the very beginning. (This is probably to allow the sound
to track the movement of the leaves, without having to
change panning in mid-sound.)

comment:5 by eriktorbjorn, 16 years ago

I forgot to mention that the original BS2 engine implemented
panning by calling IDirectSoundBuffer_SetPan(). I don't know
if that means any more to you than it did to me. :-)

comment:6 by fingolfin, 16 years ago

Well at least it is something that we can look up in some online
docs (google rulez :-)

comment:7 by fingolfin, 16 years ago

Status: newclosed

comment:8 by fingolfin, 16 years ago

Official MSDN docs:

The docs indicate that the "pan" there actually is "balance"; i.e.
our code now is correct (with your patch, which I'll commit now,
together with a rename from pan->balance)

comment:9 by digitall, 10 months ago

Component: Engine: SCUMM
Game: Indiana Jones 4
Note: See TracTickets for help on using tickets.