[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21800] branches/soundsystem: Added support for 3D audio and other GE stuff, like volume, pitch and ping pong looping.
Jörg Müller
nexyon at gmail.com
Wed Jul 22 16:14:26 CEST 2009
Revision: 21800
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21800
Author: nexyon
Date: 2009-07-22 16:14:26 +0200 (Wed, 22 Jul 2009)
Log Message:
-----------
Added support for 3D audio and other GE stuff, like volume, pitch and ping pong looping.
Modified Paths:
--------------
branches/soundsystem/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp
branches/soundsystem/intern/audaspace/intern/AUD_Space.h
branches/soundsystem/source/blender/blenkernel/intern/sound.c
branches/soundsystem/source/blender/blenloader/intern/readfile.c
branches/soundsystem/source/gameengine/Converter/KX_ConvertActuators.cpp
branches/soundsystem/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
branches/soundsystem/source/gameengine/Ketsji/KX_SoundActuator.cpp
branches/soundsystem/source/gameengine/Ketsji/KX_SoundActuator.h
Modified: branches/soundsystem/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
===================================================================
--- branches/soundsystem/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp 2009-07-22 14:14:26 UTC (rev 21800)
@@ -1097,7 +1097,7 @@
{
alListenerfv(AL_POSITION, (ALfloat*)data.position);
alListenerfv(AL_VELOCITY, (ALfloat*)data.velocity);
- alListenerfv(AL_ORIENTATION, (ALfloat*)data.orientation);
+ alListenerfv(AL_ORIENTATION, (ALfloat*)&(data.orientation[3]));
}
bool AUD_OpenALDevice::setSetting(AUD_3DSetting setting, float value)
@@ -1162,6 +1162,8 @@
return std::numeric_limits<float>::quiet_NaN();
}
+#include <stdio.h>
+
bool AUD_OpenALDevice::updateSource(AUD_Handle* handle, AUD_3DData &data)
{
lock();
@@ -1171,7 +1173,7 @@
int source = ((AUD_OpenALHandle*)handle)->source;
alSourcefv(source, AL_POSITION, (ALfloat*)data.position);
alSourcefv(source, AL_VELOCITY, (ALfloat*)data.velocity);
- alSourcefv(source, AL_ORIENTATION, (ALfloat*)data.orientation);
+ alSourcefv(source, AL_DIRECTION, (ALfloat*)&(data.orientation[3]));
unlock();
return true;
}
Modified: branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp 2009-07-22 14:14:26 UTC (rev 21800)
@@ -35,6 +35,7 @@
#include "AUD_PingPongFactory.h"
#include "AUD_LoopFactory.h"
#include "AUD_ReadDevice.h"
+#include "AUD_SourceCaps.h"
/*
#define WITH_SDL
@@ -106,7 +107,7 @@
}
if(AUD_device->checkCapability(AUD_CAPS_3D_DEVICE))
- AUD_3ddevice = (AUD_I3DDevice*) AUD_device;
+ AUD_3ddevice = dynamic_cast<AUD_I3DDevice*>(AUD_device);
return true;
}
@@ -229,20 +230,21 @@
int AUD_stopLoop(AUD_Handle* handle)
{
- assert(handle);
+ if(handle)
+ {
+ AUD_Message message;
+ message.type = AUD_MSG_LOOP;
+ message.loopcount = 0;
- AUD_Message message;
- message.type = AUD_MSG_LOOP;
- message.loopcount = 0;
-
- try
- {
- return AUD_device->sendMessage(handle, message);
+ try
+ {
+ return AUD_device->sendMessage(handle, message);
+ }
+ catch(AUD_Exception e)
+ {
+ }
}
- catch(AUD_Exception e)
- {
- return false;
- }
+ return false;
}
void AUD_unload(AUD_Sound* sound)
@@ -368,82 +370,98 @@
int AUD_update3DSource(AUD_Handle* handle, AUD_3DData* data)
{
- assert(AUD_device);
- assert(handle);
- assert(data);
+ if(handle)
+ {
+ assert(AUD_device);
+ assert(data);
- try
- {
- if(AUD_3ddevice)
- return AUD_3ddevice->updateSource(handle, *data);
+ try
+ {
+ if(AUD_3ddevice)
+ return AUD_3ddevice->updateSource(handle, *data);
+ }
+ catch(AUD_Exception e)
+ {
+ }
}
- catch(AUD_Exception e)
- {
- }
return false;
}
int AUD_set3DSourceSetting(AUD_Handle* handle,
AUD_3DSourceSetting setting, float value)
{
- assert(AUD_device);
- assert(handle);
+ if(handle)
+ {
+ assert(AUD_device);
- try
- {
- if(AUD_3ddevice)
- return AUD_3ddevice->setSourceSetting(handle, setting, value);
+ try
+ {
+ if(AUD_3ddevice)
+ return AUD_3ddevice->setSourceSetting(handle, setting, value);
+ }
+ catch(AUD_Exception e)
+ {
+ }
}
- catch(AUD_Exception e)
- {
- }
return false;
}
float AUD_get3DSourceSetting(AUD_Handle* handle, AUD_3DSourceSetting setting)
{
- assert(AUD_device);
- assert(handle);
+ if(handle)
+ {
+ assert(AUD_device);
- try
- {
- if(AUD_3ddevice)
- return AUD_3ddevice->getSourceSetting(handle, setting);
+ try
+ {
+ if(AUD_3ddevice)
+ return AUD_3ddevice->getSourceSetting(handle, setting);
+ }
+ catch(AUD_Exception e)
+ {
+ }
}
- catch(AUD_Exception e)
- {
- }
return 0.0;
}
int AUD_setSoundVolume(AUD_Handle* handle, float volume)
{
- assert(AUD_device);
- assert(handle);
+ if(handle)
+ {
+ assert(AUD_device);
+ AUD_SourceCaps caps;
+ caps.handle = handle;
+ caps.value = volume;
- try
- {
- return AUD_device->setCapability(AUD_CAPS_SOURCE_VOLUME, &volume);
+ try
+ {
+ return AUD_device->setCapability(AUD_CAPS_SOURCE_VOLUME, &caps);
+ }
+ catch(AUD_Exception e)
+ {
+ return false;
+ }
}
- catch(AUD_Exception e)
- {
- return false;
- }
}
int AUD_setSoundPitch(AUD_Handle* handle, float pitch)
{
- assert(AUD_device);
- assert(handle);
+ if(handle)
+ {
+ assert(AUD_device);
+ AUD_SourceCaps caps;
+ caps.handle = handle;
+ caps.value = pitch;
- try
- {
- return AUD_device->setCapability(AUD_CAPS_SOURCE_VOLUME, &pitch);
+ try
+ {
+ return AUD_device->setCapability(AUD_CAPS_SOURCE_PITCH, &caps);
+ }
+ catch(AUD_Exception e)
+ {
+ return false;
+ }
}
- catch(AUD_Exception e)
- {
- return false;
- }
}
AUD_Device* AUD_openReadDevice(AUD_Specs specs)
Modified: branches/soundsystem/intern/audaspace/intern/AUD_Space.h
===================================================================
--- branches/soundsystem/intern/audaspace/intern/AUD_Space.h 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/intern/audaspace/intern/AUD_Space.h 2009-07-22 14:14:26 UTC (rev 21800)
@@ -288,7 +288,7 @@
float velocity[3];
/// 3x3 matrix telling the orientation of the object.
- float orientation[3][3];
+ float orientation[9];
} AUD_3DData;
#endif //AUD_SPACE
Modified: branches/soundsystem/source/blender/blenkernel/intern/sound.c
===================================================================
--- branches/soundsystem/source/blender/blenkernel/intern/sound.c 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/source/blender/blenkernel/intern/sound.c 2009-07-22 14:14:26 UTC (rev 21800)
@@ -169,6 +169,24 @@
void sound_load(struct bSound* sound)
{
+ if(sound)
+ {
+ char fullpath[FILE_MAX];
+
+ /* load sound */
+ PackedFile* pf = sound->packedfile;
+
+ /* dont modify soundact->sound->name, only change a copy */
+ BLI_strncpy(fullpath, sound->name, sizeof(fullpath));
+ BLI_convertstringcode(fullpath, G.sce);
+
+ /* but we need a packed file then */
+ if (pf)
+ sound->stream = AUD_loadBuffer((unsigned char*) pf->data, pf->size);
+ /* or else load it from disk */
+ else
+ sound->stream = AUD_load(fullpath);
+ }
}
void sound_free(struct bSound* sound)
@@ -178,4 +196,10 @@
freePackedFile(sound->packedfile);
sound->packedfile = NULL;
}
+
+ if(sound->stream)
+ {
+ AUD_unload(sound->stream);
+ sound->stream = NULL;
+ }
}
Modified: branches/soundsystem/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soundsystem/source/blender/blenloader/intern/readfile.c 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/source/blender/blenloader/intern/readfile.c 2009-07-22 14:14:26 UTC (rev 21800)
@@ -147,6 +147,9 @@
#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND
#include "BKE_idprop.h"
+// AUD_XXX
+#include "BKE_sound.h"
+
//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes
//XXX #include "BIF_filelist.h" // badlevel too, where to move this? - elubie
//XXX #include "BIF_previewrender.h" // bedlelvel, for struct RenderInfo
@@ -4971,7 +4974,7 @@
if(sound->id.flag & LIB_NEEDLINK) {
sound->id.flag -= LIB_NEEDLINK;
sound->ipo= newlibadr_us(fd, sound->id.lib, sound->ipo); // XXX depreceated - old animation system
- sound->stream = 0;
+// AUD_XXX sound->stream = 0;
}
sound= sound->id.next;
}
@@ -9229,6 +9232,7 @@
sound->packedfile = sound->newpackedfile;
sound->newpackedfile = NULL;
}
+ sound_load(sound);
}
for(ob = main->object.first; ob; ob = ob->id.next) {
Modified: branches/soundsystem/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- branches/soundsystem/source/gameengine/Converter/KX_ConvertActuators.cpp 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/source/gameengine/Converter/KX_ConvertActuators.cpp 2009-07-22 14:14:26 UTC (rev 21800)
@@ -480,27 +480,8 @@
}
}
#else
- AUD_Sound* sound = NULL;
- if (soundact->sound) {
- /* Need to convert the samplename into absolute path
- * before checking if its loaded */
- char fullpath[FILE_MAX];
+ bSound* sound = soundact->sound;
- /* dont modify soundact->sound->name, only change a copy */
- BLI_strncpy(fullpath, soundact->sound->name, sizeof(fullpath));
- BLI_convertstringcode(fullpath, maggiename);
- samplename = fullpath;
-
- /* load sound */
- PackedFile* pf = soundact->sound->packedfile;
-
- /* but we need a packed file then */
- if (pf)
- sound = AUD_loadBuffer((unsigned char*) pf->data, pf->size);
- /* or else load it from disk */
- else
- sound = AUD_load(samplename);
- }
if(!sound)
{
std::cout << "WARNING: Sound actuator \"" << bact->name <<
Modified: branches/soundsystem/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- branches/soundsystem/source/gameengine/Ketsji/KX_KetsjiEngine.cpp 2009-07-22 13:35:02 UTC (rev 21799)
+++ branches/soundsystem/source/gameengine/Ketsji/KX_KetsjiEngine.cpp 2009-07-22 14:14:26 UTC (rev 21800)
@@ -62,6 +62,7 @@
#include "PHY_IPhysicsEnvironment.h"
// AUD_XXX
+#include "AUD_C-API.h"
//#include "SND_Scene.h"
//#include "SND_IAudioDevice.h"
@@ -985,6 +986,41 @@
listenerorientation);
soundscene->Proceed();
+#else
+ {
+ AUD_3DData data;
+ float f;
+
+ listenerorientation.getValue3x3(data.orientation);
+ listenerposition.getValue(data.position);
+ listenervelocity.getValue(data.velocity);
+
+ f = data.position[1];
+ data.position[1] = data.position[2];
+ data.position[2] = -f;
+
+ f = data.velocity[1];
+ data.velocity[1] = data.velocity[2];
+ data.velocity[2] = -f;
+
+ f = data.orientation[1];
+ data.orientation[1] = data.orientation[2];
+ data.orientation[2] = -f;
+
+ f = data.orientation[3];
+ data.orientation[3] = -data.orientation[6];
+ data.orientation[6] = f;
+
+ f = data.orientation[4];
+ data.orientation[4] = -data.orientation[8];
+ data.orientation[8] = -f;
+
+ f = data.orientation[5];
+ data.orientation[5] = data.orientation[7];
+ data.orientation[7] = f;
+
+ AUD_updateListener(&data);
+ }
#endif
}
Modified: branches/soundsystem/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list