[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21484] branches/soundsystem/intern/ audaspace: Implemented a basic C API.
Jörg Müller
nexyon at gmail.com
Fri Jul 10 13:50:51 CEST 2009
Revision: 21484
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21484
Author: nexyon
Date: 2009-07-10 13:50:51 +0200 (Fri, 10 Jul 2009)
Log Message:
-----------
Implemented a basic C API.
Modified Paths:
--------------
branches/soundsystem/intern/audaspace/AUD_C-API.h
branches/soundsystem/intern/audaspace/SDL/AUD_SDLDevice.h
branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp
branches/soundsystem/intern/audaspace/intern/AUD_SinusReader.h
Modified: branches/soundsystem/intern/audaspace/AUD_C-API.h
===================================================================
--- branches/soundsystem/intern/audaspace/AUD_C-API.h 2009-07-10 11:36:02 UTC (rev 21483)
+++ branches/soundsystem/intern/audaspace/AUD_C-API.h 2009-07-10 11:50:51 UTC (rev 21484)
@@ -32,19 +32,95 @@
#include "AUD_Space.h"
-typedef struct {} AUD_Sound;
-typedef struct {} AUD_Device;
+//#ifndef AUD_CAPI_IMPLEMENTATION
+typedef struct AUD_Sound;
+//#endif
-extern AUD_Device* AUD_init();
+/**
+ * Initializes an audio device.
+ * \return Whether the device has been initialized.
+ */
+extern bool AUD_init();
-extern void AUD_exit(AUD_Device* device);
+/**
+ * Unitinitializes an audio device.
+ */
+extern void AUD_exit();
-extern AUD_Sound* openSound(const char* filename);
+/**
+ * Loads a sound file.
+ * \param filename The filename of the sound file.
+ * \return A handle of the sound file.
+ */
+extern AUD_Sound* AUD_load(const char* filename);
-extern void closeSound(AUD_Sound* sound);
+/**
+ * Unloads a sound file.
+ * \param sound The handle of the sound file.
+ */
+extern void AUD_unload(AUD_Sound* sound);
-extern void playSound(AUD_Device* device, AUD_Sound* sound);
+/**
+ * Plays back a sound file.
+ * \param sound The handle of the sound file.
+ * \param endBehaviour The behaviour after the end of the sound file has been
+ * reached.
+ * \param seekTo From where the sound file should be played back in seconds.
+ * A negative value indicates the seconds that should be waited
+ * before playback starts.
+ * \return A handle to the played back sound.
+ */
+extern AUD_Handle* AUD_play(AUD_Sound* sound,
+ AUD_EndBehaviour endBehaviour = AUD_BEHAVIOUR_STOP,
+ double seekTo = 0);
+/**
+ * Pauses a played back sound.
+ * \param handle The handle to the sound.
+ * \return Whether the handle has been playing or not.
+ */
+extern bool AUD_pause(AUD_Handle* handle);
+
+/**
+ * Resumes a paused sound.
+ * \param handle The handle to the sound.
+ * \return Whether the handle has been paused or not.
+ */
+extern bool AUD_resume(AUD_Handle* handle);
+
+/**
+ * Stops a playing or paused sound.
+ * \param handle The handle to the sound.
+ * \return Whether the handle has been valid or not.
+ */
+extern bool AUD_stop(AUD_Handle* handle);
+
+/**
+ * Sets the end behaviour of a playing or paused sound.
+ * \param handle The handle to the sound.
+ * \param endBehaviour The behaviour after the end of the file has been reached.
+ * \return Whether the handle has been valid or not.
+ */
+extern bool AUD_setEndBehaviour(AUD_Handle* handle,
+ AUD_EndBehaviour endBehaviour);
+
+/**
+ * Seeks a playing or paused sound.
+ * \param handle The handle to the sound.
+ * \param seekTo From where the sound file should be played back in seconds.
+ * A negative value indicates the seconds that should be waited
+ * before playback starts.
+ * \return Whether the handle has been valid or not.
+ */
+extern bool AUD_seek(AUD_Handle* handle, int seekTo);
+
+/**
+ * Returns the status of a playing, paused or stopped sound.
+ * \param handle The handle to the sound.
+ * \return The status of the sound behind the handle.
+ */
+extern AUD_Status AUD_getStatus(AUD_Handle* handle);
+
#ifdef __cplusplus
}
#endif
Modified: branches/soundsystem/intern/audaspace/SDL/AUD_SDLDevice.h
===================================================================
--- branches/soundsystem/intern/audaspace/SDL/AUD_SDLDevice.h 2009-07-10 11:36:02 UTC (rev 21483)
+++ branches/soundsystem/intern/audaspace/SDL/AUD_SDLDevice.h 2009-07-10 11:50:51 UTC (rev 21484)
@@ -62,7 +62,7 @@
/**
* Closes the SDL audio device.
*/
- ~AUD_SDLDevice();
+ virtual ~AUD_SDLDevice();
/**
* Mixes the next bytes into the buffer.
Modified: branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp 2009-07-10 11:36:02 UTC (rev 21483)
+++ branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp 2009-07-10 11:50:51 UTC (rev 21484)
@@ -23,6 +23,7 @@
* ***** END LGPL LICENSE BLOCK *****
*/
+//#define AUD_CAPI_IMPLEMENTATION
//#include "AUD_C-API.h"
#include "AUD_FFMPEGFactory.h"
#include "AUD_SDLDevice.h"
@@ -32,36 +33,93 @@
}
#include <assert.h>
-typedef AUD_IDevice AUD_Device;
typedef AUD_IFactory AUD_Sound;
-AUD_Device* AUD_init()
+AUD_IDevice* AUD_device = NULL;
+
+bool AUD_init()
{
av_register_all();
- return new AUD_SDLDevice();
+ try
+ {
+ AUD_device = new AUD_SDLDevice();
+ return true;
+ }
+ catch(AUD_Exception e)
+ {
+ return false;
+ }
}
-void AUD_exit(AUD_Device* device)
+void AUD_exit()
{
- assert(device);
- delete device;
+ assert(AUD_device);
+ delete AUD_device;
}
-AUD_Sound* openSound(const char* filename)
+AUD_Sound* AUD_load(const char* filename)
{
assert(filename);
return new AUD_FFMPEGFactory(filename);
}
-void closeSound(AUD_Sound* sound)
+void AUD_unload(AUD_Sound* sound)
{
assert(sound);
delete sound;
}
-void playSound(AUD_Device* device, AUD_Sound* sound)
+AUD_Handle* AUD_play(AUD_Sound* sound,
+ AUD_EndBehaviour endBehaviour,
+ double seekTo)
{
- assert(device);
+ assert(AUD_device);
assert(sound);
- device->play(sound);
+ int position = (int)(seekTo * AUD_device->getSpecs().rate);
+ try
+ {
+ return AUD_device->play(sound, endBehaviour, position);
+ }
+ catch(AUD_Exception e)
+ {
+ return NULL;
+ }
}
+
+bool AUD_pause(AUD_Handle* handle)
+{
+ assert(AUD_device);
+ return AUD_device->pause(handle);
+}
+
+bool AUD_resume(AUD_Handle* handle)
+{
+ assert(AUD_device);
+ return AUD_device->resume(handle);
+}
+
+bool AUD_stop(AUD_Handle* handle)
+{
+ assert(AUD_device);
+ return AUD_device->stop(handle);
+}
+
+bool AUD_setEndBehaviour(AUD_Handle* handle,
+ AUD_EndBehaviour endBehaviour)
+{
+ assert(AUD_device);
+ return AUD_device->setEndBehaviour(handle, endBehaviour);
+}
+
+bool AUD_seek(AUD_Handle* handle, double seekTo)
+{
+ assert(AUD_device);
+ int position = (int)(seekTo * AUD_device->getSpecs().rate);
+ return AUD_device->seek(handle, position);
+}
+
+AUD_Status AUD_getStatus(AUD_Handle* handle)
+{
+ assert(AUD_device);
+ return AUD_device->getStatus(handle);
+}
Modified: branches/soundsystem/intern/audaspace/intern/AUD_SinusReader.h
===================================================================
--- branches/soundsystem/intern/audaspace/intern/AUD_SinusReader.h 2009-07-10 11:36:02 UTC (rev 21483)
+++ branches/soundsystem/intern/audaspace/intern/AUD_SinusReader.h 2009-07-10 11:50:51 UTC (rev 21484)
@@ -71,7 +71,7 @@
/**
* Destroys the reader.
*/
- ~AUD_SinusReader();
+ virtual ~AUD_SinusReader();
virtual bool isSeekable();
virtual void seek(int position);
More information about the Bf-blender-cvs
mailing list