]> git.mxchange.org Git - simgear.git/blobdiff - simgear/sound/sample_openal.cxx
Maik JUSTUS: fix/implement directional sound
[simgear.git] / simgear / sound / sample_openal.cxx
index 366b6105a711a1a6a53fdd88ec8a6e752f49b387..2eb4910d2bf73426a7e3ec4029c875790cb89c03 100644 (file)
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 // $Id$
 
+#ifdef HAVE_CONFIG_H
+#  include <simgear_config.h>
+#endif
 
 #if defined( __APPLE__ )
 # define AL_ILLEGAL_ENUM AL_INVALID_ENUM
@@ -118,7 +121,8 @@ SGSoundSample::SGSoundSample( const char *path, const char *file) :
   if (buffer == AL_NONE) {
      ALenum error = alutGetError ();
      print_openal_error("constructor (alutCreateBufferFromFile)");
-     throw sg_exception("Failed to load wav file: "+string(alutGetErrorString (error)));
+     throw sg_io_exception("Failed to load wav file: ",
+                        sg_location(string(alutGetErrorString (error))));
   }
 
 #else
@@ -141,8 +145,7 @@ SGSoundSample::SGSoundSample( const char *path, const char *file) :
 }
 
 // constructor
-SGSoundSample::SGSoundSample( unsigned char *_data, int len, int _freq,
-                              bool cleanup) :
+SGSoundSample::SGSoundSample( unsigned char *_data, int len, int _freq ) :
     buffer(0),
     source(0),
     pitch(1.0),
@@ -180,10 +183,6 @@ SGSoundSample::SGSoundSample( unsigned char *_data, int len, int _freq,
         throw sg_exception("Failed to buffer data.");
     }
 
-    if ( cleanup ) {
-        free(_data);
-    }
-
     print_openal_error("constructor return");
 }
 
@@ -339,6 +338,9 @@ SGSoundSample::set_orientation( ALfloat *dir, ALfloat inner_angle,
     inner = inner_angle;
     outer = outer_angle;
     outergain = outer_gain;
+    direction[0] = dir[0];
+    direction[1] = dir[1];
+    direction[2] = dir[2];
     if (playing) {
         alSourcefv( source, AL_DIRECTION, dir);
         alSourcef( source, AL_CONE_INNER_ANGLE, inner );
@@ -388,7 +390,8 @@ SGSoundSample::load_file(const char *path, const char *file)
     ALfloat freqf;
     data = alutLoadMemoryFromFile(samplepath.c_str(), &format, &size, &freqf );
     if (data == NULL) {
-        throw sg_exception("Failed to load wav file.");
+        throw sg_io_exception("Failed to load wav file.",
+                                       sg_location(samplepath.str()));
     }
     freq = (ALsizei)freqf;
 #else
@@ -400,7 +403,8 @@ SGSoundSample::load_file(const char *path, const char *file)
                      &format, &data, &size, &freq, &loop );
 # endif
     if ( print_openal_error("constructor (alutLoadWAVFile)") ) {
-        throw sg_exception("Failed to load wav file.");
+        throw sg_io_exception("Failed to load wav file.",
+                                       sg_location(samplepath.str()));
     }
 #endif