5d35811e0bcd6687a5305c97e4c964dcc6ca72cb
[blender-staging.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_access.h"
28 #include "RNA_define.h"
29 #include "RNA_types.h"
30
31 #include "rna_internal.h"
32
33 #include "DNA_sound_types.h"
34 #include "DNA_property_types.h"
35
36 #ifdef RNA_RUNTIME
37
38 #else
39
40 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, "SAMPLE_INVALID", "Invalid", ""},
48                 {SAMPLE_UNKNOWN, "SAMPLE_UNKNOWN", "Unknown", ""},
49                 {SAMPLE_RAW, "SAMPLE_RAW", "Raw", ""},
50                 {SAMPLE_WAV, "SAMPLE_WAV", "WAV", "Uncompressed"},
51                 {SAMPLE_MP2, "SAMPLE_MP2", "MP2", "MPEG-1 Audio Layer 2"},
52                 {SAMPLE_MP3, "SAMPLE_MP3", "MP3", "MPEG-1 Audio Layer 3"},
53                 {SAMPLE_OGG_VORBIS, "SAMPLE_OGG_VORBIS", "Ogg Vorbis", ""},
54                 {SAMPLE_WMA, "SAMPLE_WMA", "WMA", "Windows Media Audio"},
55                 {SAMPLE_ASF, "SAMPLE_ASF", "ASF", "Windows Advanced Systems Format"},
56                 {SAMPLE_AIFF, "SAMPLE_AIFF", "AIFF", "Audio Interchange File Format"},
57                 {0, NULL, NULL, NULL}};
58         
59         srna= RNA_def_struct(brna, "Sample", "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_ui_text(prop, "Types", "");
66
67         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
68         RNA_def_property_string_sdna(prop, NULL, "name");
69         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); 
70         RNA_def_property_ui_text(prop, "Filename", "Full path filename of the sample");
71
72         prop= RNA_def_property(srna, "length", PROP_INT, PROP_UNSIGNED);
73         RNA_def_property_int_sdna(prop, NULL, "len");
74         RNA_def_property_ui_text(prop, "Length", "The length of sample in seconds");
75         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
76
77         prop= RNA_def_property(srna, "rate", PROP_INT, PROP_UNSIGNED);
78         RNA_def_property_ui_text(prop, "Rate", "Sample rate in kHz");
79         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
80
81         prop= RNA_def_property(srna, "bits", PROP_INT, PROP_UNSIGNED);
82         RNA_def_property_ui_text(prop, "Bits", "Bit-depth of sample");
83         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
84
85         prop= RNA_def_property(srna, "channels", PROP_INT, PROP_UNSIGNED);
86         RNA_def_property_ui_text(prop, "Channels", "Number of channels (mono=1; stereo=2)");
87         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); 
88
89 }
90
91 void RNA_def_soundlistener(BlenderRNA *brna)
92 {
93
94         StructRNA *srna;
95         PropertyRNA *prop;
96
97         srna= RNA_def_struct(brna, "SoundListener", "ID");
98         RNA_def_struct_sdna(srna, "bSoundListener");
99         RNA_def_struct_ui_text(srna, "Sound Listener", "DOC_BROKEN");
100
101         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
102         RNA_def_property_ui_text(prop, "Gain", "Overall volume for Game Engine sound.");
103         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4);
104
105         prop= RNA_def_property(srna, "doppler_factor", PROP_FLOAT, PROP_NONE);
106         RNA_def_property_float_sdna(prop, NULL, "dopplerfactor");
107         RNA_def_property_ui_text(prop, "Doppler Factor", "Amount of Doppler effect in Game Engine sound.");
108         RNA_def_property_ui_range(prop, 0.0, 10.0, 1, 4);
109
110         prop= RNA_def_property(srna, "doppler_velocity", PROP_FLOAT, PROP_NONE);
111         RNA_def_property_float_sdna(prop, NULL, "dopplervelocity");
112         RNA_def_property_ui_text(prop, "Doppler Velocity", "The speed of sound in the Game Engine.");
113         RNA_def_property_ui_range(prop, 0.0, 10000.0, 0.1, 4);
114
115         prop= RNA_def_property(srna, "num_sounds_blender", PROP_INT, PROP_UNSIGNED);
116         RNA_def_property_int_sdna(prop, NULL, "numsoundsblender");
117         RNA_def_property_ui_text(prop, "Total Sounds in Blender", "The total number of sounds currently linked and available.");
118         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
119
120         prop= RNA_def_property(srna, "num_sounds_gameengine", PROP_INT, PROP_UNSIGNED);
121         RNA_def_property_int_sdna(prop, NULL, "numsoundsgameengine");
122         RNA_def_property_ui_text(prop, "Total Sounds in Game Engine", "The total number of sounds in the Game Engine.");
123         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
124
125 }
126
127 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
219 #endif
220
221