doxygen: blender/blenkernel tagged.
[blender.git] / source / blender / blenkernel / intern / sound.c
index 264bae3108980df4e178c90150257ede9d8d1e2a..cfc98b4a67d2755c9f49555092836ee349efc295 100644 (file)
@@ -1,3 +1,6 @@
+/** \file blender/blenkernel/intern/sound.c
+ *  \ingroup bke
+ */
 /**
  * sound.c (mar-2001 nzc)
  *
@@ -16,6 +19,7 @@
 #include "DNA_sequence_types.h"
 #include "DNA_packedFile_types.h"
 #include "DNA_screen_types.h"
+#include "DNA_sound_types.h"
 
 #include "AUD_C-API.h"
 
@@ -54,7 +58,7 @@ static void sound_sync_callback(void* data, int mode, float time)
 }
 #endif
 
-int sound_define_from_str(char *str)
+int sound_define_from_str(const char *str)
 {
        if (BLI_strcaseeq(str, "NULL"))
                return AUD_NULL_DEVICE;
@@ -73,7 +77,7 @@ void sound_force_device(int device)
        force_device = device;
 }
 
-void sound_init_once()
+void sound_init_once(void)
 {
        AUD_initOnce();
 }
@@ -109,15 +113,17 @@ void sound_init(struct Main *bmain)
                
 #ifdef WITH_JACK
        AUD_setSyncCallback(sound_sync_callback, bmain);
+#else
+       (void)bmain; /* unused */
 #endif
 }
 
-void sound_exit()
+void sound_exit(void)
 {
        AUD_exit();
 }
 
-struct bSound* sound_new_file(struct Main *bmain, char* filename)
+struct bSound* sound_new_file(struct Main *bmain, const char *filename)
 {
        bSound* sound = NULL;
 
@@ -128,7 +134,7 @@ struct bSound* sound_new_file(struct Main *bmain, char* filename)
 
        strcpy(str, filename);
 
-       path = /*bmain ? bmain->name :*/ G.sce;
+       path = /*bmain ? bmain->name :*/ G.main->name;
 
        BLI_path_abs(str, path);
 
@@ -263,7 +269,7 @@ void sound_load(struct Main *bmain, struct bSound* sound)
                        if(sound->id.lib)
                                path = sound->id.lib->filepath;
                        else
-                               path = /*bmain ? bmain->name :*/ G.sce;
+                               path = bmain->name;
 
                        BLI_path_abs(fullpath, path);
 
@@ -273,7 +279,7 @@ void sound_load(struct Main *bmain, struct bSound* sound)
                        /* or else load it from disk */
                        else
                                sound->handle = AUD_load(fullpath);
-               } // XXX
+               }
 // XXX unused currently
 #if 0
                        break;
@@ -379,7 +385,7 @@ void sound_move_scene_sound(struct Scene *scene, void* handle, int startframe, i
        AUD_moveSequencer(scene->sound_scene, handle, startframe / FPS, endframe / FPS, frameskip / FPS);
 }
 
-void sound_start_play_scene(struct Scene *scene)
+static void sound_start_play_scene(struct Scene *scene)
 {
        scene->sound_scene_handle = AUD_play(scene->sound_scene, 1);
        AUD_setLoop(scene->sound_scene_handle, -1);
@@ -432,9 +438,11 @@ void sound_seek_scene(struct bContext *C)
 
        if(scene->audio.flag & AUDIO_SCRUB && !CTX_wm_screen(C)->animtimer)
        {
-               // AUD_XXX TODO: fix scrubbing, it currently doesn't stop playing
                if(scene->audio.flag & AUDIO_SYNC)
+               {
+                       AUD_seek(scene->sound_scene_handle, CFRA / FPS);
                        AUD_seekSequencer(scene->sound_scene_handle, CFRA / FPS);
+               }
                else
                        AUD_seek(scene->sound_scene_handle, CFRA / FPS);
                AUD_resume(scene->sound_scene_handle);
@@ -479,3 +487,12 @@ int sound_read_sound_buffer(struct bSound* sound, float* buffer, int length, flo
        return AUD_readSound(limiter, buffer, length);
        AUD_unload(limiter);
 }
+
+int sound_get_channels(struct bSound* sound)
+{
+       AUD_SoundInfo info;
+
+       info = AUD_getInfo(sound->playback_handle);
+
+       return info.specs.channels;
+}