Beast - Music Synthesizer and Composer  0.11.1+10.g2da35
bsebasics.idl
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 namespace Bse {
3 using namespace Sfi;
4 /* param options */
5 Const READWRITE = ":r:w:";
6 Const STORAGE = ":r:w:S:";
7 Const STANDARD = ":r:w:S:G:";
8 Const STANDARD_RDONLY = ":r:w:S:G:ro:";
9 Const GUI = ":r:w:G:";
10 Const GUI_RDONLY = ":r:w:G:ro:";
11 Const GUI_READABLE = ":r:G:";
12 /* extra options */
13 Const SKIP_DEFAULT = ":skip-default:";
14 Const SKIP_UNDO = ":skip-undo:";
15 Const DEFAULT = STANDARD; // FIXME: remove
16 /* numeric constants */
17 Const MAXINT = +2147483647;
18 Const MININT = -2147483648;
19 Const MAXNUM = +9223372036854775807;
20 Const MINNUM = -9223372036854775808;
21 Const MINDB = -96; /* 32bit:-192 24bit:-144 16bit:-96 */
22 /* standard sequences */
23 sequence TypeSeq {
24  SfiString types;
25 };
26 sequence FloatSeq {
27  Real values;
28 };
29 enum MidiControlType {
30  /* special cased signals */
31  MIDI_CONTROL_NONE = Enum (0, _("None")),
32  /* 14bit, continuous controls */
33  MIDI_CONTROL_CONTINUOUS_0 = Enum (64, _("Bank Select"), _("Continuous MIDI Control #1 - Bank Select")),
34  MIDI_CONTROL_CONTINUOUS_1 = Enum (65, _("Modulation Depth")),
35  MIDI_CONTROL_CONTINUOUS_2 = Enum (66, _("Breath Control")),
36  MIDI_CONTROL_CONTINUOUS_3 = Enum (67, _("Continuous 3")),
37  MIDI_CONTROL_CONTINUOUS_4 = Enum (68, _("Foot Controller")),
38  MIDI_CONTROL_CONTINUOUS_5 = Enum (69, _("Portamento Time")),
39  MIDI_CONTROL_CONTINUOUS_6 = Enum (70, _("Data Entry")),
40  MIDI_CONTROL_CONTINUOUS_7 = Enum (71, _("Volume")),
41  MIDI_CONTROL_CONTINUOUS_8 = Enum (72, _("Balance")),
42  MIDI_CONTROL_CONTINUOUS_9 = Enum (73, _("Continuous 9")),
43  MIDI_CONTROL_CONTINUOUS_10 = Enum (74, _("Panorama")),
44  MIDI_CONTROL_CONTINUOUS_11 = Enum (75, _("Expression")),
45  MIDI_CONTROL_CONTINUOUS_12 = Enum (76, _("Effect Control 1")),
46  MIDI_CONTROL_CONTINUOUS_13 = Enum (77, _("Effect Control 2")),
47  MIDI_CONTROL_CONTINUOUS_14 = Enum (78, _("Continuous 14")),
48  MIDI_CONTROL_CONTINUOUS_15 = Enum (79, _("Continuous 15")),
49  MIDI_CONTROL_CONTINUOUS_16 = Enum (80, _("General Purpose Controller 1")),
50  MIDI_CONTROL_CONTINUOUS_17 = Enum (81, _("General Purpose Controller 2")),
51  MIDI_CONTROL_CONTINUOUS_18 = Enum (82, _("General Purpose Controller 3")),
52  MIDI_CONTROL_CONTINUOUS_19 = Enum (83, _("General Purpose Controller 4")),
53  MIDI_CONTROL_CONTINUOUS_20 = Enum (84, _("Continuous 20")),
54  MIDI_CONTROL_CONTINUOUS_21 = Enum (85, _("Continuous 21")),
55  MIDI_CONTROL_CONTINUOUS_22 = Enum (86, _("Continuous 22")),
56  MIDI_CONTROL_CONTINUOUS_23 = Enum (87, _("Continuous 23")),
57  MIDI_CONTROL_CONTINUOUS_24 = Enum (88, _("Continuous 24")),
58  MIDI_CONTROL_CONTINUOUS_25 = Enum (89, _("Continuous 25")),
59  MIDI_CONTROL_CONTINUOUS_26 = Enum (90, _("Continuous 26")),
60  MIDI_CONTROL_CONTINUOUS_27 = Enum (91, _("Continuous 27")),
61  MIDI_CONTROL_CONTINUOUS_28 = Enum (92, _("Continuous 28")),
62  MIDI_CONTROL_CONTINUOUS_29 = Enum (93, _("Continuous 29")),
63  MIDI_CONTROL_CONTINUOUS_30 = Enum (94, _("Continuous 30")),
64  MIDI_CONTROL_CONTINUOUS_31 = Enum (95, _("Continuous 31")),
65  /* 7bit, literal channel controls, MSB values */
66  MIDI_CONTROL_0 = Enum (128, _("Control 0 Bank Select MSB")),
67  MIDI_CONTROL_1 = Enum (129, _("Control 1 Modulation Depth MSB")),
68  MIDI_CONTROL_2 = Enum (130, _("Control 2 Breath Control MSB")),
69  MIDI_CONTROL_3 = Enum (131, _("control-3")),
70  MIDI_CONTROL_4 = Enum (132, _("Control 4 Foot Controller MSB")),
71  MIDI_CONTROL_5 = Enum (133, _("Control 5 Portamento Time MSB")),
72  MIDI_CONTROL_6 = Enum (134, _("Control 6 Data Entry MSB")),
73  MIDI_CONTROL_7 = Enum (135, _("Control 7 Volume MSB")),
74  MIDI_CONTROL_8 = Enum (136, _("Control 8 Balance MSB")),
75  MIDI_CONTROL_9 = Enum (137, _("control-9")),
76  MIDI_CONTROL_10 = Enum (138, _("Control 10 Panorama MSB")),
77  MIDI_CONTROL_11 = Enum (139, _("Control 11 Expression MSB")),
78  MIDI_CONTROL_12 = Enum (140, _("Control 12 Effect Control 1 MSB")),
79  MIDI_CONTROL_13 = Enum (141, _("Control 13 Effect Control 2 MSB")),
80  MIDI_CONTROL_14 = Enum (142, _("control-14")),
81  MIDI_CONTROL_15 = Enum (143, _("control-15")),
82  MIDI_CONTROL_16 = Enum (144, _("Control 16 General Purpose Controller 1 MSB")),
83  MIDI_CONTROL_17 = Enum (145, _("Control 17 General Purpose Controller 2 MSB")),
84  MIDI_CONTROL_18 = Enum (146, _("Control 18 General Purpose Controller 3 MSB")),
85  MIDI_CONTROL_19 = Enum (147, _("Control 19 General Purpose Controller 4 MSB")),
86  MIDI_CONTROL_20 = Enum (148, _("control-20")),
87  MIDI_CONTROL_21 = Enum (149, _("control-21")),
88  MIDI_CONTROL_22 = Enum (150, _("control-22")),
89  MIDI_CONTROL_23 = Enum (151, _("control-23")),
90  MIDI_CONTROL_24 = Enum (152, _("control-24")),
91  MIDI_CONTROL_25 = Enum (153, _("control-25")),
92  MIDI_CONTROL_26 = Enum (154, _("control-26")),
93  MIDI_CONTROL_27 = Enum (155, _("control-27")),
94  MIDI_CONTROL_28 = Enum (156, _("control-28")),
95  MIDI_CONTROL_29 = Enum (157, _("control-29")),
96  MIDI_CONTROL_30 = Enum (158, _("control-30")),
97  MIDI_CONTROL_31 = Enum (159, _("control-31")),
98  /* 7bit, literal channel controls, LSB values */
99  MIDI_CONTROL_32 = Enum (160, _("Control 32 Bank Select LSB")),
100  MIDI_CONTROL_33 = Enum (161, _("Control 33 Modulation Depth LSB")),
101  MIDI_CONTROL_34 = Enum (162, _("Control 34 Breath Control LSB")),
102  MIDI_CONTROL_35 = Enum (163, _("control-35")),
103  MIDI_CONTROL_36 = Enum (164, _("Control 36 Foot Controller LSB")),
104  MIDI_CONTROL_37 = Enum (165, _("Control 37 Portamento Time LSB")),
105  MIDI_CONTROL_38 = Enum (166, _("Control 38 Data Entry LSB")),
106  MIDI_CONTROL_39 = Enum (167, _("Control 39 Volume LSB")),
107  MIDI_CONTROL_40 = Enum (168, _("Control 40 Balance LSB")),
108  MIDI_CONTROL_41 = Enum (169, _("control-41")),
109  MIDI_CONTROL_42 = Enum (170, _("Control 42 Panorama LSB")),
110  MIDI_CONTROL_43 = Enum (171, _("Control 43 Expression LSB")),
111  MIDI_CONTROL_44 = Enum (172, _("Control 44 Effect Control 1 LSB")),
112  MIDI_CONTROL_45 = Enum (173, _("Control 45 Effect Control 2 LSB")),
113  MIDI_CONTROL_46 = Enum (174, _("control-46")),
114  MIDI_CONTROL_47 = Enum (175, _("control-47")),
115  MIDI_CONTROL_48 = Enum (176, _("Control 48 General Purpose Controller 1 LSB")),
116  MIDI_CONTROL_49 = Enum (177, _("Control 49 General Purpose Controller 2 LSB")),
117  MIDI_CONTROL_50 = Enum (178, _("Control 50 General Purpose Controller 3 LSB")),
118  MIDI_CONTROL_51 = Enum (179, _("Control 51 General Purpose Controller 4 LSB")),
119  MIDI_CONTROL_52 = Enum (180, _("control-52")),
120  MIDI_CONTROL_53 = Enum (181, _("control-53")),
121  MIDI_CONTROL_54 = Enum (182, _("control-54")),
122  MIDI_CONTROL_55 = Enum (183, _("control-55")),
123  MIDI_CONTROL_56 = Enum (184, _("control-56")),
124  MIDI_CONTROL_57 = Enum (185, _("control-57")),
125  MIDI_CONTROL_58 = Enum (186, _("control-58")),
126  MIDI_CONTROL_59 = Enum (187, _("control-59")),
127  MIDI_CONTROL_60 = Enum (188, _("control-60")),
128  MIDI_CONTROL_61 = Enum (189, _("control-61")),
129  MIDI_CONTROL_62 = Enum (190, _("control-62")),
130  MIDI_CONTROL_63 = Enum (191, _("control-63")),
131  /* 7bit, literal channel controls */
132  MIDI_CONTROL_64 = Enum (192, _("Control 64 Damper Pedal Switch (Sustain)")),
133  MIDI_CONTROL_65 = Enum (193, _("Control 65 Portamento Switch")),
134  MIDI_CONTROL_66 = Enum (194, _("Control 66 Sustenuto Switch")),
135  MIDI_CONTROL_67 = Enum (195, _("Control 67 Soft Switch")),
136  MIDI_CONTROL_68 = Enum (196, _("Control 68 Legato Pedal Switch")),
137  MIDI_CONTROL_69 = Enum (197, _("Control 69 Hold Pedal Switch")),
138  MIDI_CONTROL_70 = Enum (198, _("Control 70 Sound Variation")),
139  MIDI_CONTROL_71 = Enum (199, _("Control 71 Filter Resonance (Timbre)")),
140  MIDI_CONTROL_72 = Enum (200, _("Control 72 Sound Release Time")),
141  MIDI_CONTROL_73 = Enum (201, _("Control 73 Sound Attack Time")),
142  MIDI_CONTROL_74 = Enum (202, _("Control 74 Sound Brightness")),
143  MIDI_CONTROL_75 = Enum (203, _("Control 75 Sound Decay Time")),
144  MIDI_CONTROL_76 = Enum (204, _("Control 76 Vibrato Rate")),
145  MIDI_CONTROL_77 = Enum (205, _("Control 77 Vibrato Depth")),
146  MIDI_CONTROL_78 = Enum (206, _("Control 78 Vibrato Delay")),
147  MIDI_CONTROL_79 = Enum (207, _("Control 79 Sound Control 10")),
148  MIDI_CONTROL_80 = Enum (208, _("Control 80 General Purpose Switch 5")),
149  MIDI_CONTROL_81 = Enum (209, _("Control 81 General Purpose Switch 6")),
150  MIDI_CONTROL_82 = Enum (210, _("Control 82 General Purpose Switch 7")),
151  MIDI_CONTROL_83 = Enum (211, _("Control 83 General Purpose Switch 8")),
152  MIDI_CONTROL_84 = Enum (212, _("Control 84 Portamento Control (Note)")),
153  MIDI_CONTROL_85 = Enum (213, _("control-85")),
154  MIDI_CONTROL_86 = Enum (214, _("control-86")),
155  MIDI_CONTROL_87 = Enum (215, _("control-87")),
156  MIDI_CONTROL_88 = Enum (216, _("control-88")),
157  MIDI_CONTROL_89 = Enum (217, _("control-89")),
158  MIDI_CONTROL_90 = Enum (218, _("control-90")),
159  MIDI_CONTROL_91 = Enum (219, _("Control 91 Reverb Depth")),
160  MIDI_CONTROL_92 = Enum (220, _("Control 92 Tremolo Depth")),
161  MIDI_CONTROL_93 = Enum (221, _("Control 93 Chorus Depth")),
162  MIDI_CONTROL_94 = Enum (222, _("Control 93 Detune Depth")),
163  MIDI_CONTROL_95 = Enum (223, _("Control 95 Phase Depth")),
164  MIDI_CONTROL_96 = Enum (224, _("Control 96 Data Increment Trigger")),
165  MIDI_CONTROL_97 = Enum (225, _("Control 97 Data Decrement Trigger")),
166  MIDI_CONTROL_98 = Enum (226, _("Control 98 Non-Registered Parameter MSB")),
167  MIDI_CONTROL_99 = Enum (227, _("Control 99 Non-Registered Parameter LSB")),
168  MIDI_CONTROL_100 = Enum (228, _("Control 100 Registered Parameter MSB")),
169  MIDI_CONTROL_101 = Enum (229, _("Control 101 Registered Parameter LSB")),
170  MIDI_CONTROL_102 = Enum (230, _("control-102")),
171  MIDI_CONTROL_103 = Enum (231, _("control-103")),
172  MIDI_CONTROL_104 = Enum (232, _("control-104")),
173  MIDI_CONTROL_105 = Enum (233, _("control-105")),
174  MIDI_CONTROL_106 = Enum (234, _("control-106")),
175  MIDI_CONTROL_107 = Enum (235, _("control-107")),
176  MIDI_CONTROL_108 = Enum (236, _("control-108")),
177  MIDI_CONTROL_109 = Enum (237, _("control-109")),
178  MIDI_CONTROL_110 = Enum (238, _("control-110")),
179  MIDI_CONTROL_111 = Enum (239, _("control-111")),
180  MIDI_CONTROL_112 = Enum (240, _("control-112")),
181  MIDI_CONTROL_113 = Enum (241, _("control-113")),
182  MIDI_CONTROL_114 = Enum (242, _("control-114")),
183  MIDI_CONTROL_115 = Enum (243, _("control-115")),
184  MIDI_CONTROL_116 = Enum (244, _("control-116")),
185  MIDI_CONTROL_117 = Enum (245, _("control-117")),
186  MIDI_CONTROL_118 = Enum (246, _("control-118")),
187  MIDI_CONTROL_119 = Enum (247, _("control-119")),
188  MIDI_CONTROL_120 = Enum (248, _("Control 120 All Sound Off ITrigger")),
189  MIDI_CONTROL_121 = Enum (249, _("Control 121 All Controllers Off ITrigger")),
190  MIDI_CONTROL_122 = Enum (250, _("Control 122 Local Control Switch")),
191  MIDI_CONTROL_123 = Enum (251, _("Control 123 All Notes Off ITrigger")),
192  MIDI_CONTROL_124 = Enum (252, _("Control 124 Omni Mode Off ITrigger")),
193  MIDI_CONTROL_125 = Enum (253, _("Control 125 Omni Mode On ITrigger")),
194  MIDI_CONTROL_126 = Enum (254, _("Control 126 Monophonic Voices Mode")),
195  MIDI_CONTROL_127 = Enum (255, _("Control 127 Polyphonic Mode On ITrigger")),
196 };
197 enum MidiChannelEventType {
198  MIDI_EVENT_NONE = 0,
199  /* channel voice messages */
200  MIDI_EVENT_NOTE_OFF,
201  MIDI_EVENT_NOTE_ON,
202  MIDI_EVENT_KEY_PRESSURE,
203  MIDI_EVENT_CONTROL_CHANGE,
204  MIDI_EVENT_PROGRAM_CHANGE,
205  MIDI_EVENT_CHANNEL_PRESSURE,
206  MIDI_EVENT_PITCH_BEND,
207  /* system common messages */
208  MIDI_EVENT_SYS_EX,
209  MIDI_EVENT_SONG_POINTER,
210  MIDI_EVENT_SONG_SELECT,
211  MIDI_EVENT_TUNE,
212  /* system realtime messages */
213  MIDI_EVENT_TIMING_CLOCK,
214  MIDI_EVENT_SONG_START,
215  MIDI_EVENT_SONG_CONTINUE,
216  MIDI_EVENT_SONG_STOP,
217  MIDI_EVENT_ACTIVE_SENSING,
218  MIDI_EVENT_SYSTEM_RESET,
219 };
221 {
222  MidiChannelEventType event_type;
223  Int channel = SfiInt ("Channel", "", 0, 0, 99, 1, ":readwrite"); // FIXME: MAX_MIDI_CHANNEL
224  Num tick_stamp = SfiNum ("Time Stamp", "", 0, 0, SFI_MAXNUM, 0, STANDARD);
225  /* note (on/off/pressure) */
226  Real frequency = Freq ("Frequency", "", KAMMER_FREQ, ":readwrite");
227  Real velocity = SfiReal ("Velocity", "", 1, 0, 1.0, 0.1, ":readwrite");
228  /* control change */
229  Int control = SfiInt ("Control Number", "", 0, 0, 1024, 8, ":readwrite");
230  Real value = SfiReal ("Value", "", 0, -1, +1, 0.1, ":readwrite");
231  /* program change */
232  Int program = SfiInt ("Program", "", 0, 0, 0x7f, 0x10, ":readwrite");
233  /* channel pressure */
234  Real intensity = SfiReal ("Intensity", "", 0, 0, 1.0, 0.1, ":readwrite");
235  /* pitch bend */
236  Real pitch_bend = SfiReal ("Pitch Bend", "", 0, -1, +1, 0.1, ":readwrite");
237  /* song pointer */
238  Int song_pointer = SfiInt ("Song Pointer", "", 0, 0, 0x3fff, 0x80, ":readwrite");
239  /* song select */
240  Int song_number = SfiInt ("Song Number", "", 0, 0, 0x7f, 0x10, ":readwrite");
241 };
242 sequence NoteSeq {
243  Int notes = Note ("Note", "", KAMMER_NOTE, ":readwrite"); /* FIXME: s/notes/note/ for pspecs, but not the C API */
244 };
245 interface Item;
246 sequence It3mSeq {
247  Info blurb = ("A list of BSE items or derived types.");
248  Item items;
249 };
251  Info blurb = ("A structure describing tentative property values.");
252  SfiString label;
253  SfiString tooltip;
254  It3mSeq items;
255  TypeSeq partitions = SfiSeq ("Type Partitions", "List of types which may logically partition the list of items by type discrimination", STANDARD);
256 };
258 {
259  Int offset = Note ("Note Offset", "Center/base note", KAMMER_NOTE, ":readwrite");
260  NoteSeq notes = SfiSeq ("Notes", "Sequence of notes", ":readwrite");
261 };
262 sequence P1xelSeq {
263  Int pixels;
264 };
265 /* BSE Part structures */
266 interface Part;
267 interface Track;
268 interface Janitor;
269 
270 // == BSE Global Config ==
271 Const DEFAULT_AUTHOR = "\357\277\271\357\277\272{{bse.idl/default-author}}\357\277\273";
272 Const DEFAULT_LICENSE = "\357\277\271\357\277\272{{bse.idl/default-license}}\357\277\273";
273 Const USER_DATA_PATH = "\357\277\271\357\277\272{{bse.idl/user-data-path}}\357\277\273";
274 Const DEFAULT_SAMPLE_PATH = USER_DATA_PATH "samples";
275 Const DEFAULT_EFFECTS_PATH = USER_DATA_PATH "effects";
276 Const DEFAULT_INSTRUMENTS_PATH = USER_DATA_PATH "instruments";
277 Const DEFAULT_SCRIPTS_PATH = USER_DATA_PATH "scripts";
278 Const DEFAULT_PLUGINS_PATH = USER_DATA_PATH "plugins";
279 
280 record GConfig {
281  group _("Synthesis Settings") {
282  Int synth_latency =
283  SfiInt (_("Latency [ms]"),
284  _("Processing duration between input and output of a single sample, smaller values increase CPU load"),
285  50, 1, 2000, 5, STANDARD);
286  Int synth_mixing_freq =
287  SfiInt (_("Synth Mixing Frequency"),
288  _("Synthesis mixing frequency, common values are: 22050, 44100, 48000"),
289  44100, 8000, 192000, 0, STANDARD);
290  Int synth_control_freq =
291  SfiInt (_("Synth Control Frequency"),
292  _("Frequency at which control values are evaluated, "
293  "should be much smaller than Synth Mixing Frequency to reduce CPU load"),
294  1000, 1, 192000, 0, STANDARD);
295  };
296  group _("MIDI") {
297  Bool invert_sustain = SfiBool (_("Invert Sustain Pedal"),
298  _("Invert the state of sustain (damper) pedal so on/off meanings are reversed"),
299  FALSE, STANDARD);
300  };
301  group _("Default Values") {
302  SfiString author_default = SfiString (_("Default Author"), _("Default value for 'Author' fields"),
303  DEFAULT_AUTHOR, STANDARD);
304  SfiString license_default = SfiString (_("Default License"), _("Default value for 'License' fields"),
305  DEFAULT_LICENSE, STANDARD);
306  };
307  group _("Search Paths") {
308  SfiString sample_path = SfiString (_("Sample Path"),
309  _("Search path of directories, seperated by \";\", used to find audio samples."),
310  DEFAULT_SAMPLE_PATH, STANDARD ":searchpath");
311  SfiString effect_path = SfiString (_("Effect Path"),
312  _("Search path of directories, seperated by \";\", used to find BSE effect files."),
313  DEFAULT_EFFECTS_PATH, STANDARD ":searchpath");
314  SfiString instrument_path = SfiString (_("Instrument Path"),
315  _("Search path of directories, seperated by \";\", used to find BSE instrument files."),
316  DEFAULT_INSTRUMENTS_PATH, STANDARD ":searchpath");
317  SfiString script_path = SfiString (_("Script Path"),
318  _("Search path of directories, seperated by \";\", used to find BSE scheme scripts."),
319  DEFAULT_SCRIPTS_PATH, STANDARD ":searchpath");
320  SfiString plugin_path = SfiString (_("Plugin Path"),
321  _("Search path of directories, seperated by \";\", used to find BSE plugins. This path "
322  "is searched for in addition to the standard BSE plugin location on this system."),
323  DEFAULT_PLUGINS_PATH, STANDARD ":searchpath");
324  SfiString ladspa_path = SfiString (_("LADSPA Path"),
325  _("Search path of directories, seperated by \";\", used to find LADSPA plugins. This "
326  "path is searched for in addition to the standard LADSPA location on this system. "
327  "LADSPA is the Linux Audio Developer's Simple Plugin API, more informations about "
328  "LADSPA plugins can be found at http://www.ladspa.org/."),
329  "", STANDARD ":searchpath");
330  };
331 };
332 
333 } // Bse
Definition: bsebasics.idl:23
Definition: bsebasics.idl:250
The Bse namespace contains all functions of the synthesis engine.
Definition: bstbseutils.cc:91
Definition: bsebasics.idl:246
Const KAMMER_FREQ
Kammer note, representing the kammer frequency's MIDI note value for A' or A4.
Definition: bseapi.idl:359
Base interface type for objects that can be added to a container.
Definition: bseapi.idl:469
Definition: bsebasics.idl:262
Data interface for containment of piano notes and MIDI effects.
Definition: bseapi.idl:537
Interface for sequencing information and links to Part objects.
Definition: bseapi.idl:676
Definition: bsebasics.idl:280
Definition: bsebasics.idl:26
const char * _(const char *string)
Translate message strings in the BEAST/BSE text domain.
Definition: glib-extra.cc:1100
Definition: bsebasics.idl:242
Definition: bsebasics.idl:257
Definition: bsebasics.idl:220
Const KAMMER_NOTE
Value represents unparsable/unknown notes.
Definition: bseapi.idl:358
Definition: sficxx.hh:16
The Sfi namespace contains utilities for synthesis.
Definition: sfi.hh:9