Changeset - r2594:47101c29af66
[Not reviewed]
master
0 1 0
peter1138 - 18 years ago 2005-11-04 10:02:50
peter1138@openttd.org
(svn r3131) Enable panning of audio relative to screen position.
1 file changed with 12 insertions and 5 deletions:
sound.c
12
5
0 comments (0 inline, 0 general)
sound.c
Show inline comments
 
@@ -23,6 +23,8 @@ static uint _file_count;
 
static FileEntry* _files;
 

	
 
#define SOUND_SLOT 31
 
// Number of levels of panning per side
 
#define PANNING_LEVELS 16
 

	
 

	
 
static void OpenBankFile(const char *filename)
 
@@ -132,15 +134,20 @@ bool SoundInitialize(const char *filenam
 
}
 

	
 
// Low level sound player
 
static void StartSound(uint sound, uint panning, uint volume)
 
static void StartSound(uint sound, int panning, uint volume)
 
{
 
	MixerChannel* mc;
 
	uint left_vol, right_vol;
 

	
 
	if (volume == 0) return;
 
	mc = MxAllocateChannel(_mixer);
 
	if (mc == NULL) return;
 
	if (!SetBankSource(mc, sound)) return;
 
	MxSetChannelVolume(mc, volume << 8, volume << 8);
 

	
 
	panning = clamp(panning, -PANNING_LEVELS, PANNING_LEVELS);
 
	left_vol = (volume * PANNING_LEVELS) - (volume * panning);
 
	right_vol = (volume * PANNING_LEVELS) + (volume * panning);
 
	MxSetChannelVolume(mc, left_vol * 128 / PANNING_LEVELS, right_vol * 128 / PANNING_LEVELS);
 
	MxActivateChannel(mc);
 
}
 

	
 
@@ -185,11 +192,11 @@ static void SndPlayScreenCoordFx(SoundFx
 
		if (vp != NULL &&
 
				IS_INSIDE_1D(x, vp->virtual_left, vp->virtual_width) &&
 
				IS_INSIDE_1D(y, vp->virtual_top, vp->virtual_height)) {
 
			int left = ((x - vp->virtual_left) >> vp->zoom) + vp->left;
 
			int left = (x - vp->virtual_left);
 

	
 
			StartSound(
 
				_sound_idx[sound],
 
				clamp(left / 71, 0, 8),
 
				left / (vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
 
				(_sound_base_vol[sound] * msf.effect_vol * _vol_factor_by_zoom[vp->zoom]) >> 15
 
			);
 
			return;
 
@@ -219,7 +226,7 @@ void SndPlayFx(SoundFx sound)
 
{
 
	StartSound(
 
		_sound_idx[sound],
 
		4,
 
		0,
 
		(_sound_base_vol[sound] * msf.effect_vol) >> 7
 
	);
 
}
0 comments (0 inline, 0 general)