From 690030e57c1f4aea6dbeef1da632ebb339d6844d Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 9 Aug 2015 15:54:21 +0200 Subject: [PATCH] Allow playing sounds with stereo effects. This is basically a copy of the playSound routine from Project: Starfighter. --- src/CAudio.cpp | 24 ++++++++++++++++++++++-- src/CAudio.h | 2 ++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/CAudio.cpp b/src/CAudio.cpp index 98d1a86..e20aece 100644 --- a/src/CAudio.cpp +++ b/src/CAudio.cpp @@ -178,7 +178,7 @@ bool Audio::loadMusic(const char *filename) return true; } -void Audio::playSound(int snd, int channel) +void Audio::playSoundRelative(int snd, int channel, float x) { if ((!engine->useAudio) || (soundVolume == 0)) return; @@ -188,9 +188,29 @@ void Audio::playSound(int snd, int channel) return; } - Mix_Volume(channel, soundVolume); + int angle = atanf(x / 320) * 180 / M_PI; + int attenuation = fabsf(x) / 40; + + if (angle < 0) + angle += 360; + if (attenuation > 255) + attenuation = 255; + + Mix_Volume(channel, soundVolume); Mix_PlayChannel(channel, sound[snd], 0); + Mix_SetPosition(channel, angle, attenuation); +} + +void Audio::playSound(int snd, int channel, float x) +{ + x -= (engine->playerPosX + 320); + playSoundRelative(snd, channel, x); +} + +void Audio::playSound(int snd, int channel) +{ + playSoundRelative(snd, channel, 0); } void Audio::playMusic() diff --git a/src/CAudio.h b/src/CAudio.h index 500455a..d9faa5c 100644 --- a/src/CAudio.h +++ b/src/CAudio.h @@ -50,6 +50,8 @@ class Audio { void registerEngine(Engine *engine); bool loadSound(int i, const char *filename); bool loadMusic(const char *filename); + void playSoundRelative(int snd, int channel, float x); + void playSound(int snd, int channel, float x); void playSound(int snd, int channel); void playMusic(); void playMusicOnce(); -- 2.39.5