Merge with 2.5 -r 21619:21756.
[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 /* sample and listener are internal .. */
40
41 #if 0
42 static void rna_def_sample(BlenderRNA *brna)
43 {
44         StructRNA *srna;
45         PropertyRNA *prop;
46
47         /* sound types */
48         static EnumPropertyItem prop_sample_type_items[] = {
49                 {SAMPLE_INVALID, "INVALID", 0, "Invalid", ""},
50                 {SAMPLE_UNKNOWN, "UNKNOWN", 0, "Unknown", ""},
51                 {SAMPLE_RAW, "RAW", 0, "Raw", ""},
52                 {SAMPLE_WAV, "WAV", 0, "WAV", "Uncompressed"},
53                 {SAMPLE_MP2, "MP2", 0, "MP2", "MPEG-1 Audio Layer 2"},
54                 {SAMPLE_MP3, "MP3", 0, "MP3", "MPEG-1 Audio Layer 3"},
55                 {SAMPLE_OGG_VORBIS, "OGG_VORBIS", 0, "Ogg Vorbis", ""},
56                 {SAMPLE_WMA, "WMA", 0, "WMA", "Windows Media Audio"},
57                 {SAMPLE_ASF, "ASF", 0, "ASF", "Windows Advanced Systems Format"},
58                 {SAMPLE_AIFF, "AIFF", 0, "AIFF", "Audio Interchange File Format"},
59                 {0, NULL, 0, NULL, NULL}};
60         
61         srna= RNA_def_struct(brna, "SoundSample", "ID");
62         RNA_def_struct_sdna(srna, "bSample");
63         RNA_def_struct_ui_text(srna, "SoundSample", "Sound data loaded from a sound datablock.");
64
65         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
66         RNA_def_property_enum_items(prop, prop_sample_type_items);
67         RNA_def_property_clear_flag(prop, PROP_EDITABLE); 
68         RNA_def_property_ui_text(prop, "Types", "");
69
70         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
71         RNA_def_property_string_sdna(prop, NULL, "name");
72         RNA_def_property_clear_flag(prop, PROP_EDITABLE); 
73         RNA_def_property_ui_text(prop, "Filename", "Full path filename of the sample");
74
75         prop= RNA_def_property(srna, "length", PROP_INT, PROP_UNSIGNED);
76         RNA_def_property_int_sdna(prop, NULL, "len");
77         RNA_def_property_ui_text(prop, "Length", "The length of sample in seconds");
78         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
79
80         prop= RNA_def_property(srna, "rate", PROP_INT, PROP_UNSIGNED);
81         RNA_def_property_ui_text(prop, "Rate", "Sample rate in kHz");
82         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
83
84         prop= RNA_def_property(srna, "bits", PROP_INT, PROP_UNSIGNED);
85         RNA_def_property_ui_text(prop, "Bits", "Bit-depth of sample");
86         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
87
88         prop= RNA_def_property(srna, "channels", PROP_INT, PROP_UNSIGNED);
89         RNA_def_property_ui_text(prop, "Channels", "Number of channels (mono=1; stereo=2)");
90         RNA_def_property_clear_flag(prop, PROP_EDITABLE); 
91 }
92
93 static void rna_def_soundlistener(BlenderRNA *brna)
94 {
95
96         StructRNA *srna;
97         PropertyRNA *prop;
98
99         srna= RNA_def_struct(brna, "SoundListener", "ID");
100         RNA_def_struct_sdna(srna, "bSoundListener");
101         RNA_def_struct_ui_text(srna, "Sound Listener", "Sound listener defining parameters about how sounds are played.");
102
103         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
104         RNA_def_property_ui_text(prop, "Gain", "Overall volume for Game Engine sound.");
105         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4);
106
107         prop= RNA_def_property(srna, "doppler_factor", PROP_FLOAT, PROP_NONE);
108         RNA_def_property_float_sdna(prop, NULL, "dopplerfactor");
109         RNA_def_property_ui_text(prop, "Doppler Factor", "Amount of Doppler effect in Game Engine sound.");
110         RNA_def_property_ui_range(prop, 0.0, 10.0, 1, 4);
111
112         prop= RNA_def_property(srna, "doppler_velocity", PROP_FLOAT, PROP_NONE);
113         RNA_def_property_float_sdna(prop, NULL, "dopplervelocity");
114         RNA_def_property_ui_text(prop, "Doppler Velocity", "The speed of sound in the Game Engine.");
115         RNA_def_property_ui_range(prop, 0.0, 10000.0, 0.1, 4);
116
117         prop= RNA_def_property(srna, "num_sounds_blender", PROP_INT, PROP_UNSIGNED);
118         RNA_def_property_int_sdna(prop, NULL, "numsoundsblender");
119         RNA_def_property_ui_text(prop, "Total Sounds in Blender", "The total number of sounds currently linked and available.");
120         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
121
122         prop= RNA_def_property(srna, "num_sounds_gameengine", PROP_INT, PROP_UNSIGNED);
123         RNA_def_property_int_sdna(prop, NULL, "numsoundsgameengine");
124         RNA_def_property_ui_text(prop, "Total Sounds in Game Engine", "The total number of sounds in the Game Engine.");
125         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
126 }
127 #endif
128
129 static void rna_def_sound(BlenderRNA *brna)
130 {
131         StructRNA *srna;
132         PropertyRNA *prop;
133
134         srna= RNA_def_struct(brna, "Sound", "ID");
135         RNA_def_struct_sdna(srna, "bSound");
136         RNA_def_struct_ui_text(srna, "Sound", "Sound datablock referencing an external or packed sound file.");
137         RNA_def_struct_ui_icon(srna, ICON_SOUND);
138
139         //rna_def_ipo_common(srna);
140
141         /*prop= RNA_def_property(srna, "sample", PROP_POINTER, PROP_NONE);
142         RNA_def_property_struct_type(prop, "SoundSample");
143         RNA_def_property_ui_text(prop, "Sample", "Sound sample.");*/
144
145         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
146         RNA_def_property_string_sdna(prop, NULL, "name");
147         RNA_def_property_ui_text(prop, "Filename", "Sound sample file used by this Sound datablock.");
148
149         prop= RNA_def_property(srna, "packed_file", PROP_POINTER, PROP_NONE);
150         RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
151         RNA_def_property_ui_text(prop, "Packed File", "");
152
153         /* game engine settings */
154         prop= RNA_def_property(srna, "volume", PROP_FLOAT, PROP_UNSIGNED);
155         RNA_def_property_float_sdna(prop, NULL, "volume");
156         RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 4);
157         RNA_def_property_ui_text(prop, "Volume", "Game engine only: volume for this sound.");
158
159         prop= RNA_def_property(srna, "pitch", PROP_FLOAT, PROP_NONE);
160         RNA_def_property_float_sdna(prop, NULL, "pitch");
161         RNA_def_property_ui_range(prop, -12.0, 12.0, 10, 4);
162         RNA_def_property_ui_text(prop, "Pitch", "Game engine only: set the pitch of this sound.");
163
164         prop= RNA_def_property(srna, "loop", PROP_BOOLEAN, PROP_NONE);
165         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_LOOP);
166         RNA_def_property_ui_text(prop, "Sound Loop", "Game engine only: toggle between looping on/off.");
167
168         prop= RNA_def_property(srna, "ping_pong", PROP_BOOLEAN, PROP_NONE);
169         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_BIDIRECTIONAL_LOOP);
170         RNA_def_property_ui_text(prop, "Ping Pong", "Game engine only: Toggle between A->B and A->B->A looping.");
171
172         prop= RNA_def_property(srna, "sound_3d", PROP_BOOLEAN, PROP_NONE);
173         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_3D);
174         RNA_def_property_ui_text(prop, "3D Sound", "Game engine only: turns 3D sound on.");
175
176         prop= RNA_def_property(srna, "attenuation", PROP_FLOAT, PROP_NONE);
177         RNA_def_property_float_sdna(prop, NULL, "attenuation");
178         RNA_def_property_range(prop, 0.0, 5.0);
179         RNA_def_property_ui_text(prop, "Attenuation", "Game engine only: sets the surround scaling factor for 3D sound.");
180
181         /* gain */
182         prop= RNA_def_property(srna, "min_gain", PROP_FLOAT, PROP_NONE);
183         RNA_def_property_float_sdna(prop, NULL, "min_gain");
184         RNA_def_property_range(prop, 0.0, 1.0);
185         RNA_def_property_ui_text(prop, "Min Gain", "Minimal gain which is always guaranteed for this sound.");
186
187         prop= RNA_def_property(srna, "max_gain", PROP_FLOAT, PROP_NONE);
188         RNA_def_property_float_sdna(prop, NULL, "max_gain");
189         RNA_def_property_range(prop, 0.0, 1.0);
190         RNA_def_property_ui_text(prop, "Max Gain", "Maximal gain which is always guaranteed for this sound.");
191
192         prop= RNA_def_property(srna, "reference_distance", PROP_FLOAT, PROP_NONE);
193         RNA_def_property_float_sdna(prop, NULL, "distance");
194         RNA_def_property_ui_text(prop, "Reference Distance", "Reference distance at which the listener will experience gain.");
195         RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, 4); /* NOT used anywhere */
196
197         /* unused
198         prop= RNA_def_property(srna, "panning", PROP_FLOAT, PROP_NONE);
199         RNA_def_property_float_sdna(prop, NULL, "panning");
200         RNA_def_property_ui_range(prop, -1.0, 1.0, 10, 4);
201         RNA_def_property_ui_text(prop, "Panning", "Pan the sound from left to right"); */
202
203         /* unused
204         prop= RNA_def_property(srna, "fixed_volume", PROP_BOOLEAN, PROP_NONE);
205         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_FIXED_VOLUME);
206         RNA_def_property_ui_text(prop, "Fixed Volume", "Constraint sound to fixed volume."); */
207
208         /* unused
209         prop= RNA_def_property(srna, "fixed_panning", PROP_BOOLEAN, PROP_NONE);
210         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_FIXED_PANNING);
211         RNA_def_property_ui_text(prop, "Fixed Panning", "Constraint sound to fixed panning."); */
212
213         /* unused
214         prop= RNA_def_property(srna, "priority", PROP_BOOLEAN, PROP_NONE);
215         RNA_def_property_boolean_sdna(prop, NULL, "flags", SOUND_FLAGS_PRIORITY);
216         RNA_def_property_ui_text(prop, "Priority", "Make sound higher priority."); */
217 }
218
219 void RNA_def_sound(BlenderRNA *brna)
220 {
221         //rna_def_sample(brna);
222         //rna_def_soundlistener(brna);
223         rna_def_sound(brna);
224 }
225
226 #endif
227
228