Beast - Music Synthesizer and Composer  0.11.1+10.g2da35
bseapi.idl
Go to the documentation of this file.
1  // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html -*-mode:c++;-*-
7 namespace Bse {
8 
9 // == Type Constants ==
10 Const MAXINT63 = +9223372036854775807;
11 Const MAXINT32 = +4294967295;
12 Const MAXINT31 = +2147483647;
13 Const MININT31 = -2147483648;
14 Const MAXFLOAT64 = 1.7976931348623157e+308;
15 
16 // == Enums ==
17 enum Error {
18  NONE = Enum (0, "", _("OK")),
19  INTERNAL = Enum (1, "", _("Internal error (please report)")),
20  UNKNOWN = Enum (2, "", _("Unknown error")),
21  IO = Enum (3, "", _("Input/output error")),
22  PERMS = Enum (4, "", _("Insufficient permissions")),
23  // file errors
24  FILE_BUSY = Enum (5, "", _("Device or resource busy")),
25  FILE_EXISTS = Enum (6, "", _("File exists already")),
26  FILE_EOF = Enum (7, "", _("End of file")),
27  FILE_EMPTY = Enum (8, "", _("File empty")),
28  FILE_NOT_FOUND = Enum (9, "", _("No such file, device or directory")),
29  FILE_IS_DIR = Enum (10, "", _("Is a directory")),
30  FILE_OPEN_FAILED = Enum (11, "", _("Open failed")),
31  FILE_SEEK_FAILED = Enum (12, "", _("Seek failed")),
32  FILE_READ_FAILED = Enum (13, "", _("Read failed")),
33  FILE_WRITE_FAILED = Enum (14, "", _("Write failed")),
34  // out of resource conditions
35  MANY_FILES = Enum (15, "", _("Too many open files")),
36  NO_FILES = Enum (16, "", _("Too many open files in system")),
37  NO_SPACE = Enum (17, "", _("No space left on device")),
38  NO_MEMORY = Enum (18, "", _("Out of memory")),
39  // content errors
40  NO_HEADER = Enum (19, "", _("Failed to detect header")),
41  NO_SEEK_INFO = Enum (20, "", _("Failed to retrieve seek information")),
42  NO_DATA = Enum (21, "", _("No data available")),
43  DATA_CORRUPT = Enum (22, "", _("Data corrupt")),
44  WRONG_N_CHANNELS = Enum (23, "", _("Wrong number of channels")),
45  FORMAT_INVALID = Enum (24, "", _("Invalid format")),
46  FORMAT_UNKNOWN = Enum (25, "", _("Unknown format")),
47  DATA_UNMATCHED = Enum (26, "", _("Requested data values unmatched")),
48  // miscellaneous errors
49  TEMP = Enum (27, "", _("Temporary error")),
50  WAVE_NOT_FOUND = Enum (28, "", _("No such wave")),
51  CODEC_FAILURE = Enum (29, "", _("Codec failure")),
52  UNIMPLEMENTED = Enum (30, "", _("Functionality not implemented")),
53  INVALID_PROPERTY = Enum (31, "", _("Invalid object property")),
54  INVALID_MIDI_CONTROL = Enum (32, "", _("Invalid MIDI control type")),
55  PARSE_ERROR = Enum (33, "", _("Parsing error")),
56  SPAWN = Enum (34, "", _("Failed to spawn child process")),
57  // Device errors
58  DEVICE_NOT_AVAILABLE = Enum (35, "", _("No device (driver) available")),
59  DEVICE_ASYNC = Enum (36, "", _("Device not async capable")),
60  DEVICE_BUSY = Enum (37, "", _("Device busy")),
61  DEVICE_FORMAT = Enum (38, "", _("Failed to configure device format")),
62  DEVICE_BUFFER = Enum (39, "", _("Failed to configure device buffer")),
63  DEVICE_LATENCY = Enum (40, "", _("Failed to configure device latency")),
64  DEVICE_CHANNELS = Enum (41, "", _("Failed to configure number of device channels")),
65  DEVICE_FREQUENCY = Enum (42, "", _("Failed to configure device frequency")),
66  DEVICES_MISMATCH = Enum (43, "", _("Device configurations mismatch")),
67  // BseSource errors
68  SOURCE_NO_SUCH_MODULE = Enum (44, "", _("No such synthesis module")),
69  SOURCE_NO_SUCH_ICHANNEL = Enum (45, "", _("No such input channel")),
70  SOURCE_NO_SUCH_OCHANNEL = Enum (46, "", _("No such output channel")),
71  SOURCE_NO_SUCH_CONNECTION = Enum (47, "", _("Input/Output channels not connected")),
72  SOURCE_PRIVATE_ICHANNEL = Enum (48, "", _("Input channel is private")),
73  SOURCE_ICHANNEL_IN_USE = Enum (49, "", _("Input channel already in use")),
74  SOURCE_CHANNELS_CONNECTED = Enum (50, "", _("Input/output channels already connected")),
75  SOURCE_CONNECTION_INVALID = Enum (51, "", _("Invalid synthesis module connection")),
76  SOURCE_PARENT_MISMATCH = Enum (52, "", _("Parent mismatch")),
77  SOURCE_BAD_LOOPBACK = Enum (53, "", _("Bad loopback")),
78  SOURCE_BUSY = Enum (54, "", _("Synthesis module currently busy")),
79  SOURCE_TYPE_INVALID = Enum (55, "", _("Invalid synthsis module type")),
80  // BseProcedure errors
81  PROC_NOT_FOUND = Enum (56, "", _("No such procedure")),
82  PROC_BUSY = Enum (57, "", _("Procedure currently busy")),
83  PROC_PARAM_INVAL = Enum (58, "", _("Procedure parameter invalid")),
84  PROC_EXECUTION = Enum (59, "", _("Procedure execution failed")),
85  PROC_ABORT = Enum (60, "", _("Procedure execution aborted")),
86  // various procedure errors
87  NO_ENTRY = Enum (61, "", _("No such entry")),
88  NO_EVENT = Enum (62, "", _("No such event")),
89  NO_TARGET = Enum (63, "", _("No target")),
90  NOT_OWNER = Enum (64, "", _("Ownership mismatch")),
91  INVALID_OFFSET = Enum (65, "", _("Invalid offset")),
92  INVALID_DURATION = Enum (66, "", _("Invalid duration")),
93  INVALID_OVERLAP = Enum (67, "", _("Invalid overlap")),
94 };
95 
96 enum MidiSignal {
97  // special case signals
98  PROGRAM = Enum (1, _("Program Change")), // 7bit
99  PRESSURE = Enum (2, _("Channel Pressure")), // 7bit
100  PITCH_BEND = Enum (3, _("Pitch Bend")), // 14bit
101  VELOCITY = Enum (4, _("Note Velocity")),
102  FINE_TUNE = Enum (5, _("Note Fine Tune")),
103  // 14bit, continuous controls
104  CONTINUOUS_0 = Enum (64, _("Bank Select")),
105  CONTINUOUS_1 = Enum (65, _("Modulation Depth")),
106  CONTINUOUS_2 = Enum (66, _("Breath Control")),
107  CONTINUOUS_3 = Enum (67, _("Continuous 3")),
108  CONTINUOUS_4 = Enum (68, _("Foot Controller")),
109  CONTINUOUS_5 = Enum (69, _("Portamento Time")),
110  CONTINUOUS_6 = Enum (70, _("Data Entry")),
111  CONTINUOUS_7 = Enum (71, _("Volume")),
112  CONTINUOUS_8 = Enum (72, _("Balance")),
113  CONTINUOUS_9 = Enum (73, _("Continuous 9")),
114  CONTINUOUS_10 = Enum (74, _("Panorama")),
115  CONTINUOUS_11 = Enum (75, _("Expression")),
116  CONTINUOUS_12 = Enum (76, _("Effect Control 1")),
117  CONTINUOUS_13 = Enum (77, _("Effect Control 2")),
118  CONTINUOUS_14 = Enum (78, _("Continuous 14")),
119  CONTINUOUS_15 = Enum (79, _("Continuous 15")),
120  CONTINUOUS_16 = Enum (80, _("General Purpose Controller 1")),
121  CONTINUOUS_17 = Enum (81, _("General Purpose Controller 2")),
122  CONTINUOUS_18 = Enum (82, _("General Purpose Controller 3")),
123  CONTINUOUS_19 = Enum (83, _("General Purpose Controller 4")),
124  CONTINUOUS_20 = Enum (84, _("Continuous 20")),
125  CONTINUOUS_21 = Enum (85, _("Continuous 21")),
126  CONTINUOUS_22 = Enum (86, _("Continuous 22")),
127  CONTINUOUS_23 = Enum (87, _("Continuous 23")),
128  CONTINUOUS_24 = Enum (88, _("Continuous 24")),
129  CONTINUOUS_25 = Enum (89, _("Continuous 25")),
130  CONTINUOUS_26 = Enum (90, _("Continuous 26")),
131  CONTINUOUS_27 = Enum (91, _("Continuous 27")),
132  CONTINUOUS_28 = Enum (92, _("Continuous 28")),
133  CONTINUOUS_29 = Enum (93, _("Continuous 29")),
134  CONTINUOUS_30 = Enum (94, _("Continuous 30")),
135  CONTINUOUS_31 = Enum (95, _("Continuous 31")),
136  // 14bit, special case signals
137  CONSTANT_HIGH = Enum (96, _("Constant HIGH")),
138  CONSTANT_CENTER = Enum (97, _("Constant CENTER")),
139  CONSTANT_LOW = Enum (98, _("Constant LOW")),
140  CONSTANT_NEGATIVE_CENTER = Enum (99, _("Constant Negative CENTER")),
141  CONSTANT_NEGATIVE_HIGH = Enum (100, _("Constant Negative HIGH")),
142  PARAMETER = Enum (101, _("Registered Parameter")),
143  NON_PARAMETER = Enum (102, _("Non-Registered Parameter")),
144  // 7bit, literal channel controls, MSB values
145  CONTROL_0 = Enum (128, _("Control 0 Bank Select MSB")),
146  CONTROL_1 = Enum (129, _("Control 1 Modulation Depth MSB")),
147  CONTROL_2 = Enum (130, _("Control 2 Breath Control MSB")),
148  CONTROL_3 = Enum (131, _("control-3")),
149  CONTROL_4 = Enum (132, _("Control 4 Foot Controller MSB")),
150  CONTROL_5 = Enum (133, _("Control 5 Portamento Time MSB")),
151  CONTROL_6 = Enum (134, _("Control 6 Data Entry MSB")),
152  CONTROL_7 = Enum (135, _("Control 7 Volume MSB")),
153  CONTROL_8 = Enum (136, _("Control 8 Balance MSB")),
154  CONTROL_9 = Enum (137, _("control-9")),
155  CONTROL_10 = Enum (138, _("Control 10 Panorama MSB")),
156  CONTROL_11 = Enum (139, _("Control 11 Expression MSB")),
157  CONTROL_12 = Enum (140, _("Control 12 Effect Control 1 MSB")),
158  CONTROL_13 = Enum (141, _("Control 13 Effect Control 2 MSB")),
159  CONTROL_14 = Enum (142, _("control-14")),
160  CONTROL_15 = Enum (143, _("control-15")),
161  CONTROL_16 = Enum (144, _("Control 16 General Purpose Controller 1 MSB")),
162  CONTROL_17 = Enum (145, _("Control 17 General Purpose Controller 2 MSB")),
163  CONTROL_18 = Enum (146, _("Control 18 General Purpose Controller 3 MSB")),
164  CONTROL_19 = Enum (147, _("Control 19 General Purpose Controller 4 MSB")),
165  CONTROL_20 = Enum (148, _("control-20")),
166  CONTROL_21 = Enum (149, _("control-21")),
167  CONTROL_22 = Enum (150, _("control-22")),
168  CONTROL_23 = Enum (151, _("control-23")),
169  CONTROL_24 = Enum (152, _("control-24")),
170  CONTROL_25 = Enum (153, _("control-25")),
171  CONTROL_26 = Enum (154, _("control-26")),
172  CONTROL_27 = Enum (155, _("control-27")),
173  CONTROL_28 = Enum (156, _("control-28")),
174  CONTROL_29 = Enum (157, _("control-29")),
175  CONTROL_30 = Enum (158, _("control-30")),
176  CONTROL_31 = Enum (159, _("control-31")),
177  // 7bit, literal channel controls, LSB values
178  CONTROL_32 = Enum (160, _("Control 32 Bank Select LSB")),
179  CONTROL_33 = Enum (161, _("Control 33 Modulation Depth LSB")),
180  CONTROL_34 = Enum (162, _("Control 34 Breath Control LSB")),
181  CONTROL_35 = Enum (163, _("control-35")),
182  CONTROL_36 = Enum (164, _("Control 36 Foot Controller LSB")),
183  CONTROL_37 = Enum (165, _("Control 37 Portamento Time LSB")),
184  CONTROL_38 = Enum (166, _("Control 38 Data Entry LSB")),
185  CONTROL_39 = Enum (167, _("Control 39 Volume LSB")),
186  CONTROL_40 = Enum (168, _("Control 40 Balance LSB")),
187  CONTROL_41 = Enum (169, _("control-41")),
188  CONTROL_42 = Enum (170, _("Control 42 Panorama LSB")),
189  CONTROL_43 = Enum (171, _("Control 43 Expression LSB")),
190  CONTROL_44 = Enum (172, _("Control 44 Effect Control 1 LSB")),
191  CONTROL_45 = Enum (173, _("Control 45 Effect Control 2 LSB")),
192  CONTROL_46 = Enum (174, _("control-46")),
193  CONTROL_47 = Enum (175, _("control-47")),
194  CONTROL_48 = Enum (176, _("Control 48 General Purpose Controller 1 LSB")),
195  CONTROL_49 = Enum (177, _("Control 49 General Purpose Controller 2 LSB")),
196  CONTROL_50 = Enum (178, _("Control 50 General Purpose Controller 3 LSB")),
197  CONTROL_51 = Enum (179, _("Control 51 General Purpose Controller 4 LSB")),
198  CONTROL_52 = Enum (180, _("control-52")),
199  CONTROL_53 = Enum (181, _("control-53")),
200  CONTROL_54 = Enum (182, _("control-54")),
201  CONTROL_55 = Enum (183, _("control-55")),
202  CONTROL_56 = Enum (184, _("control-56")),
203  CONTROL_57 = Enum (185, _("control-57")),
204  CONTROL_58 = Enum (186, _("control-58")),
205  CONTROL_59 = Enum (187, _("control-59")),
206  CONTROL_60 = Enum (188, _("control-60")),
207  CONTROL_61 = Enum (189, _("control-61")),
208  CONTROL_62 = Enum (190, _("control-62")),
209  CONTROL_63 = Enum (191, _("control-63")),
210  // 7bit, literal channel controls
211  CONTROL_64 = Enum (192, _("Control 64 Damper Pedal Switch (Sustain)")),
212  CONTROL_65 = Enum (193, _("Control 65 Portamento Switch")),
213  CONTROL_66 = Enum (194, _("Control 66 Sustenuto Switch")),
214  CONTROL_67 = Enum (195, _("Control 67 Soft Switch")),
215  CONTROL_68 = Enum (196, _("Control 68 Legato Pedal Switch")),
216  CONTROL_69 = Enum (197, _("Control 69 Hold Pedal Switch")),
217  CONTROL_70 = Enum (198, _("Control 70 Sound Variation")),
218  CONTROL_71 = Enum (199, _("Control 71 Filter Resonance (Timbre)")),
219  CONTROL_72 = Enum (200, _("Control 72 Sound Release Time")),
220  CONTROL_73 = Enum (201, _("Control 73 Sound Attack Time")),
221  CONTROL_74 = Enum (202, _("Control 74 Sound Brightness")),
222  CONTROL_75 = Enum (203, _("Control 75 Sound Decay Time")),
223  CONTROL_76 = Enum (204, _("Control 76 Vibrato Rate")),
224  CONTROL_77 = Enum (205, _("Control 77 Vibrato Depth")),
225  CONTROL_78 = Enum (206, _("Control 78 Vibrato Delay")),
226  CONTROL_79 = Enum (207, _("Control 79 Sound Control 10")),
227  CONTROL_80 = Enum (208, _("Control 80 General Purpose Switch 5")),
228  CONTROL_81 = Enum (209, _("Control 81 General Purpose Switch 6")),
229  CONTROL_82 = Enum (210, _("Control 82 General Purpose Switch 7")),
230  CONTROL_83 = Enum (211, _("Control 83 General Purpose Switch 8")),
231  CONTROL_84 = Enum (212, _("Control 84 Portamento Control (Note)")),
232  CONTROL_85 = Enum (213, _("control-85")),
233  CONTROL_86 = Enum (214, _("control-86")),
234  CONTROL_87 = Enum (215, _("control-87")),
235  CONTROL_88 = Enum (216, _("control-88")),
236  CONTROL_89 = Enum (217, _("control-89")),
237  CONTROL_90 = Enum (218, _("control-90")),
238  CONTROL_91 = Enum (219, _("Control 91 Reverb Depth")),
239  CONTROL_92 = Enum (220, _("Control 92 Tremolo Depth")),
240  CONTROL_93 = Enum (221, _("Control 93 Chorus Depth")),
241  CONTROL_94 = Enum (222, _("Control 93 Detune Depth")),
242  CONTROL_95 = Enum (223, _("Control 95 Phase Depth")),
243  CONTROL_96 = Enum (224, _("Control 96 Data Increment Trigger")),
244  CONTROL_97 = Enum (225, _("Control 97 Data Decrement Trigger")),
245  CONTROL_98 = Enum (226, _("Control 98 Non-Registered Parameter MSB")),
246  CONTROL_99 = Enum (227, _("Control 99 Non-Registered Parameter LSB")),
247  CONTROL_100 = Enum (228, _("Control 100 Registered Parameter MSB")),
248  CONTROL_101 = Enum (229, _("Control 101 Registered Parameter LSB")),
249  CONTROL_102 = Enum (230, _("control-102")),
250  CONTROL_103 = Enum (231, _("control-103")),
251  CONTROL_104 = Enum (232, _("control-104")),
252  CONTROL_105 = Enum (233, _("control-105")),
253  CONTROL_106 = Enum (234, _("control-106")),
254  CONTROL_107 = Enum (235, _("control-107")),
255  CONTROL_108 = Enum (236, _("control-108")),
256  CONTROL_109 = Enum (237, _("control-109")),
257  CONTROL_110 = Enum (238, _("control-110")),
258  CONTROL_111 = Enum (239, _("control-111")),
259  CONTROL_112 = Enum (240, _("control-112")),
260  CONTROL_113 = Enum (241, _("control-113")),
261  CONTROL_114 = Enum (242, _("control-114")),
262  CONTROL_115 = Enum (243, _("control-115")),
263  CONTROL_116 = Enum (244, _("control-116")),
264  CONTROL_117 = Enum (245, _("control-117")),
265  CONTROL_118 = Enum (246, _("control-118")),
266  CONTROL_119 = Enum (247, _("control-119")),
267  CONTROL_120 = Enum (248, _("Control 120 All Sound Off ITrigger")),
268  CONTROL_121 = Enum (249, _("Control 121 All Controllers Off ITrigger")),
269  CONTROL_122 = Enum (250, _("Control 122 Local Control Switch")),
270  CONTROL_123 = Enum (251, _("Control 123 All Notes Off ITrigger")),
271  CONTROL_124 = Enum (252, _("Control 124 Omni Mode Off ITrigger")),
272  CONTROL_125 = Enum (253, _("Control 125 Omni Mode On ITrigger")),
273  CONTROL_126 = Enum (254, _("Control 126 Monophonic Voices Mode")),
274  CONTROL_127 = Enum (255, _("Control 127 Polyphonic Mode On ITrigger")),
275 };
276 
277 // For musical tunings, see: http://en.wikipedia.org/wiki/Musical_tuning
278 enum MusicalTuning {
279  // Equal Temperament: http://en.wikipedia.org/wiki/Equal_temperament
280  OD_12_TET = Enum (1, _("12 Tone Equal Temperament"), // http://en.wikipedia.org/wiki/Equal_temperament
281  _("The most common tuning system for modern Western music, "
282  "is the twelve-tone equal temperament, abbreviated as 12-TET, "
283  "which divides the octave into 12 equal parts.")),
284  OD_7_TET = Enum (_("7 Tone Equal Temperament"), // http://en.wikipedia.org/wiki/Equal_temperament
285  _("A fairly common tuning system is the seven-tone equal temperament tuning system, "
286  "abbreviated as 7-TET. It divides the octave into 7 equal parts using 171 cent steps.")),
287  OD_5_TET = Enum (_("5 Tone Equal Temperament"), // http://en.wikipedia.org/wiki/Equal_temperament
288  _("A fairly common tuning system is the five-tone equal temperament tuning system, "
289  "abbreviated as 5-TET. It divides the octave into 5 equal parts using 240 cent steps.")),
290  // Rational Intonation: http://en.wikipedia.org/wiki/Just_intonation
291  DIATONIC_SCALE = Enum (_("Diatonic Scale"), // http://en.wikipedia.org/wiki/Diatonic_scale
292  _("In music theory, a diatonic scale (also: heptatonia prima) is a seven-note "
293  "musical scale comprising five whole-tone and two half-tone steps. "
294  "The half tones are maximally separated, so between two half-tone steps "
295  "there are either two or three whole tones, repeating per octave.")), // Werckmeister I
296  INDIAN_SCALE = Enum (_("Indian Scale"), // http://en.wikipedia.org/wiki/Just_intonation#Indian_scales
297  _("Diatonic scale used in Indian music with wolf interval at Dha, close to 3/2")),
298  PYTHAGOREAN_TUNING = Enum (_("Pythagorean Tuning"), // http://en.wikipedia.org/wiki/Pythagorean_tuning
299  _("Pythagorean tuning is the oldest way of tuning the 12-note chromatic scale, "
300  "in which the frequency relationships of all intervals are based on the ratio 3:2. "
301  "Its discovery is generally credited to Pythagoras.")),
302  PENTATONIC_5_LIMIT = Enum (_("Pentatonic 5-limit"), // http://en.wikipedia.org/wiki/Pentatonic_scale
303  _("Pentatonic scales are used in modern jazz and pop/rock contexts "
304  "because they work exceedingly well over several chords diatonic "
305  "to the same key, often better than the parent scale.")),
306  PENTATONIC_BLUES = Enum (_("Pentatonic Blues"), // http://en.wikipedia.org/wiki/Pentatonic_scale
307  _("The blues scale is the minor pentatonic with an additional augmented fourth, "
308  "which is referred to as the \"blues note\".")),
309  PENTATONIC_GOGO = Enum (_("Pentatonic Gogo"), // http://en.wikipedia.org/wiki/Pentatonic_scale
310  _("The Pentatonic Gogo scale is an anhemitonic pentatonic scale used to tune the "
311  "instruments of the Gogo people of Tanzania.")),
312  // Meantone Temperament: http://en.wikipedia.org/wiki/Meantone_temperament
313  QUARTER_COMMA_MEANTONE = Enum (_("Quarter-Comma Meantone"), // http://en.wikipedia.org/wiki/Quarter-comma_meantone
314  _("Quarter-comma meantone was the most common meantone temperament in the "
315  "sixteenth and seventeenth centuries and sometimes used later.")), // Werckmeister II
316  SILBERMANN_SORGE = Enum (_("Silbermann-Sorge Temperament"), // http://de.wikipedia.org/wiki/Silbermann-Sorge-Temperatur
317  _("The Silbermann-Sorge temperament is a meantone temperament used for "
318  "Baroque era organs by Gottfried Silbermann.")),
319  // Well Temperament: http://en.wikipedia.org/wiki/Well_temperament
320  WERCKMEISTER_3 = Enum (_("Werckmeister III"), // http://en.wikipedia.org/wiki/Werckmeister_temperament
321  _("This tuning uses mostly pure (perfect) fifths, as in Pythagorean tuning, but each "
322  "of the fifths C-G, G-D, D-A and B-F# is made smaller, i.e. tempered by 1/4 comma. "
323  "Werckmeister designated this tuning as particularly suited for playing chromatic music.")),
324  WERCKMEISTER_4 = Enum (_("Werckmeister IV"), // http://en.wikipedia.org/wiki/Werckmeister_temperament
325  _("In this tuning the fifths C-G, D-A, E-B, F#-C#, and Bb-F are tempered narrow by 1/3 comma, "
326  "and the fifths G#-D# and Eb-Bb are widened by 1/3 comma. The other fifths are pure. "
327  "Most of its intervals are close to sixth-comma meantone. "
328  "Werckmeister designed this tuning for playing mainly diatonic music.")),
329  WERCKMEISTER_5 = Enum (_("Werckmeister V"), // http://en.wikipedia.org/wiki/Werckmeister_temperament
330  _("In this tuning the fifths D-A, A-E, F#-C#, C#-G#, and F-C are narrowed by 1/4 comma, "
331  "and the fifth G#-D# is widened by 1/4 comma. The other fifths are pure. "
332  "This temperament is closer to equal temperament than Werckmeister III or IV.")),
333  WERCKMEISTER_6 = Enum (_("Werckmeister VI"), // http://en.wikipedia.org/wiki/Werckmeister_temperament
334  _("This tuning is also known as Septenarius tuning is based on a division of the monochord "
335  "length into 196 = 7 * 7 * 4 parts. "
336  "The resulting scale has rational frequency relationships, but in practice involves pure "
337  "and impure sounding fifths. "
338  "Werckmeister described the Septenarius as a \"temperament which has nothing at all to do "
339  "with the divisions of the comma, nevertheless in practice so correct that one can be really "
340  "satisfied with it\".")),
341  KIRNBERGER_3 = Enum (_("Kirnberger III"), // http://en.wikipedia.org/wiki/Johann_Philipp_Kirnberger_temperament
342  _("Kirnberger's method of compensating for and closing the circle of fifths is to split the \"wolf\" "
343  "interval known to those who have used meantone temperaments between four fifths instead, "
344  "allowing for four 1/4-comma wolves to take their place. "
345  "1/4-comma wolves are used extensively in meantone and are much easier to tune and to listen to. "
346  "Therefore, only one third remains pure (between C and E).")),
347  YOUNG = Enum (_("Young Temperament"), // http://en.wikipedia.org/wiki/Young_temperament
348  _("Thomas Young devised a form of musical tuning to make the harmony most perfect in those keys which "
349  "are the most frequently used (give better major thirds in those keys), but to not have any unplayable keys. "
350  "This is attempted by tuning upwards from C a sequence of six pure fourths, "
351  "as well as six equally imperfect fifths.")),
352 };
353 
354 // == Bse Constants ==
355 Const MIN_NOTE = 0;
356 Const MAX_NOTE = 131; // 123
357 Const NOTE_VOID = MAX_NOTE + 1;
358 Const KAMMER_NOTE = 69;
359 Const KAMMER_FREQ = 440.0;
360 Const KAMMER_OCTAVE = +1;
361 Const MIN_OCTAVE = -4;
362 Const MAX_OCTAVE = +6;
363 Const MIN_FINE_TUNE = -100;
364 Const MAX_FINE_TUNE = 100;
365 Const MIN_BPM = 1;
366 Const MAX_BPM = 1024;
367 Const MIN_TRANSPOSE = -72;
368 Const MAX_TRANSPOSE = +72;
369 Const GUI = "r:w:G";
370 Const STORAGE = "r:w:S";
371 Const STANDARD = STORAGE ":G";
372 Const NOTEHINTS = STANDARD ":note";
373 Const FINETUNEHINTS = STANDARD ":finetune";
374 Const VELOCITYHINTS = STANDARD ":velocity";
375 
377 sequence StringSeq {
378  String string;
379 };
380 
382 sequence PixelSeq {
383  int32 argb = Num ("ARGB", "ARGB Format: (alpha << 24) | (red << 16) | (green << 8) | blue", STANDARD);
384 };
385 
387 record Icon {
388  int32 width = Range ("Width", "Width in pixels or 0 for no icon", STANDARD, 0, 4096, 1, 0);
389  int32 height = Range ("Height", "Height in pixels or 0 for no icon", STANDARD, 0, 4096, 1, 0);
390  PixelSeq pixels = Sequence ("Pixels", "Array of width*height ARGB pixels", STANDARD);
391 };
392 
394 record AuxData {
397 };
398 
400 sequence AuxDataSeq {
401  AuxData aux_data;
402 };
403 
405 interface TestObject {
406  int32 echo_test (String msg);
407  signal void echo_reply (String msg);
408 };
409 
411  ERROR = 1,
415 };
416 
418 record UserMessage {
425 };
426 
428 record SongTiming {
429  int32 tick = Range ("Current tick", "Song position timing applies to", STANDARD, 0, MAXINT31, 384, 0);
430  float64 bpm = Range ("BPM", "Beats per minute", STANDARD, MIN_BPM, MAX_BPM, 10, 120);
431  // Signature
432  int32 numerator = Range ("Numerator", "Number of notes per measure", STANDARD, 1, 256, 2, 4);
433  int32 denominator = Range ("Denominator", "Type of notes counted per measure", STANDARD, 1, 256, 2, 4);
434  // Sequencer Timing
435  int32 tpqn = Range ("TPQN", "Ticks per quarter note", STANDARD, 1, MAXINT31, 12, 384);
436  int32 tpt = Range ("TPT", "Ticks per tact", STANDARD, 1, MAXINT31, 12, 384);
437  // Playback Timing
438  float64 stamp_ticks = Range ("Tick Increment", "Ticks per stamp increment (useful only during playback)", STANDARD, 1, MAXINT31, 12, 384);
439 };
440 
443 {
444  MusicalTuning musical_tuning;
445  int32 note = Range ("Note", "", ":readwrite:note");
446  int32 octave = Range ("Octave", "", ":readwrite:octave");
447  float64 freq = Range ("Frequency", "", ":readwrite:freq");
448  int32 finetune = Range ("Finetune", "", ":readwrite:finetune", -100, +100, 10, 0);
449  int32 semitone = Range ("Semitone", "", ":readwrite", 0, 11, 1, 0);
450  bool upshift = Bool ("Upshift", "Flag set for notes that correspond to a black piano key");
451  int32 letter = Range ("Letter", "International abbreviation letter for this note", ":readwrite", 32, 126, 1, 64);
452  String name = String ("Name", "", ":readwrite");
453 };
454 
455 // Forward declarations.
456 record PartLink;
457 sequence PartLinkSeq;
458 record TrackPart;
459 sequence TrackPartSeq;
460 
462 interface Object {
463  String debug_name ();
464  int64 proxy_id ();
465  signal void changed (String what);
466 };
467 
469 interface Item : Object {
470  Icon icon = Record ("Icon", "State dependent icon representation of this item", "rw:G");
471  Item common_ancestor (Item other);
472 
473  // bool check_is_a (String type_name); ///< Check whether an item has a certain type.
474  // void clear_undo (); ///< Call the clear-undo function of the project corresponding to this item if any.
475  // bool editable_property (String property_name); ///< Test whether a property is editable according to object state and property options.
476  // String get_name (); ///< Retrieve an item's name.
477  // String get_name_or_type (); ///< Retrieve an item's name or type if it has no name.
478  // Item get_parent (); ///< Retrieve an item's parent.
479  // Item get_project (); ///< Retrieve an item's project.
480  // PropertyCandidates get_property_candidates (String property_name); ///< Retrieve tentative values for an item or item sequence property.
481  // int32 get_seqid (); ///< Retrieve an item's sequential ID. The sequential ID depends on the item's type an it's position inbetween siblings of the same type within it's immediate container.
482  // String get_type (); ///< Retrieve an item's type name.
483  // String get_type_authors (); ///< Retrieve authors of an item's type implementation.
484  // String get_type_blurb (); ///< Retrieve an item's type description.
485  // String get_type_license (); ///< Retrieve the license for an item's type implementation.
486  // String get_type_name (); ///< Retrieve an item's type name.
487  // String get_uname_path (); ///< Retrieve the project relative uname path for this item.
488  // void group_undo (String name); ///< Request multiple modifying actions on an item to be grouped together as single undo operation.
489  // bool internal (); ///< Check whether an item is internal, i.e. owned by another non-internal item.
490  // void redo (); ///< Call the redo function of the project corresponding to this item if any.
491  // void set_name (String name); ///< Set an item's name.
492  // void undo (); ///< Call the undo function of the project corresponding to this item if any.
493  // void ungroup_undo (); ///< Ends the undo grouping opened up by a previous group-undo() call.
494  // void unuse (); ///< Decrement use count for when an item is not needed anymore.
495  // Item use (); ///< Increment use count to keep an item alive.
496  // int32 seqid = Range ("Sequential ID", "", ":readwrite", 0, MAXINT31, 1);
497 };
498 
500 sequence ItemSeq {
501  Item items;
502 };
503 
505 record PartNote
506 {
507  int32 id = Num ("ID", "", 0, ":readwrite");
508  int32 channel = Range ("Channel", "", ":readwrite", 0, MAXINT31, 1);
509  int32 tick = Range ("Tick", "", ":readwrite", 0, MAXINT31, 1);
510  int32 duration = Range ("Duration", "Duration in number of ticks", ":readwrite", 0, MAXINT31, 1);
511  int32 note = Range ("Note", "", NOTEHINTS, MIN_NOTE, MAX_NOTE, 12, KAMMER_NOTE);
512  int32 fine_tune = Range ("Fine Tune", "", FINETUNEHINTS, MIN_FINE_TUNE, MAX_FINE_TUNE, 1);
513  float64 velocity = Range ("Velocity", "", VELOCITYHINTS, 0, 1.0, 0.1, 1);
514  bool selected = Bool ("Selected", "", ":readwrite", false);
515 };
516 
518 sequence PartNoteSeq {
519  PartNote part_notes;
520 };
521 
523 record PartControl {
524  int32 id = Num ("ID", "", ":readwrite");
525  int32 tick = Range ("Tick", "", ":readwrite", 0, MAXINT31, 1);
526  MidiSignal control_type;
527  float64 value = Range ("Value", "", ":readwrite", -1, +1, 0.1);
528  bool selected = Bool ("Selected", "", ":readwrite");
529 };
530 
532 sequence PartControlSeq {
533  PartControl pcontrols;
534 };
535 
537 interface Part : Item {
538  PartControlSeq list_selected_controls (MidiSignal control_type);
539  PartControlSeq list_controls (int32 tick, int32 duration, MidiSignal control_type);
540  PartControlSeq get_channel_controls (int32 channel, int32 tick, int32 duration, MidiSignal control_type);
541  PartControlSeq get_controls (int32 tick, MidiSignal control_type);
542  SongTiming get_timing (int32 tick);
543  int32 get_max_note ();
544  int32 get_min_note ();
545  Error change_control (int32 id, int32 tick, MidiSignal control_type, float64 value);
546  Error change_note (int32 id, int32 tick, int32 duration, int32 note, int32 fine_tune, float64 velocity);
547  Error delete_event (int32 id);
548  int32 insert_control (int32 tick, MidiSignal control_type, float64 value);
549  int32 insert_note (int32 channel, int32 tick, int32 duration, int32 note, int32 fine_tune, float64 velocity);
550  int32 insert_note_auto (int32 tick, int32 duration, int32 note, int32 fine_tune, float64 velocity);
551  bool is_event_selected (int32 id);
552  void queue_controls (int32 tick, int32 duration);
553  void queue_notes (int32 tick, int32 duration, int32 min_note, int32 max_note);
554  void select_notes_exclusive (int32 tick, int32 duration, int32 min_note, int32 max_note);
555  void select_controls_exclusive (int32 tick, int32 duration, MidiSignal control_type);
556  void select_notes (int32 tick, int32 duration, int32 min_note, int32 max_note);
557  void select_event (int32 id);
558  void select_controls (int32 tick, int32 duration, MidiSignal control_type);
559  void deselect_notes (int32 tick, int32 duration, int32 min_note, int32 max_note);
560  void deselect_event (int32 id);
561  void deselect_controls (int32 tick, int32 duration, MidiSignal control_type);
562  PartNoteSeq list_notes_crossing (int32 tick, int32 duration);
563  PartNoteSeq list_notes_within (int32 channel, int32 tick, int32 duration);
564  PartNoteSeq list_selected_notes ();
565  PartNoteSeq check_overlap (int32 tick, int32 duration, int32 note);
566  PartNoteSeq get_notes (int32 tick, int32 note);
567  PartLinkSeq list_links ();
568 
569  // signal void range_changed (int32 a, int32 b, int32 c, int32 d);
570  // signal void links_changed ();
571  // property int32 n_channels;
572  // property int32 last_tick;
573 };
574 
576 sequence PartSeq {
577  Part part;
578 };
579 
581 interface Source : Item {
582  Source ichannel_get_osource (int32 input_channel, int32 input_joint);
583 
584  // void clear_inputs (); ///< Disconnect all module inputs.
585  // void clear_outputs (); ///< Disconnect all module outputs.
586  // int32 get_automation_channel (String property_name); ///< Get MIDI channel from an automation property.
587  // MidiControlType get_automation_control (String property_name); ///< Get control type from an automation property.
588  // bool has_output (int32 ochannel); ///< Check whether a module's output channel is connected.
589  // bool has_outputs (); ///< Check whether a module has output channel connections.
590  // String ichannel_blurb (int32 input_channel); ///< Get input channel description.
591  // int32 ichannel_get_n_joints (int32 input_channel); ///< Retrieve the number of inputs connected to an input channel.
592  // int32 ichannel_get_ochannel (int32 input_channel, int32 input_joint); ///< Retrieve output channel of the module connected to a specific joint of an input channel.
593  // String ichannel_ident (int32 input_channel); ///< Get canonical input channel name.
594  // String ichannel_label (int32 input_channel); ///< Get input channel name.
595  // bool is_joint_ichannel (String input_channel); ///< Check if an input channel is a joint (multi-connect) channel.
596  // bool is_joint_ichannel_by_id (int32 input_channel); ///< Check if an input channel is a joint (multi-connect) channel.
597  // bool is_prepared (); ///< Check whether a source is prepared for synthesis processing.
598  // int32 n_ichannels (); ///< Get the number of input channels of a module.
599  // int32 n_ochannels (); ///< Get the number of output channels of a module.
600  // String ochannel_blurb (int32 output_channel); ///< Get output channel description.
601  // String ochannel_ident (int32 output_channel); ///< Get canonical output channel name.
602  // String ochannel_label (int32 output_channel); ///< Get output channel name.
603  // Error set_automation (String property_name, int32 midi_channel, MidiControlType control_type); ///< Setup automation parameters for a property.
604  // Error set_input (String input_channel, Source omodule, String output_channel); ///< Connect a module input to another module's output.
605  // Error set_input_by_id (int32 input_channel, Source omodule, int32 output_channel); ///< Connect a module input to another module's output.
606  // void set_pos (float64 x_pos, float64 y_pos); ///< Set the x and y position of a module. In contrast to setting the position through ordinary object property setters, this function will not update the module position if the passed in arguments are sufficiently equal to the values already set on the object. As such, it does not record an extra undo step for setting properties to values they already have and if necessary turns setting of x and y positions into an atomic undo operation.
607  // Error unset_input (String input_channel, Source omodule, String output_channel); ///< Disconnect a module input.
608  // Error unset_input_by_id (int32 input_channel, Source omodule, int32 output_channel); ///< Disconnect a module input.
609  // signal void probes (ProbeSeq a);
610  // signal void io_changed ();
611  // float64 pos_x = Range ("Position X", "", STANDARD ":scale");
612  // float64 pos_y = Range ("Position Y", "", STANDARD ":scale");
613 };
614 
616 interface ContextMerger : Source {
617 };
618 
620 interface Container : Source {
621  Item lookup_item (String uname);
622  Item get_item (String item_type, int32 seq_id);
623  ItemSeq list_children ();
624 };
625 
627 interface Super : Container {
628 };
629 
631 sequence SuperSeq {
632  Super supers;
633 };
634 
636 interface SNet : Super {
637  bool supports_user_synths ();
638  Error can_create_source (String module_type);
639  Source create_source (String module_type);
640  Error remove_source (Source module);
641  signal void port_unregistered ();
642  group _("Playback Settings") {
643  bool auto_activate = Bool (_("Auto Activate"),
644  _("Automatic activation only needs to be enabled for synthesis networks that don't "
645  "use virtual ports for their input and output"),
646  STANDARD, true);
647  };
648 };
649 
651 interface CSynth : SNet {
652 };
653 
655 interface SubSynth : Source {
656  // CSynth snet = Object ("Synthesizer", "Synthesis network to use as embedded sub network", STANDARD ":unprepared");
657  // String in_port_1 = String ("Input Port 1", "Output port name to interface from", STANDARD ":skip-default");
658  // String out_port_1 = String ("Output Port 1", "Input port name to interface to", STANDARD ":skip-default");
659  // String in_port_2 = String ("Input Port 2", "Output port name to interface from", STANDARD ":skip-default");
660  // String out_port_2 = String ("Output Port 2", "Input port name to interface to", STANDARD ":skip-default");
661  // String in_port_3 = String ("Input Port 3", "Output port name to interface from", STANDARD ":skip-default");
662  // String out_port_3 = String ("Output Port 3", "Input port name to interface to", STANDARD ":skip-default");
663  // String in_port_4 = String ("Input Port 4", "Output port name to interface from", STANDARD ":skip-default");
664  // String out_port_4 = String ("Output Port 4", "Input port name to interface to", STANDARD ":skip-default");
665  // String in_port_5 = String ("Input Port 5", "Output port name to interface from", STANDARD ":skip-default");
666  // String out_port_5 = String ("Output Port 5", "Input port name to interface to", STANDARD ":skip-default");
667  // String in_port_6 = String ("Input Port 6", "Output port name to interface from", STANDARD ":skip-default");
668  // String out_port_6 = String ("Output Port 6", "Input port name to interface to", STANDARD ":skip-default");
669  // String in_port_7 = String ("Input Port 7", "Output port name to interface from", STANDARD ":skip-default");
670  // String out_port_7 = String ("Output Port 7", "Input port name to interface to", STANDARD ":skip-default");
671  // String in_port_8 = String ("Input Port 8", "Output port name to interface from", STANDARD ":skip-default");
672  // String out_port_8 = String ("Output Port 8", "Input port name to interface to", STANDARD ":skip-default");
673 };
674 
676 interface Track : ContextMerger {
677  SongTiming get_timing (int32 tick);
678  int32 insert_part (int32 tick, Part part);
679  void remove_tick (int32 tick);
680  void remove_link (int32 id);
681 
682  PartSeq list_parts_uniq ();
683  TrackPartSeq list_parts ();
684  Part get_part (int32 tick);
685  int32 get_last_tick ();
686  Error ensure_output ();
687  Source get_output_source ();
690 
691  // property bool muted; ///< _("Mute this track by ignoring it in the sequencer.")
692  // property CSynth snet; ///< _("Synthesis network to be used as instrument.")
693  // property Wave wave; ///< _("Wave to be used as instrument.")
694  // property int32 midi_channel; ///< _("Midi channel assigned to this track, 0 uses internal per-track channel.")
695  // property int32 n_voices; ///< _("Maximum number of voices for simultaneous playback.")
696  // property CSynth pnet; ///< _("Synthesis network to be used as postprocessor.")
697  // property ItemSeq outputs; ///< _("Mixer busses used as output for this track.")
698 };
699 
701 record PartLink {
702  Track track;
703  int32 tick = Range ("Tick", "", STANDARD, 0, MAXINT31, 384);
704  Part part;
705  int32 duration = Range ("Duration", "", STANDARD, 0, MAXINT31, 384);
706  // int32 count; // 1 + repetitions
707 };
708 
710 sequence PartLinkSeq {
711  PartLink plinks;
712 };
713 
715 record TrackPart {
716  int32 tick = Range ("Tick", "", STANDARD, 0, MAXINT31, 384);
717  Part part;
718  int32 duration = Range ("Duration", "", STANDARD, 0, MAXINT31, 384);
719 };
720 
722 sequence TrackPartSeq {
723  TrackPart parts;
724 };
725 
727 interface Bus : SubSynth {
728  Error ensure_output ();
729  Error connect_bus (Bus bus);
730  Error connect_track (Track track);
731  Error disconnect_bus (Bus bus);
732  Error disconnect_track (Track track);
733  // ItemSeq inputs = Object ("Input Signals", "Synthesis signals (from tracks and busses) used as bus input", GUI ":item-sequence");
734  // ItemSeq outputs = Object ("Output Signals", "Mixer busses used as output for synthesis signals", GUI ":item-sequence");
735  // CSynth snet = Object ("SNet", "Synthesis network used internally to implement effect stack", READWRITE ":skip-undo");
736  // bool mute = Bool ("Mute", "Mute: turn off the bus volume", STANDARD ":skip-default", FALSE);
737  // bool solo = Bool ("Solo", "Solo: mute all other busses", STANDARD ":skip-default", FALSE);
738  // bool sync = Bool ("Sync", "Synchronize left and right volume", STANDARD ":skip-default", TRUE);
739  // float64 left_volume = Num ("Left Volume", "Volume adjustment in decibel of left bus channel", STANDARD ":scale:db-volume");
740  // float64 right_volume = Num ("Right Volume", "Volume adjustment in decibel of right bus channel", STANDARD ":scale:db-volume");
741  // bool master_output = Bool ("Master Output", "", STORAGE ":skip-default", FALSE);
742 };
743 
745 interface Song : SNet {
746  SongTiming get_timing (int32 tick);
747  Track find_any_track_for_part (Part part);
748  Bus create_bus ();
749  void remove_bus (Bus bus);
750  Part create_part ();
751  void remove_part (Part part);
752  Track create_track ();
753  void remove_track (Track track);
754  Bus ensure_master_bus ();
755  void ensure_track_links ();
756  Track find_track_for_part (Part part);
757  Bus get_master_bus ();
758  void synthesize_note (Track track, int32 duration, int32 note, int32 fine_tune, float64 velocity);
760  // signal void pointer_changed (int32 a);
761  // group _("Timing") {
762  // int32 tpqn = Range ("Ticks", "Number of ticks per quarter note", STANDARD, 384, 384, 0, 384);
763  // int32 numerator = Range ("Numerator", "Measure numerator", STANDARD, 1, 256, 1, 4);
764  // int32 denominator = Range ("Denominator", "Measure denominator, must be a power of 2", STANDARD, 1, 256, 1, 4);
765  // float64 bpm = Range ("BPM", "Beats per minute", STANDARD, MIN_BPM, MAX_BPM, 10, 120);
766  // };
767  // group _("MIDI Instrument") {
768  // CSynth pnet = Object ("Postprocessor", "Synthesis network to be used as postprocessor", STANDARD);
769  // };
770  // bool loop_enabled = Bool ("Loop Enabled", "", STORAGE, FALSE);
771  // int32 loop_left = Range ("Loop Left", "", STORAGE, -1, MAXINT31, 384, -1);
772  // int32 loop_right = Range ("Loop Right", "", STORAGE, -1, MAXINT31, 384, -1);
773  // int32 tick_pointer = Range ("Tick Pointer", "", STORAGE, -1, MAXINT31, 384, -1);
774  group _("Timing") {
775  float64 bpm = Range (_("BPM"), _("Beats per minute"), STANDARD ":scale", MIN_BPM, MAX_BPM, 10, 120);
776  };
777  group _("Tuning") {
778  MusicalTuning musical_tuning = Enum (_("Musical Tuning"),
779  _("The tuning system which specifies the tones or pitches to be used. "
780  "Due to the psychoacoustic properties of tones, various pitch combinations can "
781  "sound \"natural\" or \"pleasing\" when used in combination, the musical "
782  "tuning system defines the number and spacing of frequency values applied."),
783  STANDARD ":unprepared");
784  };
785 };
786 
789  String file = String ("Filename", "", STANDARD);
790  int64 size = Range ("File Size", "File size in bytes", ":readwrite", 0, MAXINT63);
791  int64 mtime = Range ("MTime", "Last modification time in ┬Áseconds", ":readwrite", 0, MAXINT63);
792  String loader = String ("Loader", "Sample loader implementation", STANDARD);
793  StringSeq waves = Sequence ("Waves", "List of embedded waves", STANDARD);
794  Error error = Enum ("Error", "Indicator for errors during sample operation", STANDARD);
795 };
796 
798 interface EditableSample : Item {
799 };
800 
802 interface Wave : Source {
803  float64 chunk_get_mix_freq (int32 chunk_index);
804  float64 chunk_get_osc_freq (int32 chunk_index);
805  int32 n_wave_chunks ();
806  EditableSample use_editable (int32 chunk_index);
807 };
808 
810 interface WaveRepo : Super {
811  Error load_file (String file_name);
812  void remove_wave (Wave wave);
813 };
814 
816 interface SoundFont : Container {
817 };
818 
819 interface SoundFontRepo : Super {
820  Error load_file (String file_name);
821  Error remove_sound_font (SoundFont sound_font);
822 };
823 
825 interface MidiNotifier : Item {
826 };
827 
829 interface MidiSynth : SNet {
830 };
831 
837 };
838 
840 interface Project : Container {
841  signal void state_changed (ProjectState newstate);
842  ProjectState get_state ();
843  void change_name (String name);
844  Error play ();
845  Error activate ();
846  bool can_play ();
847  bool is_playing ();
848  bool is_active ();
849  void start_playback ();
850  void stop_playback ();
851  void deactivate ();
852  void stop ();
853  void auto_deactivate (int32 msec_delay);
854  int32 undo_depth ();
855  void undo ();
856  int32 redo_depth ();
857  void redo ();
858  void clear_undo ();
859  void clean_dirty ();
860  bool is_dirty ();
861  SuperSeq get_supers ();
862  Error store_bse (Super super, String file_name, bool self_contained);
863  Song create_song (String name);
864  WaveRepo get_wave_repo ();
865  SoundFontRepo get_sound_font_repo ();
866  CSynth create_csynth (String name);
867  MidiSynth create_midi_synth (String name);
868  MidiNotifier get_midi_notifier ();
869  void remove_snet (SNet snet);
870  Error restore_from_file (String file_name);
871  void inject_midi_control (int32 midi_channel, int32 midi_control, float64 control_value);
873  Error import_midi_file (String file_name);
874  //Item find_item (String uname_path); ///< Find an item within a project, given its uname path.
877  //StringSeq list_uname_paths (String item_type);
879  //ItemSeq match_items_by_uname (String item_type, String uname);
885 
886 };
887 
889 interface PcmWriter : Item {
890 };
891 
893 record Category
894 {
895  int32 category_id = Num ("Category ID", "", ":readwrite");
896  String category;
897  int32 mindex;
898  int32 lindex;
899  String otype;
900  Icon icon;
901 };
902 
904 sequence CategorySeq {
905  Category cats;
906 };
907 
912 interface Server : Object {
913  signal void user_message (UserMessage umsg);
914  TestObject get_test_object ();
915  Object from_proxy (int64 proxyid);
916  String get_mp3_version ();
917  String get_vorbis_version ();
918  String get_ladspa_path ();
919  String get_plugin_path ();
920  String get_script_path ();
921  String get_instrument_path ();
922  String get_sample_path ();
923  String get_effect_path ();
924  String get_demo_path ();
925  String get_custom_instrument_dir ();
926  String get_custom_effect_dir ();
927  String get_version ();
928  void save_preferences ();
929  void register_ladspa_plugins();
930  void register_core_plugins();
931  void register_scripts();
932  void load_assets();
933  bool preferences_locked();
934  int32 n_scripts();
935  bool can_load (String file_name);
936  void start_recording (String wave_file, float64 n_seconds);
937  Project create_project (String project_name);
938  void destroy_project (Project project);
939  AuxDataSeq list_module_types ();
940  AuxData find_module_type (String module_type);
941  Icon module_type_icon (String module_type);
942  SampleFileInfo sample_file_info (String file_name);
943 
945  NoteDescription note_describe (MusicalTuning musical_tuning, int32 note, int32 fine_tune);
946  // Describe a note, given its frequency.
947  NoteDescription note_describe_from_freq (MusicalTuning musical_tuning, float64 freq);
949  NoteDescription note_construct (MusicalTuning musical_tuning, int32 semitone, int32 octave, int32 fine_tune);
951  NoteDescription note_from_string (MusicalTuning musical_tuning, String name);
953  int32 note_from_freq (MusicalTuning musical_tuning, float64 frequency);
955  float64 note_to_freq (MusicalTuning musical_tuning, int32 note, int32 fine_tune);
956 
957  CategorySeq category_match_typed (String pattern, String type_name);
958  CategorySeq category_match (String pattern);
959 
961  int64 tick_stamp_from_systime (int64 systime_usecs);
962 
963  // *** Old Janitor ***
964  // void trigger_action (String action); ///< Trigger an installed user action of this janitor.
965  // String get_script_name (); ///< Retrieve the script name of this janitor.
966  // String get_proc_name (); ///< Retrieve the procedure name of this janitor.
967  // int32 n_actions (); ///< Retrieve number of user actions of this janitor.
968  // String get_action (int32 nth_action); ///< Retrieve an action of this janitor.
969  // String get_action_name (int32 nth_action); ///< Retrieve the name of an action of this janitor.
970  // String get_action_blurb (int32 nth_action); ///< Retrieve the help string of an action of this janitor.
971  // void kill (); ///< Kill a currently running janitor.
972 };
973 
974 } // Bse
Const MIN_FINE_TUNE
Octave of MAX_NOTE.
Definition: bseapi.idl:363
Interface for Track and Part objects, as well as meta data for sequencing.
Definition: bseapi.idl:745
int32_t int32
Sequence of Category records.
Definition: bseapi.idl:904
A list of part note events.
Definition: bseapi.idl:500
Structure linking to a Track from within a Part.
Definition: bseapi.idl:715
The project is not yet hooked to the sound engine.
Definition: bseapi.idl:834
Interface for writing PCM wave data.
Definition: bseapi.idl:889
The Bse namespace contains all functions of the synthesis engine.
Definition: bstbseutils.cc:91
Const MIN_OCTAVE
Octave number for MIDI A&#39;.
Definition: bseapi.idl:361
Representation of an icon pixel image.
Definition: bseapi.idl:387
Const MAX_OCTAVE
Octave of MIN_NOTE.
Definition: bseapi.idl:362
Synthesizer module for embedding (rerouting input and output) of another synthesizer network (SNet)...
Definition: bseapi.idl:655
A note description provides all needed details about a specific note. ".
Definition: bseapi.idl:442
A list of Super type objects.
Definition: bseapi.idl:631
Const KAMMER_FREQ
Kammer note, representing the kammer frequency&#39;s MIDI note value for A&#39; or A4.
Definition: bseapi.idl:359
Interface serving as container for Wave objects.
Definition: bseapi.idl:810
int width() const
String text3
Possibly (technical) details or machine error message.
Definition: bseapi.idl:423
Definition: bsecxxutils.hh:90
Base interface type for objects that can be added to a container.
Definition: bseapi.idl:469
Interface for effect stacks and per-track audio signal routing to the master output.
Definition: bseapi.idl:727
AuxData - record to describe entity attributes with "key=value" strings.
Definition: bseapi.idl:394
Source module for merging multiple synthesis contexts, used to implement polyphony.
Definition: bseapi.idl:616
signal void echo_reply(String msg)
Signal emitted in response to echo_test().
STL class.
Base interface type for Item managers.
Definition: bseapi.idl:627
Data interface for containment of piano notes and MIDI effects.
Definition: bseapi.idl:537
A list of part control events.
Definition: bseapi.idl:532
Indicate a message about an error condition.
Definition: bseapi.idl:411
Base interface type for synthesis modules with input or output streams.
Definition: bseapi.idl:581
UserMessageType utype
Severity classification for this message.
Definition: bseapi.idl:419
The project is active and the sequencer is running.
Definition: bseapi.idl:836
Const KAMMER_OCTAVE
Pitch Standard, see also: https://en.wikipedia.org/wiki/A440_(pitch_standard)
Definition: bseapi.idl:360
int height() const
Definition: sficxx.hh:326
Indicate an informational message.
Definition: bseapi.idl:413
String title
Usually GUI window title.
Definition: bseapi.idl:420
Customizable synthesis (filter) network container.
Definition: bseapi.idl:651
Structure containing meta data for multi wave samples.
Definition: bseapi.idl:788
Object to carry out IDL, API, signal, etc tests.
Definition: bseapi.idl:405
Interface for sequencing information and links to Part objects.
Definition: bseapi.idl:676
String text1
Primary message to the user, should be limited to 80-100 chars.
Definition: bseapi.idl:421
signal
Part specific note event representation.
Definition: bseapi.idl:505
const char * _(const char *string)
Translate message strings in the BEAST/BSE text domain.
Definition: glib-extra.cc:1100
The sound engine is activated (rnuning) for this project.
Definition: bseapi.idl:835
UserMessageType
Definition: bseapi.idl:410
Indicate a debugging message (usually insignificant).
Definition: bseapi.idl:414
A list of part note events.
Definition: bseapi.idl:518
int64_t int64
Categories describe useful type entities.
Definition: bseapi.idl:893
Base interface type for all kinds of synthesis networks.
Definition: bseapi.idl:636
Indicate a message about a possibly harmful condition.
Definition: bseapi.idl:412
A list of Part or derived types.
Definition: bseapi.idl:576
StringSeq attributes
List of "key=value" auxillary data strings.
Definition: bseapi.idl:396
Part specific control event representation.
Definition: bseapi.idl:523
Main Bse remote origin object.
Definition: bseapi.idl:912
Interface for editable PCM wave samples.
Definition: bseapi.idl:798
Interface for PCM wave samples.
Definition: bseapi.idl:802
Song timing configuration.
Definition: bseapi.idl:428
int32 echo_test(String msg)
Echo custom message to stdout.
String entity
Entity that has an auxillary data list.
Definition: bseapi.idl:395
ProjectState
Enumeration describing the current activation and playback state of a project.
Definition: bseapi.idl:833
Interface for sound fonts.
Definition: bseapi.idl:816
Const KAMMER_NOTE
Value represents unparsable/unknown notes.
Definition: bseapi.idl:358
String text2
Explanatory (secondary) message no limitations recommended.
Definition: bseapi.idl:422
AuxDataSeq - a variable length list of AuxData records.
Definition: bseapi.idl:400
Definition: bseapi.idl:819
Sequence of TrackPart records.
Definition: bseapi.idl:722
String label
Message class label, used to enable/disable this type of message.
Definition: bseapi.idl:424
Sequence of PartLink records.
Definition: bseapi.idl:710
Structure for submission of user interface messages from BSE.
Definition: bseapi.idl:418
Projects support loading, saving, playback and act as containers for all other sound objects...
Definition: bseapi.idl:840
Interface for MIDI synthesis networks.
Definition: bseapi.idl:829
Interface for MIDI event notification.
Definition: bseapi.idl:825
uname