6a74a324232ddcac7c6113ef7bdd2354c1d0054d
[blender.git] / source / blender / makesrna / intern / rna_sound.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Campbell Barton, Roland Hess
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_sound_types.h"
33 #include "DNA_property_types.h"
34
35 #ifdef RNA_RUNTIME
36
37 #else
38
39 #if 0
40 static void rna_def_sample(BlenderRNA *brna)
41 {
42         StructRNA *srna;
43         PropertyRNA *prop;
44
45         /* sound types */
46         static EnumPropertyItem prop_sample_type_items[] = {
47                 {SAMPLE_INVALID, "INVALID", "Invalid", ""},
48                 {SAMPLE_UNKNOWN, "UNKNOWN", "Unknown", ""},
49                 {SAMPLE_RAW, "RAW", "Raw", ""},
50                 {SAMPLE_WAV, "WAV", "WAV", "Uncompressed"},
51                 {SAMPLE_MP2, "MP2", "MP2", "MPEG-1 Audio Layer 2"},
52                 {SAMPLE_MP3, "MP3", "MP3", "MPEG-1 Audio Layer 3"},
53                 {SAMPLE_OGG_VORBIS, "OGG_VORBIS", "Ogg Vorbis", ""},
54                 {SAMPLE_WMA, "WMA", "WMA", "Windows Media Audio"},
55                 {SAMPLE_ASF, "ASF", "ASF", "Windows Advanced Systems Format"},
56                 {SAMPLE_AIFF, "AIFF", "AIFF", "Audio Interchange File Format"},
57                 {0, NULL, NULL, NULL}};
58         
59         srna= RNA_def_struct(brna, "SoundSample", "ID");
60         RNA_def_struct_sdna(srna, "bSample");
61         RNA_def_struct_ui_text(srna, "SoundSample", "Sound Sample");
62
63         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
64         RNA_def_property_enum_items(prop, prop_sample_type_items);
65         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); 
66         RNA_def_property_ui_text(prop, "Types", "");
67
68         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
69         RNA_def_property_string_sdna(prop, NULL, "name");
70         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); 
71         RNA_def_property_ui_text(prop, "Filename", "Full path filename of the sample");
72
73         prop= RNA_def_property(srna, "length", PROP_INT, PROP_UNSIGNED);
74         RNA_def_property_int_sdna(prop, NULL, "len");
75         RNA_def_property_ui_text(prop, "Length", "The length of sample in seconds");
76         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
77
78         prop= RNA_def_property(srna, "rate", PROP_INT, PROP_UNSIGNED);
79         RNA_def_property_ui_text(prop, "Rate", "Sample rate in kHz");
80         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
81
82         prop= RNA_def_property(srna, "bits", PROP_INT, PROP_UNSIGNED);
83         RNA_def_property_ui_text(prop, "Bits", "Bit-depth of sample");
84         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
85
86         prop= RNA_def_property(srna, "channels", PROP_INT, PROP_UNSIGNED);
87         RNA_def_property_ui_text(prop, "Channels", "Number of channels (mono=1; stereo=2)");
88         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); 
89 }
90 #endif
91
92 static void rna_def_soundlistener(BlenderRNA *brna)
93 {
94
95         StructRNA *srna;
96         PropertyRNA *prop;
97
98         srna= RNA_def_struct(brna, "SoundListener", "ID");
99         RNA_def_struct_sdna(srna, "bSoundListener");
100         RNA_def_struct_ui_text(srna, "Sound Listener", "DOC_BROKEN");
101
102         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
103         RNA_def_property_ui_text(prop, "Gain", "Overall volume for Game Engine sound.");
104         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4);
105
106         prop= RNA_def_property(srna, "doppler_factor", PROP_FLOAT, PROP_NONE);
107         RNA_def_property_float_sdna(prop, NULL, "dopplerfactor");
108         RNA_def_property_ui_text(prop, "Doppler Factor", "Amount of Doppler effect in Game Engine sound.");
109         RNA_def_property_ui_range(prop, 0.0, 10.0, 1, 4);
110
111         prop= RNA_def_property(srna, "doppler_velocity", PROP_FLOAT, PROP_NONE);
112         RNA_def_property_float_sdna(prop, NULL, "dopplervelocity");
113         RNA_def_property_ui_text(prop, "Doppler Velocity", "The speed of sound in the Game Engine.");
114         RNA_def_property_ui_range(prop, 0.0, 10000.0, 0.1, 4);
115
116         prop= RNA_def_property(srna, "num_sounds_blender", PROP_INT, PROP_UNSIGNED);
117         RNA_def_property_int_sdna(prop, NULL, "numsoundsblender");
118         RNA_def_property_ui_text(prop, "Total Sounds in Blender", "The total number of sounds currently linked and available.");
119         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
120
121         prop= RNA_def_property(srna, "num_sounds_gameengine", PROP_INT, PROP_UNSIGNED);
122         RNA_def_property_int_sdna(prop, NULL, "numsoundsgameengine");
123         RNA_def_property_ui_text(prop, "Total Sounds in Game Engine", "The total number of sounds in the Game Engine.");
124         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
125 }
126
127 static void rna_def_sound(BlenderRNA *brna)
128 {
129
130         StructRNA *srna;
131         PropertyRNA *prop;
132
133         srna= RNA_def_struct(brna, "Sound", "ID");
134         RNA_def_struct_sdna(srna, "bSound");
135         RNA_def_struct_ui_text(srna, "Sound", "DOC_BROKEN");
136
137         prop= RNA_def_property(srna, "sample", PROP_POINTER, PROP_NONE);
138         RNA_def_property_struct_type(prop, "ID");
139         RNA_def_property_ui_text(prop, "Sample", "Sound Sample.");
140
141         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
142         RNA_def_property_string_sdna(prop, NULL, "name");
143         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); /* ? */
144         RNA_def_property_ui_text(prop, "Filename", "DOC_BROKEN");
145
146         /* floats */
147         prop= RNA_def_property(srna, "volume", PROP_FLOAT, PROP_NONE);
148         RNA_def_property_float_sdna(prop, NULL, "volume");
149         RNA_def_property_ui_text(prop, "Volume", "The volume for this sound in the game engine only");
150         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4);
151
152         prop= RNA_def_property(srna, "panning", PROP_FLOAT, PROP_NONE);
153         RNA_def_property_float_sdna(prop, NULL, "panning");
154         RNA_def_property_ui_text(prop, "Panning", "Pan the sound from left to right");
155         RNA_def_property_ui_range(prop, -1.0, 1.0, 10, 4); /* TODO - this isnt used anywhere :/ */
156
157         prop= RNA_def_property(srna, "attenuation", PROP_FLOAT, PROP_NONE);
158         RNA_def_property_float_sdna(prop, NULL, "attenuation");
159         RNA_def_property_ui_text(prop, "Attenuation", "DOC_BROKEN");
160         RNA_def_property_ui_range(prop, 0.0, 100.0, 10, 4); /* TODO check limits */
161
162         prop= RNA_def_property(srna, "pitch", PROP_FLOAT, PROP_NONE);
163         RNA_def_property_float_sdna(prop, NULL, "pitch");
164         RNA_def_property_ui_text(prop, "Pitch", "Set the pitch of this sound for the game engine only");
165         RNA_def_property_ui_range(prop, -12.0, 12.0, 10, 4);
166
167         prop= RNA_def_property(srna, "min_gain", PROP_FLOAT, PROP_NONE);
168         RNA_def_property_float_sdna(prop, NULL, "min_gain");
169         RNA_def_property_ui_text(prop, "Min Gain", "DOC_BROKEN");
170         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4); /* NOT used anywhere */
171
172         prop= RNA_def_property(srna, "max_gain", PROP_FLOAT, PROP_NONE);
173         RNA_def_property_float_sdna(prop, NULL, "max_gain");
174         RNA_def_property_ui_text(prop, "Max Gain", "DOC_BROKEN");
175         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4); /* NOT used anywhere */
176
177         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
178         RNA_def_property_float_sdna(prop, NULL, "distance");
179         RNA_def_property_ui_text(prop, "Distance", "Reference distance at which the listener will experience gain");
180         RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, 4); /* NOT used anywhere */
181
182         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
183         RNA_def_property_struct_type(prop, "Ipo");
184         RNA_def_property_ui_text(prop, "Ipo", "DOC_BROKEN");
185
186
187         /* flags */
188         prop= RNA_def_property(srna, "loop", PROP_BOOLEAN, PROP_NONE);
189         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_LOOP); /* use bitflags */
190         RNA_def_property_ui_text(prop, "Sound Loop", "DOC_BROKEN");
191
192         prop= RNA_def_property(srna, "fixed_volume", PROP_BOOLEAN, PROP_NONE);
193         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_FIXED_VOLUME); /* use bitflags */
194         RNA_def_property_ui_text(prop, "Fixed Volume", "DOC_BROKEN");
195
196         prop= RNA_def_property(srna, "fixed_panning", PROP_BOOLEAN, PROP_NONE);
197         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_FIXED_PANNING); /* use bitflags */
198         RNA_def_property_ui_text(prop, "Fixed Panning", "DOC_BROKEN");
199
200         prop= RNA_def_property(srna, "spacial", PROP_BOOLEAN, PROP_NONE);
201         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_3D); /* use bitflags */
202         RNA_def_property_ui_text(prop, "3D", "DOC_BROKEN");
203
204         prop= RNA_def_property(srna, "bidirectional_loop", PROP_BOOLEAN, PROP_NONE);
205         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_BIDIRECTIONAL_LOOP); /* use bitflags */
206         RNA_def_property_ui_text(prop, "Bidirectional Loop", "DOC_BROKEN");
207
208         prop= RNA_def_property(srna, "priority", PROP_BOOLEAN, PROP_NONE);
209         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_PRIORITY); /* use bitflags */
210         RNA_def_property_ui_text(prop, "Priority", "DOC_BROKEN");
211
212         prop= RNA_def_property(srna, "sequence", PROP_BOOLEAN, PROP_NONE);
213         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_SEQUENCE); /* use bitflags */
214         RNA_def_property_ui_text(prop, "Priority", "DOC_BROKEN");
215         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
216 }
217
218 void RNA_def_sound(BlenderRNA *brna)
219 {
220         //rna_def_sample(brna);
221         rna_def_soundlistener(brna);
222         rna_def_sound(brna);
223 }
224
225 #endif
226
227