Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Mueller <nexyon@gmail.com>2011-08-11 15:41:24 +0400
committerJoerg Mueller <nexyon@gmail.com>2011-08-11 15:41:24 +0400
commitfee7337249342c3d5a332358883af9afe961f38d (patch)
treed7374f582cec6ca6d204c923d325c4db53d699cd /source/blender
parent2c2fa877be6a1e7f6f1abbb131d3706948368248 (diff)
3D Audio GSoC:
Adding a mono flag to mixdown non-mono sounds for 3D audio. * Added mono sound loading. * Bugfix: AUD_COMPARE_SPECS usage was wrong. * Bugfix: JOS resampler = instead of ==. * Bugfix: Change of a sound should apply settings in AUD_SequencerHandle. * Bugfix: Memory leak when canceling open sound operator.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/sound.c7
-rw-r--r--source/blender/editors/sound/sound_ops.c39
-rw-r--r--source/blender/makesdna/DNA_sound_types.h1
-rw-r--r--source/blender/makesrna/intern/rna_sound.c9
4 files changed, 53 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 1b09db84125..9c62b92a924 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -349,6 +349,13 @@ void sound_load(struct Main *bmain, struct bSound* sound)
break;
}
#endif
+ if(sound->flags & SOUND_FLAGS_MONO)
+ {
+ void* handle = AUD_monoSound(sound->handle);
+ AUD_unload(sound->handle);
+ sound->handle = handle;
+ }
+
if(sound->flags & SOUND_FLAGS_CACHING)
{
sound->cache = AUD_bufferSound(sound->handle);
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index 31d22f9dd54..fb4355d0df7 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -79,6 +79,13 @@
/******************** open sound operator ********************/
+static int open_cancel(bContext *UNUSED(C), wmOperator *op)
+{
+ MEM_freeN(op->customdata);
+ op->customdata= NULL;
+ return OPERATOR_CANCELLED;
+}
+
static void open_init(bContext *C, wmOperator *op)
{
PropertyPointerRNA *pprop;
@@ -95,9 +102,10 @@ static int open_exec(bContext *C, wmOperator *op)
PropertyPointerRNA *pprop;
PointerRNA idptr;
AUD_SoundInfo info;
+ Main *bmain = CTX_data_main(C);
RNA_string_get(op->ptr, "filepath", path);
- sound = sound_new_file(CTX_data_main(C), path);
+ sound = sound_new_file(bmain, path);
if(!op->customdata)
open_init(C, op);
@@ -117,6 +125,11 @@ static int open_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ if(RNA_boolean_get(op->ptr, "mono")) {
+ sound->flags |= SOUND_FLAGS_MONO;
+ sound_load(bmain, sound);
+ }
+
if (RNA_boolean_get(op->ptr, "cache")) {
sound_cache(sound);
}
@@ -172,6 +185,28 @@ void SOUND_OT_open(wmOperatorType *ot)
/* api callbacks */
ot->exec= open_exec;
ot->invoke= open_invoke;
+ ot->cancel= open_cancel;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_FILEPATH | WM_FILESEL_RELPATH);
+ RNA_def_boolean(ot->srna, "cache", FALSE, "Cache", "Cache the sound in memory.");
+ RNA_def_boolean(ot->srna, "mono", FALSE, "Mono", "Mixdown the sound to mono.");
+}
+
+void SOUND_OT_open_mono(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Open Sound Mono";
+ ot->description= "Load a sound file as mono";
+ ot->idname= "SOUND_OT_open_mono";
+
+ /* api callbacks */
+ ot->exec= open_exec;
+ ot->invoke= open_invoke;
+ ot->cancel= open_cancel;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -179,6 +214,7 @@ void SOUND_OT_open(wmOperatorType *ot)
/* properties */
WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_FILEPATH | WM_FILESEL_RELPATH);
RNA_def_boolean(ot->srna, "cache", FALSE, "Cache", "Cache the sound in memory.");
+ RNA_def_boolean(ot->srna, "mono", TRUE, "Mono", "Mixdown the sound to mono.");
}
/******************** mixdown operator ********************/
@@ -667,6 +703,7 @@ void SOUND_OT_bake_animation(wmOperatorType *ot)
void ED_operatortypes_sound(void)
{
WM_operatortype_append(SOUND_OT_open);
+ WM_operatortype_append(SOUND_OT_open_mono);
WM_operatortype_append(SOUND_OT_mixdown);
WM_operatortype_append(SOUND_OT_pack);
WM_operatortype_append(SOUND_OT_unpack);
diff --git a/source/blender/makesdna/DNA_sound_types.h b/source/blender/makesdna/DNA_sound_types.h
index d7546e84bbf..4f727b3586b 100644
--- a/source/blender/makesdna/DNA_sound_types.h
+++ b/source/blender/makesdna/DNA_sound_types.h
@@ -113,6 +113,7 @@ typedef enum eSound_Type {
#define SOUND_FLAGS_3D (1 << 3) /* deprecated! used for sound actuator loading */
#define SOUND_FLAGS_CACHING (1 << 4)
+#define SOUND_FLAGS_MONO (1 << 5)
/* to DNA_sound_types.h*/
diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c
index e78bc092040..b224b55c20c 100644
--- a/source/blender/makesrna/intern/rna_sound.c
+++ b/source/blender/makesrna/intern/rna_sound.c
@@ -41,7 +41,7 @@
#include "BKE_sound.h"
#include "BKE_context.h"
-static void rna_Sound_filepath_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_Sound_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
sound_load(bmain, (bSound*)ptr->data);
}
@@ -83,7 +83,7 @@ static void rna_def_sound(BlenderRNA *brna)
prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "File Path", "Sound sample file used by this Sound datablock");
- RNA_def_property_update(prop, 0, "rna_Sound_filepath_update");
+ RNA_def_property_update(prop, 0, "rna_Sound_update");
prop= RNA_def_property(srna, "packed_file", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
@@ -93,6 +93,11 @@ static void rna_def_sound(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, "rna_Sound_caching_get", "rna_Sound_caching_set");
RNA_def_property_ui_text(prop, "Caching", "The sound file is decoded and loaded into RAM");
RNA_def_property_update(prop, 0, "rna_Sound_caching_update");
+
+ prop= RNA_def_property(srna, "mono", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_MONO);
+ RNA_def_property_ui_text(prop, "Mono", "If the file contains multiple audio channels they are mixdown to a signle one.");
+ RNA_def_property_update(prop, 0, "rna_Sound_update");
}
void RNA_def_sound(BlenderRNA *brna)