ffi-fluidsynth 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Jason Jones
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,2 @@
1
+ ffi-fluidsynth
2
+ ==============
@@ -0,0 +1,16 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.authors = ["Jason Jones"]
5
+ gem.email = ["jasonedwardjones@gmail.com"]
6
+ gem.description = %q{FFI bindings for the FluidSynth library.}
7
+ gem.summary = %q{FFI bindings for the FluidSynth library.}
8
+ gem.homepage = ""
9
+
10
+ gem.files = `git ls-files`.split($\)
11
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.name = "ffi-fluidsynth"
14
+ gem.require_paths = ["lib"]
15
+ gem.version = "0.0.1"
16
+ end
data/gen.rb ADDED
@@ -0,0 +1,30 @@
1
+ require "ffi_gen"
2
+
3
+ FFIGen.generate(
4
+ ruby_module: "FluidSynth",
5
+ ffi_lib: "fluidsynth",
6
+ prefixes: ["fluid_"],
7
+ headers: [
8
+ "fluidsynth.h",
9
+ "fluidsynth/audio.h",
10
+ "fluidsynth/midi.h",
11
+ "fluidsynth/seq.h",
12
+ "fluidsynth/voice.h",
13
+ "fluidsynth/event.h",
14
+ "fluidsynth/misc.h",
15
+ "fluidsynth/seqbind.h",
16
+ "fluidsynth/synth.h",
17
+ "fluidsynth/gen.h",
18
+ "fluidsynth/mod.h",
19
+ "fluidsynth/settings.h",
20
+ "fluidsynth/types.h",
21
+ "fluidsynth/log.h",
22
+
23
+ "fluidsynth/sfont.h",
24
+ "fluidsynth/version.h"
25
+ #"fluidsynth/shell.h"
26
+ ],
27
+ output: "lib/ffi-fluidsynth.rb"
28
+ )
29
+
30
+
@@ -0,0 +1,3447 @@
1
+ # Generated by ffi_gen. Please do not change this file by hand.
2
+
3
+ require 'ffi'
4
+
5
+ module FluidSynth
6
+ extend FFI::Library
7
+ ffi_lib 'fluidsynth'
8
+
9
+ FLUID_HINT_BOUNDED_BELOW = 0x1
10
+
11
+ FLUID_HINT_BOUNDED_ABOVE = 0x2
12
+
13
+ FLUID_HINT_TOGGLED = 0x4
14
+
15
+ FLUID_HINT_SAMPLE_RATE = 0x8
16
+
17
+ FLUID_HINT_LOGARITHMIC = 0x10
18
+
19
+ FLUID_HINT_INTEGER = 0x20
20
+
21
+ FLUID_HINT_FILENAME = 0x01
22
+
23
+ FLUID_HINT_OPTIONLIST = 0x02
24
+
25
+ FLUID_SYNTH_CHANNEL_INFO_NAME_SIZE = 32
26
+
27
+ FLUID_REVERB_DEFAULT_ROOMSIZE = 0.2
28
+
29
+ FLUID_REVERB_DEFAULT_DAMP = 0.0
30
+
31
+ FLUID_REVERB_DEFAULT_WIDTH = 0.5
32
+
33
+ FLUID_REVERB_DEFAULT_LEVEL = 0.9
34
+
35
+ FLUID_CHORUS_DEFAULT_N = 3
36
+
37
+ FLUID_CHORUS_DEFAULT_LEVEL = 2.0
38
+
39
+ FLUID_CHORUS_DEFAULT_SPEED = 0.3
40
+
41
+ FLUID_CHORUS_DEFAULT_DEPTH = 8.0
42
+
43
+ FLUID_SAMPLETYPE_MONO = 1
44
+
45
+ FLUID_SAMPLETYPE_RIGHT = 2
46
+
47
+ FLUID_SAMPLETYPE_LEFT = 4
48
+
49
+ FLUID_SAMPLETYPE_LINKED = 8
50
+
51
+ FLUID_SAMPLETYPE_ROM = 0x8000
52
+
53
+ FLUID_SEQ_WITH_TRACE = 0
54
+
55
+ FLUID_NUM_MOD = 64
56
+
57
+ FLUIDSYNTH_VERSION = "1.1.5"
58
+
59
+ FLUIDSYNTH_VERSION_MAJOR = 1
60
+
61
+ FLUIDSYNTH_VERSION_MINOR = 1
62
+
63
+ FLUIDSYNTH_VERSION_MICRO = 5
64
+
65
+ # (Not documented)
66
+ class FluidHashtableT < FFI::Struct
67
+ end
68
+
69
+ # < Configuration settings instance
70
+ class FluidSynthT < FFI::Struct
71
+ end
72
+
73
+ # < SoundFont channel info
74
+ class FluidVoiceT < FFI::Struct
75
+ end
76
+
77
+ # < SoundFont modulator
78
+ class FluidAudioDriverT < FFI::Struct
79
+ end
80
+
81
+ # < Audio driver instance
82
+ class FluidFileRendererT < FFI::Struct
83
+ end
84
+
85
+ # < Audio file renderer instance
86
+ class FluidPlayerT < FFI::Struct
87
+ end
88
+
89
+ # < MIDI player instance
90
+ class FluidMidiEventT < FFI::Struct
91
+ end
92
+
93
+ # < MIDI event
94
+ class FluidMidiDriverT < FFI::Struct
95
+ end
96
+
97
+ # < MIDI driver instance
98
+ class FluidMidiRouterT < FFI::Struct
99
+ end
100
+
101
+ # < MIDI router instance
102
+ class FluidMidiRouterRuleT < FFI::Struct
103
+ end
104
+
105
+ # < Command handler
106
+ class FluidShellT < FFI::Struct
107
+ end
108
+
109
+ # < Command shell
110
+ class FluidServerT < FFI::Struct
111
+ end
112
+
113
+ # < TCP/IP shell server instance
114
+ class FluidEventT < FFI::Struct
115
+ end
116
+
117
+ # < Sequencer event
118
+ class FluidSequencerT < FFI::Struct
119
+ end
120
+
121
+ # < Sequencer instance
122
+ class FluidRamsfontT < FFI::Struct
123
+ end
124
+
125
+ # < RAM SoundFont
126
+ class FluidRampresetT < FFI::Struct
127
+ end
128
+
129
+ # (Not documented)
130
+ #
131
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:types_enum).</em>
132
+ #
133
+ # === Options:
134
+ # :num_ ::
135
+ # < Undefined type
136
+ # :int_ ::
137
+ # < Numeric (double)
138
+ # :str_ ::
139
+ # < Integer
140
+ # :set_ ::
141
+ # < String
142
+ #
143
+ # @method _enum_types_enum_
144
+ # @return [Symbol]
145
+ # @scope class
146
+ enum :types_enum, [
147
+ :num_,
148
+ :int_,
149
+ :str_,
150
+ :set_
151
+ ]
152
+
153
+ # (Not documented)
154
+ #
155
+ # @method new_fluid_settings()
156
+ # @return [FluidHashtableT]
157
+ # @scope class
158
+ attach_function :new_fluid_settings, :new_fluid_settings, [], FluidHashtableT
159
+
160
+ # (Not documented)
161
+ #
162
+ # @method delete_fluid_settings(settings)
163
+ # @param [FluidHashtableT] settings
164
+ # @return [nil]
165
+ # @scope class
166
+ attach_function :delete_fluid_settings, :delete_fluid_settings, [FluidHashtableT], :void
167
+
168
+ # (Not documented)
169
+ #
170
+ # @method settings_get_type(settings, name)
171
+ # @param [FluidHashtableT] settings
172
+ # @param [String] name
173
+ # @return [Integer]
174
+ # @scope class
175
+ attach_function :settings_get_type, :fluid_settings_get_type, [FluidHashtableT, :string], :int
176
+
177
+ # (Not documented)
178
+ #
179
+ # @method settings_get_hints(settings, name)
180
+ # @param [FluidHashtableT] settings
181
+ # @param [String] name
182
+ # @return [Integer]
183
+ # @scope class
184
+ attach_function :settings_get_hints, :fluid_settings_get_hints, [FluidHashtableT, :string], :int
185
+
186
+ # (Not documented)
187
+ #
188
+ # @method settings_is_realtime(settings, name)
189
+ # @param [FluidHashtableT] settings
190
+ # @param [String] name
191
+ # @return [Integer]
192
+ # @scope class
193
+ attach_function :settings_is_realtime, :fluid_settings_is_realtime, [FluidHashtableT, :string], :int
194
+
195
+ # (Not documented)
196
+ #
197
+ # @method settings_setstr(settings, name, str)
198
+ # @param [FluidHashtableT] settings
199
+ # @param [String] name
200
+ # @param [String] str
201
+ # @return [Integer]
202
+ # @scope class
203
+ attach_function :settings_setstr, :fluid_settings_setstr, [FluidHashtableT, :string, :string], :int
204
+
205
+ # (Not documented)
206
+ #
207
+ # @method settings_copystr(settings, name, str, len)
208
+ # @param [FluidHashtableT] settings
209
+ # @param [String] name
210
+ # @param [String] str
211
+ # @param [Integer] len
212
+ # @return [Integer]
213
+ # @scope class
214
+ attach_function :settings_copystr, :fluid_settings_copystr, [FluidHashtableT, :string, :string, :int], :int
215
+
216
+ # (Not documented)
217
+ #
218
+ # @method settings_dupstr(settings, name, str)
219
+ # @param [FluidHashtableT] settings
220
+ # @param [String] name
221
+ # @param [FFI::Pointer(**Char_S)] str
222
+ # @return [Integer]
223
+ # @scope class
224
+ attach_function :settings_dupstr, :fluid_settings_dupstr, [FluidHashtableT, :string, :pointer], :int
225
+
226
+ # (Not documented)
227
+ #
228
+ # @method settings_getstr(settings, name, str)
229
+ # @param [FluidHashtableT] settings
230
+ # @param [String] name
231
+ # @param [FFI::Pointer(**Char_S)] str
232
+ # @return [Integer]
233
+ # @scope class
234
+ attach_function :settings_getstr, :fluid_settings_getstr, [FluidHashtableT, :string, :pointer], :int
235
+
236
+ # (Not documented)
237
+ #
238
+ # @method settings_getstr_default(settings, name)
239
+ # @param [FluidHashtableT] settings
240
+ # @param [String] name
241
+ # @return [String]
242
+ # @scope class
243
+ attach_function :settings_getstr_default, :fluid_settings_getstr_default, [FluidHashtableT, :string], :string
244
+
245
+ # (Not documented)
246
+ #
247
+ # @method settings_str_equal(settings, name, value)
248
+ # @param [FluidHashtableT] settings
249
+ # @param [String] name
250
+ # @param [String] value
251
+ # @return [Integer]
252
+ # @scope class
253
+ attach_function :settings_str_equal, :fluid_settings_str_equal, [FluidHashtableT, :string, :string], :int
254
+
255
+ # (Not documented)
256
+ #
257
+ # @method settings_setnum(settings, name, val)
258
+ # @param [FluidHashtableT] settings
259
+ # @param [String] name
260
+ # @param [Float] val
261
+ # @return [Integer]
262
+ # @scope class
263
+ attach_function :settings_setnum, :fluid_settings_setnum, [FluidHashtableT, :string, :double], :int
264
+
265
+ # (Not documented)
266
+ #
267
+ # @method settings_getnum(settings, name, val)
268
+ # @param [FluidHashtableT] settings
269
+ # @param [String] name
270
+ # @param [FFI::Pointer(*Double)] val
271
+ # @return [Integer]
272
+ # @scope class
273
+ attach_function :settings_getnum, :fluid_settings_getnum, [FluidHashtableT, :string, :pointer], :int
274
+
275
+ # (Not documented)
276
+ #
277
+ # @method settings_getnum_default(settings, name)
278
+ # @param [FluidHashtableT] settings
279
+ # @param [String] name
280
+ # @return [Float]
281
+ # @scope class
282
+ attach_function :settings_getnum_default, :fluid_settings_getnum_default, [FluidHashtableT, :string], :double
283
+
284
+ # (Not documented)
285
+ #
286
+ # @method settings_getnum_range(settings, name, min, max)
287
+ # @param [FluidHashtableT] settings
288
+ # @param [String] name
289
+ # @param [FFI::Pointer(*Double)] min
290
+ # @param [FFI::Pointer(*Double)] max
291
+ # @return [nil]
292
+ # @scope class
293
+ attach_function :settings_getnum_range, :fluid_settings_getnum_range, [FluidHashtableT, :string, :pointer, :pointer], :void
294
+
295
+ # (Not documented)
296
+ #
297
+ # @method settings_setint(settings, name, val)
298
+ # @param [FluidHashtableT] settings
299
+ # @param [String] name
300
+ # @param [Integer] val
301
+ # @return [Integer]
302
+ # @scope class
303
+ attach_function :settings_setint, :fluid_settings_setint, [FluidHashtableT, :string, :int], :int
304
+
305
+ # (Not documented)
306
+ #
307
+ # @method settings_getint(settings, name, val)
308
+ # @param [FluidHashtableT] settings
309
+ # @param [String] name
310
+ # @param [FFI::Pointer(*Int)] val
311
+ # @return [Integer]
312
+ # @scope class
313
+ attach_function :settings_getint, :fluid_settings_getint, [FluidHashtableT, :string, :pointer], :int
314
+
315
+ # (Not documented)
316
+ #
317
+ # @method settings_getint_default(settings, name)
318
+ # @param [FluidHashtableT] settings
319
+ # @param [String] name
320
+ # @return [Integer]
321
+ # @scope class
322
+ attach_function :settings_getint_default, :fluid_settings_getint_default, [FluidHashtableT, :string], :int
323
+
324
+ # (Not documented)
325
+ #
326
+ # @method settings_getint_range(settings, name, min, max)
327
+ # @param [FluidHashtableT] settings
328
+ # @param [String] name
329
+ # @param [FFI::Pointer(*Int)] min
330
+ # @param [FFI::Pointer(*Int)] max
331
+ # @return [nil]
332
+ # @scope class
333
+ attach_function :settings_getint_range, :fluid_settings_getint_range, [FluidHashtableT, :string, :pointer, :pointer], :void
334
+
335
+ # Callback function type used with fluid_settings_foreach_option()
336
+ # @param data User defined data pointer
337
+ # @param name Setting name
338
+ # @param option A string option for this setting (iterates through the list)
339
+ #
340
+ # <em>This entry is only for documentation and no real method.</em>
341
+ #
342
+ # @method _callback_settings_foreach_option_t_(name, option)
343
+ # @param [String] name
344
+ # @param [String] option
345
+ # @return [FFI::Pointer(*Void)]
346
+ # @scope class
347
+ callback :settings_foreach_option_t, [:string, :string], :pointer
348
+
349
+ # (Not documented)
350
+ #
351
+ # @method settings_foreach_option(settings, name, data, func)
352
+ # @param [FluidHashtableT] settings
353
+ # @param [String] name
354
+ # @param [FFI::Pointer(*Void)] data
355
+ # @param [Proc(_callback_settings_foreach_option_t_)] func
356
+ # @return [nil]
357
+ # @scope class
358
+ attach_function :settings_foreach_option, :fluid_settings_foreach_option, [FluidHashtableT, :string, :pointer, :settings_foreach_option_t], :void
359
+
360
+ # (Not documented)
361
+ #
362
+ # @method settings_option_count(settings, name)
363
+ # @param [FluidHashtableT] settings
364
+ # @param [String] name
365
+ # @return [Integer]
366
+ # @scope class
367
+ attach_function :settings_option_count, :fluid_settings_option_count, [FluidHashtableT, :string], :int
368
+
369
+ # (Not documented)
370
+ #
371
+ # @method settings_option_concat(settings, name, separator)
372
+ # @param [FluidHashtableT] settings
373
+ # @param [String] name
374
+ # @param [String] separator
375
+ # @return [String]
376
+ # @scope class
377
+ attach_function :settings_option_concat, :fluid_settings_option_concat, [FluidHashtableT, :string, :string], :string
378
+
379
+ # Callback function type used with fluid_settings_foreach()
380
+ # @param data User defined data pointer
381
+ # @param name Setting name
382
+ # @param type Setting type (#fluid_types_enum)
383
+ #
384
+ # <em>This entry is only for documentation and no real method.</em>
385
+ #
386
+ # @method _callback_settings_foreach_t_(name, type)
387
+ # @param [String] name
388
+ # @param [Integer] type
389
+ # @return [FFI::Pointer(*Void)]
390
+ # @scope class
391
+ callback :settings_foreach_t, [:string, :int], :pointer
392
+
393
+ # (Not documented)
394
+ #
395
+ # @method settings_foreach(settings, data, func)
396
+ # @param [FluidHashtableT] settings
397
+ # @param [FFI::Pointer(*Void)] data
398
+ # @param [Proc(_callback_settings_foreach_t_)] func
399
+ # @return [nil]
400
+ # @scope class
401
+ attach_function :settings_foreach, :fluid_settings_foreach, [FluidHashtableT, :pointer, :settings_foreach_t], :void
402
+
403
+ # < Synthesizer instance
404
+ #
405
+ # = Fields:
406
+ # :assigned ::
407
+ # (Integer) < TRUE if a preset is assigned, FALSE otherwise
408
+ # :sfont_id ::
409
+ # (Integer) < ID of parent SoundFont
410
+ # :bank ::
411
+ # (Integer) < MIDI bank number (0-16383)
412
+ # :program ::
413
+ # (Integer) < MIDI program number (0-127)
414
+ # :name ::
415
+ # (Array<Integer>) < Channel preset name
416
+ # :reserved ::
417
+ # (Array<Integer>) < Reserved data for future expansion
418
+ class FluidSynthChannelInfoT < FFI::Struct
419
+ layout :assigned, :int,
420
+ :sfont_id, :int,
421
+ :bank, :int,
422
+ :program, :int,
423
+ :name, [:char, 32],
424
+ :reserved, [:char, 32]
425
+ end
426
+
427
+ # (Not documented)
428
+ #
429
+ # @method new_fluid_synth(settings)
430
+ # @param [FluidHashtableT] settings
431
+ # @return [FluidSynthT]
432
+ # @scope class
433
+ attach_function :new_fluid_synth, :new_fluid_synth, [FluidHashtableT], FluidSynthT
434
+
435
+ # (Not documented)
436
+ #
437
+ # @method delete_fluid_synth(synth)
438
+ # @param [FluidSynthT] synth
439
+ # @return [Integer]
440
+ # @scope class
441
+ attach_function :delete_fluid_synth, :delete_fluid_synth, [FluidSynthT], :int
442
+
443
+ # (Not documented)
444
+ #
445
+ # @method synth_get_settings(synth)
446
+ # @param [FluidSynthT] synth
447
+ # @return [FluidHashtableT]
448
+ # @scope class
449
+ attach_function :synth_get_settings, :fluid_synth_get_settings, [FluidSynthT], FluidHashtableT
450
+
451
+ # MIDI channel messages
452
+ #
453
+ # @method synth_noteon(synth, chan, key, vel)
454
+ # @param [FluidSynthT] synth
455
+ # @param [Integer] chan
456
+ # @param [Integer] key
457
+ # @param [Integer] vel
458
+ # @return [Integer]
459
+ # @scope class
460
+ attach_function :synth_noteon, :fluid_synth_noteon, [FluidSynthT, :int, :int, :int], :int
461
+
462
+ # (Not documented)
463
+ #
464
+ # @method synth_noteoff(synth, chan, key)
465
+ # @param [FluidSynthT] synth
466
+ # @param [Integer] chan
467
+ # @param [Integer] key
468
+ # @return [Integer]
469
+ # @scope class
470
+ attach_function :synth_noteoff, :fluid_synth_noteoff, [FluidSynthT, :int, :int], :int
471
+
472
+ # (Not documented)
473
+ #
474
+ # @method synth_cc(synth, chan, ctrl, val)
475
+ # @param [FluidSynthT] synth
476
+ # @param [Integer] chan
477
+ # @param [Integer] ctrl
478
+ # @param [Integer] val
479
+ # @return [Integer]
480
+ # @scope class
481
+ attach_function :synth_cc, :fluid_synth_cc, [FluidSynthT, :int, :int, :int], :int
482
+
483
+ # (Not documented)
484
+ #
485
+ # @method synth_get_cc(synth, chan, ctrl, pval)
486
+ # @param [FluidSynthT] synth
487
+ # @param [Integer] chan
488
+ # @param [Integer] ctrl
489
+ # @param [FFI::Pointer(*Int)] pval
490
+ # @return [Integer]
491
+ # @scope class
492
+ attach_function :synth_get_cc, :fluid_synth_get_cc, [FluidSynthT, :int, :int, :pointer], :int
493
+
494
+ # (Not documented)
495
+ #
496
+ # @method synth_sysex(synth, data, len, response, response_len, handled, dryrun)
497
+ # @param [FluidSynthT] synth
498
+ # @param [String] data
499
+ # @param [Integer] len
500
+ # @param [String] response
501
+ # @param [FFI::Pointer(*Int)] response_len
502
+ # @param [FFI::Pointer(*Int)] handled
503
+ # @param [Integer] dryrun
504
+ # @return [Integer]
505
+ # @scope class
506
+ attach_function :synth_sysex, :fluid_synth_sysex, [FluidSynthT, :string, :int, :string, :pointer, :pointer, :int], :int
507
+
508
+ # (Not documented)
509
+ #
510
+ # @method synth_pitch_bend(synth, chan, val)
511
+ # @param [FluidSynthT] synth
512
+ # @param [Integer] chan
513
+ # @param [Integer] val
514
+ # @return [Integer]
515
+ # @scope class
516
+ attach_function :synth_pitch_bend, :fluid_synth_pitch_bend, [FluidSynthT, :int, :int], :int
517
+
518
+ # (Not documented)
519
+ #
520
+ # @method synth_get_pitch_bend(synth, chan, ppitch_bend)
521
+ # @param [FluidSynthT] synth
522
+ # @param [Integer] chan
523
+ # @param [FFI::Pointer(*Int)] ppitch_bend
524
+ # @return [Integer]
525
+ # @scope class
526
+ attach_function :synth_get_pitch_bend, :fluid_synth_get_pitch_bend, [FluidSynthT, :int, :pointer], :int
527
+
528
+ # (Not documented)
529
+ #
530
+ # @method synth_pitch_wheel_sens(synth, chan, val)
531
+ # @param [FluidSynthT] synth
532
+ # @param [Integer] chan
533
+ # @param [Integer] val
534
+ # @return [Integer]
535
+ # @scope class
536
+ attach_function :synth_pitch_wheel_sens, :fluid_synth_pitch_wheel_sens, [FluidSynthT, :int, :int], :int
537
+
538
+ # (Not documented)
539
+ #
540
+ # @method synth_get_pitch_wheel_sens(synth, chan, pval)
541
+ # @param [FluidSynthT] synth
542
+ # @param [Integer] chan
543
+ # @param [FFI::Pointer(*Int)] pval
544
+ # @return [Integer]
545
+ # @scope class
546
+ attach_function :synth_get_pitch_wheel_sens, :fluid_synth_get_pitch_wheel_sens, [FluidSynthT, :int, :pointer], :int
547
+
548
+ # (Not documented)
549
+ #
550
+ # @method synth_program_change(synth, chan, program)
551
+ # @param [FluidSynthT] synth
552
+ # @param [Integer] chan
553
+ # @param [Integer] program
554
+ # @return [Integer]
555
+ # @scope class
556
+ attach_function :synth_program_change, :fluid_synth_program_change, [FluidSynthT, :int, :int], :int
557
+
558
+ # (Not documented)
559
+ #
560
+ # @method synth_channel_pressure(synth, chan, val)
561
+ # @param [FluidSynthT] synth
562
+ # @param [Integer] chan
563
+ # @param [Integer] val
564
+ # @return [Integer]
565
+ # @scope class
566
+ attach_function :synth_channel_pressure, :fluid_synth_channel_pressure, [FluidSynthT, :int, :int], :int
567
+
568
+ # (Not documented)
569
+ #
570
+ # @method synth_bank_select(synth, chan, bank)
571
+ # @param [FluidSynthT] synth
572
+ # @param [Integer] chan
573
+ # @param [Integer] bank
574
+ # @return [Integer]
575
+ # @scope class
576
+ attach_function :synth_bank_select, :fluid_synth_bank_select, [FluidSynthT, :int, :uint], :int
577
+
578
+ # (Not documented)
579
+ #
580
+ # @method synth_sfont_select(synth, chan, sfont_id)
581
+ # @param [FluidSynthT] synth
582
+ # @param [Integer] chan
583
+ # @param [Integer] sfont_id
584
+ # @return [Integer]
585
+ # @scope class
586
+ attach_function :synth_sfont_select, :fluid_synth_sfont_select, [FluidSynthT, :int, :uint], :int
587
+
588
+ # (Not documented)
589
+ #
590
+ # @method synth_program_select(synth, chan, sfont_id, bank_num, preset_num)
591
+ # @param [FluidSynthT] synth
592
+ # @param [Integer] chan
593
+ # @param [Integer] sfont_id
594
+ # @param [Integer] bank_num
595
+ # @param [Integer] preset_num
596
+ # @return [Integer]
597
+ # @scope class
598
+ attach_function :synth_program_select, :fluid_synth_program_select, [FluidSynthT, :int, :uint, :uint, :uint], :int
599
+
600
+ # (Not documented)
601
+ #
602
+ # @method synth_program_select_by_sfont_name(synth, chan, sfont_name, bank_num, preset_num)
603
+ # @param [FluidSynthT] synth
604
+ # @param [Integer] chan
605
+ # @param [String] sfont_name
606
+ # @param [Integer] bank_num
607
+ # @param [Integer] preset_num
608
+ # @return [Integer]
609
+ # @scope class
610
+ attach_function :synth_program_select_by_sfont_name, :fluid_synth_program_select_by_sfont_name, [FluidSynthT, :int, :string, :uint, :uint], :int
611
+
612
+ # (Not documented)
613
+ #
614
+ # @method synth_get_program(synth, chan, sfont_id, bank_num, preset_num)
615
+ # @param [FluidSynthT] synth
616
+ # @param [Integer] chan
617
+ # @param [FFI::Pointer(*UInt)] sfont_id
618
+ # @param [FFI::Pointer(*UInt)] bank_num
619
+ # @param [FFI::Pointer(*UInt)] preset_num
620
+ # @return [Integer]
621
+ # @scope class
622
+ attach_function :synth_get_program, :fluid_synth_get_program, [FluidSynthT, :int, :pointer, :pointer, :pointer], :int
623
+
624
+ # (Not documented)
625
+ #
626
+ # @method synth_unset_program(synth, chan)
627
+ # @param [FluidSynthT] synth
628
+ # @param [Integer] chan
629
+ # @return [Integer]
630
+ # @scope class
631
+ attach_function :synth_unset_program, :fluid_synth_unset_program, [FluidSynthT, :int], :int
632
+
633
+ # (Not documented)
634
+ #
635
+ # @method synth_get_channel_info(synth, chan, info)
636
+ # @param [FluidSynthT] synth
637
+ # @param [Integer] chan
638
+ # @param [FluidSynthChannelInfoT] info
639
+ # @return [Integer]
640
+ # @scope class
641
+ attach_function :synth_get_channel_info, :fluid_synth_get_channel_info, [FluidSynthT, :int, FluidSynthChannelInfoT], :int
642
+
643
+ # (Not documented)
644
+ #
645
+ # @method synth_program_reset(synth)
646
+ # @param [FluidSynthT] synth
647
+ # @return [Integer]
648
+ # @scope class
649
+ attach_function :synth_program_reset, :fluid_synth_program_reset, [FluidSynthT], :int
650
+
651
+ # (Not documented)
652
+ #
653
+ # @method synth_system_reset(synth)
654
+ # @param [FluidSynthT] synth
655
+ # @return [Integer]
656
+ # @scope class
657
+ attach_function :synth_system_reset, :fluid_synth_system_reset, [FluidSynthT], :int
658
+
659
+ # (Not documented)
660
+ #
661
+ # @method synth_all_notes_off(synth, chan)
662
+ # @param [FluidSynthT] synth
663
+ # @param [Integer] chan
664
+ # @return [Integer]
665
+ # @scope class
666
+ attach_function :synth_all_notes_off, :fluid_synth_all_notes_off, [FluidSynthT, :int], :int
667
+
668
+ # (Not documented)
669
+ #
670
+ # @method synth_all_sounds_off(synth, chan)
671
+ # @param [FluidSynthT] synth
672
+ # @param [Integer] chan
673
+ # @return [Integer]
674
+ # @scope class
675
+ attach_function :synth_all_sounds_off, :fluid_synth_all_sounds_off, [FluidSynthT, :int], :int
676
+
677
+ # (Not documented)
678
+ #
679
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:midi_channel_type).</em>
680
+ #
681
+ # === Options:
682
+ # :melodic ::
683
+ #
684
+ # :drum ::
685
+ #
686
+ #
687
+ # @method _enum_midi_channel_type_
688
+ # @return [Symbol]
689
+ # @scope class
690
+ enum :midi_channel_type, [
691
+ :melodic, 0,
692
+ :drum, 1
693
+ ]
694
+
695
+ # (Not documented)
696
+ #
697
+ # @method synth_set_channel_type(synth, chan, type)
698
+ # @param [FluidSynthT] synth
699
+ # @param [Integer] chan
700
+ # @param [Integer] type
701
+ # @return [Integer]
702
+ # @scope class
703
+ attach_function :synth_set_channel_type, :fluid_synth_set_channel_type, [FluidSynthT, :int, :int], :int
704
+
705
+ # Low level access
706
+ #
707
+ # @method synth_get_channel_preset(synth, chan)
708
+ # @param [FluidSynthT] synth
709
+ # @param [Integer] chan
710
+ # @return [FFI::Pointer(*PresetT)]
711
+ # @scope class
712
+ attach_function :synth_get_channel_preset, :fluid_synth_get_channel_preset, [FluidSynthT, :int], :pointer
713
+
714
+ # (Not documented)
715
+ #
716
+ # @method synth_start(synth, id, preset, audio_chan, midi_chan, key, vel)
717
+ # @param [FluidSynthT] synth
718
+ # @param [Integer] id
719
+ # @param [FFI::Pointer(*PresetT)] preset
720
+ # @param [Integer] audio_chan
721
+ # @param [Integer] midi_chan
722
+ # @param [Integer] key
723
+ # @param [Integer] vel
724
+ # @return [Integer]
725
+ # @scope class
726
+ attach_function :synth_start, :fluid_synth_start, [FluidSynthT, :uint, :pointer, :int, :int, :int, :int], :int
727
+
728
+ # (Not documented)
729
+ #
730
+ # @method synth_stop(synth, id)
731
+ # @param [FluidSynthT] synth
732
+ # @param [Integer] id
733
+ # @return [Integer]
734
+ # @scope class
735
+ attach_function :synth_stop, :fluid_synth_stop, [FluidSynthT, :uint], :int
736
+
737
+ # SoundFont management
738
+ #
739
+ # @method synth_sfload(synth, filename, reset_presets)
740
+ # @param [FluidSynthT] synth
741
+ # @param [String] filename
742
+ # @param [Integer] reset_presets
743
+ # @return [Integer]
744
+ # @scope class
745
+ attach_function :synth_sfload, :fluid_synth_sfload, [FluidSynthT, :string, :int], :int
746
+
747
+ # (Not documented)
748
+ #
749
+ # @method synth_sfreload(synth, id)
750
+ # @param [FluidSynthT] synth
751
+ # @param [Integer] id
752
+ # @return [Integer]
753
+ # @scope class
754
+ attach_function :synth_sfreload, :fluid_synth_sfreload, [FluidSynthT, :uint], :int
755
+
756
+ # (Not documented)
757
+ #
758
+ # @method synth_sfunload(synth, id, reset_presets)
759
+ # @param [FluidSynthT] synth
760
+ # @param [Integer] id
761
+ # @param [Integer] reset_presets
762
+ # @return [Integer]
763
+ # @scope class
764
+ attach_function :synth_sfunload, :fluid_synth_sfunload, [FluidSynthT, :uint, :int], :int
765
+
766
+ # (Not documented)
767
+ #
768
+ # @method synth_add_sfont(synth, sfont)
769
+ # @param [FluidSynthT] synth
770
+ # @param [FFI::Pointer(*SfontT)] sfont
771
+ # @return [Integer]
772
+ # @scope class
773
+ attach_function :synth_add_sfont, :fluid_synth_add_sfont, [FluidSynthT, :pointer], :int
774
+
775
+ # (Not documented)
776
+ #
777
+ # @method synth_remove_sfont(synth, sfont)
778
+ # @param [FluidSynthT] synth
779
+ # @param [FFI::Pointer(*SfontT)] sfont
780
+ # @return [nil]
781
+ # @scope class
782
+ attach_function :synth_remove_sfont, :fluid_synth_remove_sfont, [FluidSynthT, :pointer], :void
783
+
784
+ # (Not documented)
785
+ #
786
+ # @method synth_sfcount(synth)
787
+ # @param [FluidSynthT] synth
788
+ # @return [Integer]
789
+ # @scope class
790
+ attach_function :synth_sfcount, :fluid_synth_sfcount, [FluidSynthT], :int
791
+
792
+ # (Not documented)
793
+ #
794
+ # @method synth_get_sfont(synth, num)
795
+ # @param [FluidSynthT] synth
796
+ # @param [Integer] num
797
+ # @return [FFI::Pointer(*SfontT)]
798
+ # @scope class
799
+ attach_function :synth_get_sfont, :fluid_synth_get_sfont, [FluidSynthT, :uint], :pointer
800
+
801
+ # (Not documented)
802
+ #
803
+ # @method synth_get_sfont_by_id(synth, id)
804
+ # @param [FluidSynthT] synth
805
+ # @param [Integer] id
806
+ # @return [FFI::Pointer(*SfontT)]
807
+ # @scope class
808
+ attach_function :synth_get_sfont_by_id, :fluid_synth_get_sfont_by_id, [FluidSynthT, :uint], :pointer
809
+
810
+ # (Not documented)
811
+ #
812
+ # @method synth_get_sfont_by_name(synth, name)
813
+ # @param [FluidSynthT] synth
814
+ # @param [String] name
815
+ # @return [FFI::Pointer(*SfontT)]
816
+ # @scope class
817
+ attach_function :synth_get_sfont_by_name, :fluid_synth_get_sfont_by_name, [FluidSynthT, :string], :pointer
818
+
819
+ # (Not documented)
820
+ #
821
+ # @method synth_set_bank_offset(synth, sfont_id, offset)
822
+ # @param [FluidSynthT] synth
823
+ # @param [Integer] sfont_id
824
+ # @param [Integer] offset
825
+ # @return [Integer]
826
+ # @scope class
827
+ attach_function :synth_set_bank_offset, :fluid_synth_set_bank_offset, [FluidSynthT, :int, :int], :int
828
+
829
+ # (Not documented)
830
+ #
831
+ # @method synth_get_bank_offset(synth, sfont_id)
832
+ # @param [FluidSynthT] synth
833
+ # @param [Integer] sfont_id
834
+ # @return [Integer]
835
+ # @scope class
836
+ attach_function :synth_get_bank_offset, :fluid_synth_get_bank_offset, [FluidSynthT, :int], :int
837
+
838
+ # Reverb
839
+ #
840
+ # @method synth_set_reverb(synth, roomsize, damping, width, level)
841
+ # @param [FluidSynthT] synth
842
+ # @param [Float] roomsize
843
+ # @param [Float] damping
844
+ # @param [Float] width
845
+ # @param [Float] level
846
+ # @return [nil]
847
+ # @scope class
848
+ attach_function :synth_set_reverb, :fluid_synth_set_reverb, [FluidSynthT, :double, :double, :double, :double], :void
849
+
850
+ # (Not documented)
851
+ #
852
+ # @method synth_set_reverb_on(synth, on)
853
+ # @param [FluidSynthT] synth
854
+ # @param [Integer] on
855
+ # @return [nil]
856
+ # @scope class
857
+ attach_function :synth_set_reverb_on, :fluid_synth_set_reverb_on, [FluidSynthT, :int], :void
858
+
859
+ # (Not documented)
860
+ #
861
+ # @method synth_get_reverb_roomsize(synth)
862
+ # @param [FluidSynthT] synth
863
+ # @return [Float]
864
+ # @scope class
865
+ attach_function :synth_get_reverb_roomsize, :fluid_synth_get_reverb_roomsize, [FluidSynthT], :double
866
+
867
+ # (Not documented)
868
+ #
869
+ # @method synth_get_reverb_damp(synth)
870
+ # @param [FluidSynthT] synth
871
+ # @return [Float]
872
+ # @scope class
873
+ attach_function :synth_get_reverb_damp, :fluid_synth_get_reverb_damp, [FluidSynthT], :double
874
+
875
+ # (Not documented)
876
+ #
877
+ # @method synth_get_reverb_level(synth)
878
+ # @param [FluidSynthT] synth
879
+ # @return [Float]
880
+ # @scope class
881
+ attach_function :synth_get_reverb_level, :fluid_synth_get_reverb_level, [FluidSynthT], :double
882
+
883
+ # (Not documented)
884
+ #
885
+ # @method synth_get_reverb_width(synth)
886
+ # @param [FluidSynthT] synth
887
+ # @return [Float]
888
+ # @scope class
889
+ attach_function :synth_get_reverb_width, :fluid_synth_get_reverb_width, [FluidSynthT], :double
890
+
891
+ # Chorus modulation waveform type.
892
+ #
893
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:chorus_mod).</em>
894
+ #
895
+ # === Options:
896
+ # :sine ::
897
+ #
898
+ # :triangle ::
899
+ # < Sine wave chorus modulation
900
+ #
901
+ # @method _enum_chorus_mod_
902
+ # @return [Symbol]
903
+ # @scope class
904
+ enum :chorus_mod, [
905
+ :sine, 0,
906
+ :triangle, 1
907
+ ]
908
+
909
+ # < Triangle wave chorus modulation
910
+ #
911
+ # @method synth_set_chorus(synth, nr, level, speed, depth_ms, type)
912
+ # @param [FluidSynthT] synth
913
+ # @param [Integer] nr
914
+ # @param [Float] level
915
+ # @param [Float] speed
916
+ # @param [Float] depth_ms
917
+ # @param [Integer] type
918
+ # @return [nil]
919
+ # @scope class
920
+ attach_function :synth_set_chorus, :fluid_synth_set_chorus, [FluidSynthT, :int, :double, :double, :double, :int], :void
921
+
922
+ # (Not documented)
923
+ #
924
+ # @method synth_set_chorus_on(synth, on)
925
+ # @param [FluidSynthT] synth
926
+ # @param [Integer] on
927
+ # @return [nil]
928
+ # @scope class
929
+ attach_function :synth_set_chorus_on, :fluid_synth_set_chorus_on, [FluidSynthT, :int], :void
930
+
931
+ # (Not documented)
932
+ #
933
+ # @method synth_get_chorus_nr(synth)
934
+ # @param [FluidSynthT] synth
935
+ # @return [Integer]
936
+ # @scope class
937
+ attach_function :synth_get_chorus_nr, :fluid_synth_get_chorus_nr, [FluidSynthT], :int
938
+
939
+ # (Not documented)
940
+ #
941
+ # @method synth_get_chorus_level(synth)
942
+ # @param [FluidSynthT] synth
943
+ # @return [Float]
944
+ # @scope class
945
+ attach_function :synth_get_chorus_level, :fluid_synth_get_chorus_level, [FluidSynthT], :double
946
+
947
+ # (Not documented)
948
+ #
949
+ # @method synth_get_chorus_speed_hz(synth)
950
+ # @param [FluidSynthT] synth
951
+ # @return [Float]
952
+ # @scope class
953
+ attach_function :synth_get_chorus_speed_hz, :fluid_synth_get_chorus_speed_Hz, [FluidSynthT], :double
954
+
955
+ # (Not documented)
956
+ #
957
+ # @method synth_get_chorus_depth_ms(synth)
958
+ # @param [FluidSynthT] synth
959
+ # @return [Float]
960
+ # @scope class
961
+ attach_function :synth_get_chorus_depth_ms, :fluid_synth_get_chorus_depth_ms, [FluidSynthT], :double
962
+
963
+ # (Not documented)
964
+ #
965
+ # @method synth_get_chorus_type(synth)
966
+ # @param [FluidSynthT] synth
967
+ # @return [Integer]
968
+ # @scope class
969
+ attach_function :synth_get_chorus_type, :fluid_synth_get_chorus_type, [FluidSynthT], :int
970
+
971
+ # Audio and MIDI channels
972
+ #
973
+ # @method synth_count_midi_channels(synth)
974
+ # @param [FluidSynthT] synth
975
+ # @return [Integer]
976
+ # @scope class
977
+ attach_function :synth_count_midi_channels, :fluid_synth_count_midi_channels, [FluidSynthT], :int
978
+
979
+ # (Not documented)
980
+ #
981
+ # @method synth_count_audio_channels(synth)
982
+ # @param [FluidSynthT] synth
983
+ # @return [Integer]
984
+ # @scope class
985
+ attach_function :synth_count_audio_channels, :fluid_synth_count_audio_channels, [FluidSynthT], :int
986
+
987
+ # (Not documented)
988
+ #
989
+ # @method synth_count_audio_groups(synth)
990
+ # @param [FluidSynthT] synth
991
+ # @return [Integer]
992
+ # @scope class
993
+ attach_function :synth_count_audio_groups, :fluid_synth_count_audio_groups, [FluidSynthT], :int
994
+
995
+ # (Not documented)
996
+ #
997
+ # @method synth_count_effects_channels(synth)
998
+ # @param [FluidSynthT] synth
999
+ # @return [Integer]
1000
+ # @scope class
1001
+ attach_function :synth_count_effects_channels, :fluid_synth_count_effects_channels, [FluidSynthT], :int
1002
+
1003
+ # Synthesis parameters
1004
+ #
1005
+ # @method synth_set_sample_rate(synth, sample_rate)
1006
+ # @param [FluidSynthT] synth
1007
+ # @param [Float] sample_rate
1008
+ # @return [nil]
1009
+ # @scope class
1010
+ attach_function :synth_set_sample_rate, :fluid_synth_set_sample_rate, [FluidSynthT, :float], :void
1011
+
1012
+ # (Not documented)
1013
+ #
1014
+ # @method synth_set_gain(synth, gain)
1015
+ # @param [FluidSynthT] synth
1016
+ # @param [Float] gain
1017
+ # @return [nil]
1018
+ # @scope class
1019
+ attach_function :synth_set_gain, :fluid_synth_set_gain, [FluidSynthT, :float], :void
1020
+
1021
+ # (Not documented)
1022
+ #
1023
+ # @method synth_get_gain(synth)
1024
+ # @param [FluidSynthT] synth
1025
+ # @return [Float]
1026
+ # @scope class
1027
+ attach_function :synth_get_gain, :fluid_synth_get_gain, [FluidSynthT], :float
1028
+
1029
+ # (Not documented)
1030
+ #
1031
+ # @method synth_set_polyphony(synth, polyphony)
1032
+ # @param [FluidSynthT] synth
1033
+ # @param [Integer] polyphony
1034
+ # @return [Integer]
1035
+ # @scope class
1036
+ attach_function :synth_set_polyphony, :fluid_synth_set_polyphony, [FluidSynthT, :int], :int
1037
+
1038
+ # (Not documented)
1039
+ #
1040
+ # @method synth_get_polyphony(synth)
1041
+ # @param [FluidSynthT] synth
1042
+ # @return [Integer]
1043
+ # @scope class
1044
+ attach_function :synth_get_polyphony, :fluid_synth_get_polyphony, [FluidSynthT], :int
1045
+
1046
+ # (Not documented)
1047
+ #
1048
+ # @method synth_get_active_voice_count(synth)
1049
+ # @param [FluidSynthT] synth
1050
+ # @return [Integer]
1051
+ # @scope class
1052
+ attach_function :synth_get_active_voice_count, :fluid_synth_get_active_voice_count, [FluidSynthT], :int
1053
+
1054
+ # (Not documented)
1055
+ #
1056
+ # @method synth_get_internal_bufsize(synth)
1057
+ # @param [FluidSynthT] synth
1058
+ # @return [Integer]
1059
+ # @scope class
1060
+ attach_function :synth_get_internal_bufsize, :fluid_synth_get_internal_bufsize, [FluidSynthT], :int
1061
+
1062
+ # (Not documented)
1063
+ #
1064
+ # @method synth_set_interp_method(synth, chan, interp_method)
1065
+ # @param [FluidSynthT] synth
1066
+ # @param [Integer] chan
1067
+ # @param [Integer] interp_method
1068
+ # @return [Integer]
1069
+ # @scope class
1070
+ attach_function :synth_set_interp_method, :fluid_synth_set_interp_method, [FluidSynthT, :int, :int], :int
1071
+
1072
+ # Synthesis interpolation method.
1073
+ #
1074
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:interp).</em>
1075
+ #
1076
+ # === Options:
1077
+ # :none ::
1078
+ #
1079
+ # :linear ::
1080
+ # < No interpolation: Fastest, but questionable audio quality
1081
+ # :_4thorder ::
1082
+ # < Straight-line interpolation: A bit slower, reasonable audio quality
1083
+ # :_7thorder ::
1084
+ # < Fourth-order interpolation, good quality, the default
1085
+ #
1086
+ # @method _enum_interp_
1087
+ # @return [Symbol]
1088
+ # @scope class
1089
+ enum :interp, [
1090
+ :none, 0,
1091
+ :linear, 1,
1092
+ :_4thorder, 4,
1093
+ :_7thorder, 7
1094
+ ]
1095
+
1096
+ # Generator interface
1097
+ #
1098
+ # @method synth_set_gen(synth, chan, param, value)
1099
+ # @param [FluidSynthT] synth
1100
+ # @param [Integer] chan
1101
+ # @param [Integer] param
1102
+ # @param [Float] value
1103
+ # @return [Integer]
1104
+ # @scope class
1105
+ attach_function :synth_set_gen, :fluid_synth_set_gen, [FluidSynthT, :int, :int, :float], :int
1106
+
1107
+ # (Not documented)
1108
+ #
1109
+ # @method synth_set_gen2(synth, chan, param, value, absolute, normalized)
1110
+ # @param [FluidSynthT] synth
1111
+ # @param [Integer] chan
1112
+ # @param [Integer] param
1113
+ # @param [Float] value
1114
+ # @param [Integer] absolute
1115
+ # @param [Integer] normalized
1116
+ # @return [Integer]
1117
+ # @scope class
1118
+ attach_function :synth_set_gen2, :fluid_synth_set_gen2, [FluidSynthT, :int, :int, :float, :int, :int], :int
1119
+
1120
+ # (Not documented)
1121
+ #
1122
+ # @method synth_get_gen(synth, chan, param)
1123
+ # @param [FluidSynthT] synth
1124
+ # @param [Integer] chan
1125
+ # @param [Integer] param
1126
+ # @return [Float]
1127
+ # @scope class
1128
+ attach_function :synth_get_gen, :fluid_synth_get_gen, [FluidSynthT, :int, :int], :float
1129
+
1130
+ # Tuning
1131
+ #
1132
+ # @method synth_create_key_tuning(synth, bank, prog, name, pitch)
1133
+ # @param [FluidSynthT] synth
1134
+ # @param [Integer] bank
1135
+ # @param [Integer] prog
1136
+ # @param [String] name
1137
+ # @param [FFI::Pointer(*Double)] pitch
1138
+ # @return [Integer]
1139
+ # @scope class
1140
+ attach_function :synth_create_key_tuning, :fluid_synth_create_key_tuning, [FluidSynthT, :int, :int, :string, :pointer], :int
1141
+
1142
+ # (Not documented)
1143
+ #
1144
+ # @method synth_activate_key_tuning(synth, bank, prog, name, pitch, apply)
1145
+ # @param [FluidSynthT] synth
1146
+ # @param [Integer] bank
1147
+ # @param [Integer] prog
1148
+ # @param [String] name
1149
+ # @param [FFI::Pointer(*Double)] pitch
1150
+ # @param [Integer] apply
1151
+ # @return [Integer]
1152
+ # @scope class
1153
+ attach_function :synth_activate_key_tuning, :fluid_synth_activate_key_tuning, [FluidSynthT, :int, :int, :string, :pointer, :int], :int
1154
+
1155
+ # (Not documented)
1156
+ #
1157
+ # @method synth_create_octave_tuning(synth, bank, prog, name, pitch)
1158
+ # @param [FluidSynthT] synth
1159
+ # @param [Integer] bank
1160
+ # @param [Integer] prog
1161
+ # @param [String] name
1162
+ # @param [FFI::Pointer(*Double)] pitch
1163
+ # @return [Integer]
1164
+ # @scope class
1165
+ attach_function :synth_create_octave_tuning, :fluid_synth_create_octave_tuning, [FluidSynthT, :int, :int, :string, :pointer], :int
1166
+
1167
+ # (Not documented)
1168
+ #
1169
+ # @method synth_activate_octave_tuning(synth, bank, prog, name, pitch, apply)
1170
+ # @param [FluidSynthT] synth
1171
+ # @param [Integer] bank
1172
+ # @param [Integer] prog
1173
+ # @param [String] name
1174
+ # @param [FFI::Pointer(*Double)] pitch
1175
+ # @param [Integer] apply
1176
+ # @return [Integer]
1177
+ # @scope class
1178
+ attach_function :synth_activate_octave_tuning, :fluid_synth_activate_octave_tuning, [FluidSynthT, :int, :int, :string, :pointer, :int], :int
1179
+
1180
+ # (Not documented)
1181
+ #
1182
+ # @method synth_tune_notes(synth, bank, prog, len, keys, pitch, apply)
1183
+ # @param [FluidSynthT] synth
1184
+ # @param [Integer] bank
1185
+ # @param [Integer] prog
1186
+ # @param [Integer] len
1187
+ # @param [FFI::Pointer(*Int)] keys
1188
+ # @param [FFI::Pointer(*Double)] pitch
1189
+ # @param [Integer] apply
1190
+ # @return [Integer]
1191
+ # @scope class
1192
+ attach_function :synth_tune_notes, :fluid_synth_tune_notes, [FluidSynthT, :int, :int, :int, :pointer, :pointer, :int], :int
1193
+
1194
+ # (Not documented)
1195
+ #
1196
+ # @method synth_select_tuning(synth, chan, bank, prog)
1197
+ # @param [FluidSynthT] synth
1198
+ # @param [Integer] chan
1199
+ # @param [Integer] bank
1200
+ # @param [Integer] prog
1201
+ # @return [Integer]
1202
+ # @scope class
1203
+ attach_function :synth_select_tuning, :fluid_synth_select_tuning, [FluidSynthT, :int, :int, :int], :int
1204
+
1205
+ # (Not documented)
1206
+ #
1207
+ # @method synth_activate_tuning(synth, chan, bank, prog, apply)
1208
+ # @param [FluidSynthT] synth
1209
+ # @param [Integer] chan
1210
+ # @param [Integer] bank
1211
+ # @param [Integer] prog
1212
+ # @param [Integer] apply
1213
+ # @return [Integer]
1214
+ # @scope class
1215
+ attach_function :synth_activate_tuning, :fluid_synth_activate_tuning, [FluidSynthT, :int, :int, :int, :int], :int
1216
+
1217
+ # (Not documented)
1218
+ #
1219
+ # @method synth_reset_tuning(synth, chan)
1220
+ # @param [FluidSynthT] synth
1221
+ # @param [Integer] chan
1222
+ # @return [Integer]
1223
+ # @scope class
1224
+ attach_function :synth_reset_tuning, :fluid_synth_reset_tuning, [FluidSynthT, :int], :int
1225
+
1226
+ # (Not documented)
1227
+ #
1228
+ # @method synth_deactivate_tuning(synth, chan, apply)
1229
+ # @param [FluidSynthT] synth
1230
+ # @param [Integer] chan
1231
+ # @param [Integer] apply
1232
+ # @return [Integer]
1233
+ # @scope class
1234
+ attach_function :synth_deactivate_tuning, :fluid_synth_deactivate_tuning, [FluidSynthT, :int, :int], :int
1235
+
1236
+ # (Not documented)
1237
+ #
1238
+ # @method synth_tuning_iteration_start(synth)
1239
+ # @param [FluidSynthT] synth
1240
+ # @return [nil]
1241
+ # @scope class
1242
+ attach_function :synth_tuning_iteration_start, :fluid_synth_tuning_iteration_start, [FluidSynthT], :void
1243
+
1244
+ # (Not documented)
1245
+ #
1246
+ # @method synth_tuning_iteration_next(synth, bank, prog)
1247
+ # @param [FluidSynthT] synth
1248
+ # @param [FFI::Pointer(*Int)] bank
1249
+ # @param [FFI::Pointer(*Int)] prog
1250
+ # @return [Integer]
1251
+ # @scope class
1252
+ attach_function :synth_tuning_iteration_next, :fluid_synth_tuning_iteration_next, [FluidSynthT, :pointer, :pointer], :int
1253
+
1254
+ # (Not documented)
1255
+ #
1256
+ # @method synth_tuning_dump(synth, bank, prog, name, len, pitch)
1257
+ # @param [FluidSynthT] synth
1258
+ # @param [Integer] bank
1259
+ # @param [Integer] prog
1260
+ # @param [String] name
1261
+ # @param [Integer] len
1262
+ # @param [FFI::Pointer(*Double)] pitch
1263
+ # @return [Integer]
1264
+ # @scope class
1265
+ attach_function :synth_tuning_dump, :fluid_synth_tuning_dump, [FluidSynthT, :int, :int, :string, :int, :pointer], :int
1266
+
1267
+ # Misc
1268
+ #
1269
+ # @method synth_get_cpu_load(synth)
1270
+ # @param [FluidSynthT] synth
1271
+ # @return [Float]
1272
+ # @scope class
1273
+ attach_function :synth_get_cpu_load, :fluid_synth_get_cpu_load, [FluidSynthT], :double
1274
+
1275
+ # (Not documented)
1276
+ #
1277
+ # @method synth_error(synth)
1278
+ # @param [FluidSynthT] synth
1279
+ # @return [String]
1280
+ # @scope class
1281
+ attach_function :synth_error, :fluid_synth_error, [FluidSynthT], :string
1282
+
1283
+ # Synthesizer plugin
1284
+ #
1285
+ # To create a synthesizer plugin, create the synthesizer as
1286
+ # explained above. Once the synthesizer is created you can call
1287
+ # any of the functions below to get the audio.
1288
+ #
1289
+ # @method synth_write_s16(synth, len, lout, loff, lincr, rout, roff, rincr)
1290
+ # @param [FluidSynthT] synth
1291
+ # @param [Integer] len
1292
+ # @param [FFI::Pointer(*Void)] lout
1293
+ # @param [Integer] loff
1294
+ # @param [Integer] lincr
1295
+ # @param [FFI::Pointer(*Void)] rout
1296
+ # @param [Integer] roff
1297
+ # @param [Integer] rincr
1298
+ # @return [Integer]
1299
+ # @scope class
1300
+ attach_function :synth_write_s16, :fluid_synth_write_s16, [FluidSynthT, :int, :pointer, :int, :int, :pointer, :int, :int], :int
1301
+
1302
+ # (Not documented)
1303
+ #
1304
+ # @method synth_write_float(synth, len, lout, loff, lincr, rout, roff, rincr)
1305
+ # @param [FluidSynthT] synth
1306
+ # @param [Integer] len
1307
+ # @param [FFI::Pointer(*Void)] lout
1308
+ # @param [Integer] loff
1309
+ # @param [Integer] lincr
1310
+ # @param [FFI::Pointer(*Void)] rout
1311
+ # @param [Integer] roff
1312
+ # @param [Integer] rincr
1313
+ # @return [Integer]
1314
+ # @scope class
1315
+ attach_function :synth_write_float, :fluid_synth_write_float, [FluidSynthT, :int, :pointer, :int, :int, :pointer, :int, :int], :int
1316
+
1317
+ # (Not documented)
1318
+ #
1319
+ # @method synth_nwrite_float(synth, len, left, right, fx_left, fx_right)
1320
+ # @param [FluidSynthT] synth
1321
+ # @param [Integer] len
1322
+ # @param [FFI::Pointer(**Float)] left
1323
+ # @param [FFI::Pointer(**Float)] right
1324
+ # @param [FFI::Pointer(**Float)] fx_left
1325
+ # @param [FFI::Pointer(**Float)] fx_right
1326
+ # @return [Integer]
1327
+ # @scope class
1328
+ attach_function :synth_nwrite_float, :fluid_synth_nwrite_float, [FluidSynthT, :int, :pointer, :pointer, :pointer, :pointer], :int
1329
+
1330
+ # (Not documented)
1331
+ #
1332
+ # @method synth_process(synth, len, nin, in, nout, out)
1333
+ # @param [FluidSynthT] synth
1334
+ # @param [Integer] len
1335
+ # @param [Integer] nin
1336
+ # @param [FFI::Pointer(**Float)] in
1337
+ # @param [Integer] nout
1338
+ # @param [FFI::Pointer(**Float)] out
1339
+ # @return [Integer]
1340
+ # @scope class
1341
+ attach_function :synth_process, :fluid_synth_process, [FluidSynthT, :int, :int, :pointer, :int, :pointer], :int
1342
+
1343
+ # Type definition of the synthesizer's audio callback function.
1344
+ # @param synth FluidSynth instance
1345
+ # @param len Count of audio frames to synthesize
1346
+ # @param out1 Array to store left channel of audio to
1347
+ # @param loff Offset index in 'out1' for first sample
1348
+ # @param lincr Increment between samples stored to 'out1'
1349
+ # @param out2 Array to store right channel of audio to
1350
+ # @param roff Offset index in 'out2' for first sample
1351
+ # @param rincr Increment between samples stored to 'out2'
1352
+ #
1353
+ # <em>This entry is only for documentation and no real method.</em>
1354
+ #
1355
+ # @method _callback_audio_callback_t_(len, out1, loff, lincr, out2, roff, rincr)
1356
+ # @param [Integer] len
1357
+ # @param [FFI::Pointer(*Void)] out1
1358
+ # @param [Integer] loff
1359
+ # @param [Integer] lincr
1360
+ # @param [FFI::Pointer(*Void)] out2
1361
+ # @param [Integer] roff
1362
+ # @param [Integer] rincr
1363
+ # @return [FluidSynthT]
1364
+ # @scope class
1365
+ callback :audio_callback_t, [:int, :pointer, :int, :int, :pointer, :int, :int], FluidSynthT
1366
+
1367
+ # Synthesizer's interface to handle SoundFont loaders
1368
+ #
1369
+ # @method synth_add_sfloader(synth, loader)
1370
+ # @param [FluidSynthT] synth
1371
+ # @param [FFI::Pointer(*SfloaderT)] loader
1372
+ # @return [nil]
1373
+ # @scope class
1374
+ attach_function :synth_add_sfloader, :fluid_synth_add_sfloader, [FluidSynthT, :pointer], :void
1375
+
1376
+ # (Not documented)
1377
+ #
1378
+ # @method synth_alloc_voice(synth, sample, channum, key, vel)
1379
+ # @param [FluidSynthT] synth
1380
+ # @param [FFI::Pointer(*SampleT)] sample
1381
+ # @param [Integer] channum
1382
+ # @param [Integer] key
1383
+ # @param [Integer] vel
1384
+ # @return [FluidVoiceT]
1385
+ # @scope class
1386
+ attach_function :synth_alloc_voice, :fluid_synth_alloc_voice, [FluidSynthT, :pointer, :int, :int, :int], FluidVoiceT
1387
+
1388
+ # (Not documented)
1389
+ #
1390
+ # @method synth_start_voice(synth, voice)
1391
+ # @param [FluidSynthT] synth
1392
+ # @param [FluidVoiceT] voice
1393
+ # @return [nil]
1394
+ # @scope class
1395
+ attach_function :synth_start_voice, :fluid_synth_start_voice, [FluidSynthT, FluidVoiceT], :void
1396
+
1397
+ # (Not documented)
1398
+ #
1399
+ # @method synth_get_voicelist(synth, buf, bufsize, id)
1400
+ # @param [FluidSynthT] synth
1401
+ # @param [FFI::Pointer(**VoiceT)] buf
1402
+ # @param [Integer] bufsize
1403
+ # @param [Integer] id
1404
+ # @return [nil]
1405
+ # @scope class
1406
+ attach_function :synth_get_voicelist, :fluid_synth_get_voicelist, [FluidSynthT, :pointer, :int, :int], :void
1407
+
1408
+ # (Not documented)
1409
+ #
1410
+ # @method synth_handle_midi_event(data, event)
1411
+ # @param [FFI::Pointer(*Void)] data
1412
+ # @param [FluidMidiEventT] event
1413
+ # @return [Integer]
1414
+ # @scope class
1415
+ attach_function :synth_handle_midi_event, :fluid_synth_handle_midi_event, [:pointer, FluidMidiEventT], :int
1416
+
1417
+ # (Not documented)
1418
+ #
1419
+ # @method synth_set_midi_router(synth, router)
1420
+ # @param [FluidSynthT] synth
1421
+ # @param [FluidMidiRouterT] router
1422
+ # @return [nil]
1423
+ # @scope class
1424
+ attach_function :synth_set_midi_router, :fluid_synth_set_midi_router, [FluidSynthT, FluidMidiRouterT], :void
1425
+
1426
+ # < Synthesis voice instance
1427
+ #
1428
+ # = Fields:
1429
+ # :data ::
1430
+ # (FFI::Pointer(*Void)) < User defined data pointer
1431
+ # :free ::
1432
+ # (FFI::Pointer(*)) The free method should free the memory allocated for the loader in
1433
+ # addition to any private data.
1434
+ # @param loader SoundFont loader
1435
+ # @return Should return 0 if no error occured, non-zero otherwise
1436
+ # :load ::
1437
+ # (FFI::Pointer(*)) Method to load an instrument file (does not actually need to be a real file name,
1438
+ # could be another type of string identifier that the \a loader understands).
1439
+ # @param loader SoundFont loader
1440
+ # @param filename File name or other string identifier
1441
+ # @return The loaded instrument file (SoundFont) or NULL if an error occured.
1442
+ class FluidSfloaderT < FFI::Struct
1443
+ layout :data, :pointer,
1444
+ :free, :pointer,
1445
+ :load, :pointer
1446
+ end
1447
+
1448
+ # < SoundFont loader plugin
1449
+ #
1450
+ # = Fields:
1451
+ # :data ::
1452
+ # (FFI::Pointer(*Void)) < User defined data
1453
+ # :id ::
1454
+ # (Integer) < SoundFont ID
1455
+ # :free ::
1456
+ # (FFI::Pointer(*)) Method to free a virtual SoundFont bank.
1457
+ # @param sfont Virtual SoundFont to free.
1458
+ # @return Should return 0 when it was able to free all resources or non-zero
1459
+ # if some of the samples could not be freed because they are still in use,
1460
+ # in which case the free will be tried again later, until success.
1461
+ # :get_name ::
1462
+ # (FFI::Pointer(*)) Method to return the name of a virtual SoundFont.
1463
+ # @param sfont Virtual SoundFont
1464
+ # @return The name of the virtual SoundFont.
1465
+ # :get_preset ::
1466
+ # (FFI::Pointer(*)) Get a virtual SoundFont preset by bank and program numbers.
1467
+ # @param sfont Virtual SoundFont
1468
+ # @param bank MIDI bank number (0-16384)
1469
+ # @param prenum MIDI preset number (0-127)
1470
+ # @return Should return an allocated virtual preset or NULL if it could not
1471
+ # be found.
1472
+ # :iteration_start ::
1473
+ # (FFI::Pointer(*)) Start virtual SoundFont preset iteration method.
1474
+ # @param sfont Virtual SoundFont
1475
+ #
1476
+ # Starts/re-starts virtual preset iteration in a SoundFont.
1477
+ # :iteration_next ::
1478
+ # (FFI::Pointer(*)) Virtual SoundFont preset iteration function.
1479
+ # @param sfont Virtual SoundFont
1480
+ # @param preset Caller supplied preset to fill in with current preset information
1481
+ # @return 0 when no more presets are available, 1 otherwise
1482
+ #
1483
+ # Should store preset information to the caller supplied \a preset structure
1484
+ # and advance the internal iteration state to the next preset for subsequent
1485
+ # calls.
1486
+ class FluidSfontT < FFI::Struct
1487
+ layout :data, :pointer,
1488
+ :id, :uint,
1489
+ :free, :pointer,
1490
+ :get_name, :pointer,
1491
+ :get_preset, :pointer,
1492
+ :iteration_start, :pointer,
1493
+ :iteration_next, :pointer
1494
+ end
1495
+
1496
+ # < SoundFont
1497
+ #
1498
+ # = Fields:
1499
+ # :data ::
1500
+ # (FFI::Pointer(*Void)) < User supplied data
1501
+ # :sfont ::
1502
+ # (FluidSfontT) < Parent virtual SoundFont
1503
+ # :free ::
1504
+ # (FFI::Pointer(*)) Method to free a virtual SoundFont preset.
1505
+ # @param preset Virtual SoundFont preset
1506
+ # @return Should return 0
1507
+ # :get_name ::
1508
+ # (FFI::Pointer(*)) Method to get a virtual SoundFont preset name.
1509
+ # @param preset Virtual SoundFont preset
1510
+ # @return Should return the name of the preset. The returned string must be
1511
+ # valid for the duration of the virtual preset (or the duration of the
1512
+ # SoundFont, in the case of preset iteration).
1513
+ # :get_banknum ::
1514
+ # (FFI::Pointer(*)) Method to get a virtual SoundFont preset MIDI bank number.
1515
+ # @param preset Virtual SoundFont preset
1516
+ # @param return The bank number of the preset
1517
+ # :get_num ::
1518
+ # (FFI::Pointer(*)) Method to get a virtual SoundFont preset MIDI program number.
1519
+ # @param preset Virtual SoundFont preset
1520
+ # @param return The program number of the preset
1521
+ # :noteon ::
1522
+ # (FFI::Pointer(*)) Method to handle a noteon event (synthesize the instrument).
1523
+ # @param preset Virtual SoundFont preset
1524
+ # @param synth Synthesizer instance
1525
+ # @param chan MIDI channel number of the note on event
1526
+ # @param key MIDI note number (0-127)
1527
+ # @param vel MIDI velocity (0-127)
1528
+ # @return #FLUID_OK on success (0) or #FLUID_FAILED (-1) otherwise
1529
+ #
1530
+ # This method may be called from within synthesis context and therefore
1531
+ # should be as efficient as possible and not perform any operations considered
1532
+ # bad for realtime audio output (memory allocations and other OS calls).
1533
+ #
1534
+ # Call fluid_synth_alloc_voice() for every sample that has
1535
+ # to be played. fluid_synth_alloc_voice() expects a pointer to a
1536
+ # #fluid_sample_t structure and returns a pointer to the opaque
1537
+ # #fluid_voice_t structure. To set or increment the values of a
1538
+ # generator, use fluid_voice_gen_set() or fluid_voice_gen_incr(). When you are
1539
+ # finished initializing the voice call fluid_voice_start() to
1540
+ # start playing the synthesis voice. Starting with FluidSynth 1.1.0 all voices
1541
+ # created will be started at the same time.
1542
+ # :notify ::
1543
+ # (FFI::Pointer(*)) Virtual SoundFont preset notify method.
1544
+ # @param preset Virtual SoundFont preset
1545
+ # @param reason #FLUID_PRESET_SELECTED or #FLUID_PRESET_UNSELECTED
1546
+ # @param chan MIDI channel number
1547
+ # @return Should return #FLUID_OK
1548
+ #
1549
+ # Implement this optional method if the preset needs to be notified about
1550
+ # preset select and unselect events.
1551
+ #
1552
+ # This method may be called from within synthesis context and therefore
1553
+ # should be as efficient as possible and not perform any operations considered
1554
+ # bad for realtime audio output (memory allocations and other OS calls).
1555
+ class FluidPresetT < FFI::Struct
1556
+ layout :data, :pointer,
1557
+ :sfont, FluidSfontT,
1558
+ :free, :pointer,
1559
+ :get_name, :pointer,
1560
+ :get_banknum, :pointer,
1561
+ :get_num, :pointer,
1562
+ :noteon, :pointer,
1563
+ :notify, :pointer
1564
+ end
1565
+
1566
+ # < SoundFont preset
1567
+ #
1568
+ # = Fields:
1569
+ # :name ::
1570
+ # (Array<Integer>) < Sample name
1571
+ # :start ::
1572
+ # (Integer) < Start index
1573
+ # :end ::
1574
+ # (Integer) < End index, index of last valid sample point (contrary to SF spec)
1575
+ # :loopstart ::
1576
+ # (Integer) < Loop start index
1577
+ # :loopend ::
1578
+ # (Integer) < Loop end index, first point following the loop (superimposed on loopstart)
1579
+ # :samplerate ::
1580
+ # (Integer) < Sample rate
1581
+ # :origpitch ::
1582
+ # (Integer) < Original pitch (MIDI note number, 0-127)
1583
+ # :pitchadj ::
1584
+ # (Integer) < Fine pitch adjustment (+/- 99 cents)
1585
+ # :sampletype ::
1586
+ # (Integer) < Values: #FLUID_SAMPLETYPE_MONO, FLUID_SAMPLETYPE_RIGHT, FLUID_SAMPLETYPE_LEFT, FLUID_SAMPLETYPE_ROM
1587
+ # :valid ::
1588
+ # (Integer) < Should be TRUE if sample data is valid, FALSE otherwise (in which case it will not be synthesized)
1589
+ # :data ::
1590
+ # (FFI::Pointer(*Short)) < Pointer to the sample's data
1591
+ # :amplitude_that_reaches_noise_floor_is_valid ::
1592
+ # (Integer) < Indicates if \a amplitude_that_reaches_noise_floor is valid (TRUE), set to FALSE initially to calculate.
1593
+ # :amplitude_that_reaches_noise_floor ::
1594
+ # (Float) < The amplitude at which the sample's loop will be below the noise floor. For voice off optimization, calculated automatically.
1595
+ # :refcount ::
1596
+ # (Integer) < Count of voices using this sample (use #fluid_sample_refcount to access this field)
1597
+ # :notify ::
1598
+ # (FFI::Pointer(*)) Implement this function to receive notification when sample is no longer used.
1599
+ # @param sample Virtual SoundFont sample
1600
+ # @param reason #FLUID_SAMPLE_DONE only currently
1601
+ # @return Should return #FLUID_OK
1602
+ # :userdata ::
1603
+ # (FFI::Pointer(*Void)) < User defined data
1604
+ class FluidSampleT < FFI::Struct
1605
+ layout :name, [:char, 21],
1606
+ :start, :uint,
1607
+ :end, :uint,
1608
+ :loopstart, :uint,
1609
+ :loopend, :uint,
1610
+ :samplerate, :uint,
1611
+ :origpitch, :int,
1612
+ :pitchadj, :int,
1613
+ :sampletype, :int,
1614
+ :valid, :int,
1615
+ :data, :pointer,
1616
+ :amplitude_that_reaches_noise_floor_is_valid, :int,
1617
+ :amplitude_that_reaches_noise_floor, :double,
1618
+ :refcount, :uint,
1619
+ :notify, :pointer,
1620
+ :userdata, :pointer
1621
+ end
1622
+
1623
+ # (Not documented)
1624
+ #
1625
+ # <em>This entry is only for documentation and no real method.</em>
1626
+ #
1627
+ # @method _callback_audio_func_t_(len, nin, in, nout, out)
1628
+ # @param [Integer] len
1629
+ # @param [Integer] nin
1630
+ # @param [FFI::Pointer(**Float)] in
1631
+ # @param [Integer] nout
1632
+ # @param [FFI::Pointer(**Float)] out
1633
+ # @return [FFI::Pointer(*Void)]
1634
+ # @scope class
1635
+ callback :audio_func_t, [:int, :int, :pointer, :int, :pointer], :pointer
1636
+
1637
+ # (Not documented)
1638
+ #
1639
+ # @method new_fluid_audio_driver(settings, synth)
1640
+ # @param [FluidHashtableT] settings
1641
+ # @param [FluidSynthT] synth
1642
+ # @return [FluidAudioDriverT]
1643
+ # @scope class
1644
+ attach_function :new_fluid_audio_driver, :new_fluid_audio_driver, [FluidHashtableT, FluidSynthT], FluidAudioDriverT
1645
+
1646
+ # (Not documented)
1647
+ #
1648
+ # @method new_fluid_audio_driver2(settings, func, data)
1649
+ # @param [FluidHashtableT] settings
1650
+ # @param [Proc(_callback_audio_func_t_)] func
1651
+ # @param [FFI::Pointer(*Void)] data
1652
+ # @return [FluidAudioDriverT]
1653
+ # @scope class
1654
+ attach_function :new_fluid_audio_driver2, :new_fluid_audio_driver2, [FluidHashtableT, :audio_func_t, :pointer], FluidAudioDriverT
1655
+
1656
+ # (Not documented)
1657
+ #
1658
+ # @method delete_fluid_audio_driver(driver)
1659
+ # @param [FluidAudioDriverT] driver
1660
+ # @return [nil]
1661
+ # @scope class
1662
+ attach_function :delete_fluid_audio_driver, :delete_fluid_audio_driver, [FluidAudioDriverT], :void
1663
+
1664
+ # (Not documented)
1665
+ #
1666
+ # @method new_fluid_file_renderer(synth)
1667
+ # @param [FluidSynthT] synth
1668
+ # @return [FluidFileRendererT]
1669
+ # @scope class
1670
+ attach_function :new_fluid_file_renderer, :new_fluid_file_renderer, [FluidSynthT], FluidFileRendererT
1671
+
1672
+ # (Not documented)
1673
+ #
1674
+ # @method file_renderer_process_block(dev)
1675
+ # @param [FluidFileRendererT] dev
1676
+ # @return [Integer]
1677
+ # @scope class
1678
+ attach_function :file_renderer_process_block, :fluid_file_renderer_process_block, [FluidFileRendererT], :int
1679
+
1680
+ # (Not documented)
1681
+ #
1682
+ # @method delete_fluid_file_renderer(dev)
1683
+ # @param [FluidFileRendererT] dev
1684
+ # @return [nil]
1685
+ # @scope class
1686
+ attach_function :delete_fluid_file_renderer, :delete_fluid_file_renderer, [FluidFileRendererT], :void
1687
+
1688
+ # (Not documented)
1689
+ #
1690
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:seq_event_type).</em>
1691
+ #
1692
+ # === Options:
1693
+ # :note ::
1694
+ #
1695
+ # :noteon ::
1696
+ # < Note event with duration
1697
+ # :noteoff ::
1698
+ # < Note on event
1699
+ # :allsoundsoff ::
1700
+ # < Note off event
1701
+ # :allnotesoff ::
1702
+ # < All sounds off event
1703
+ # :bankselect ::
1704
+ # < All notes off event
1705
+ # :programchange ::
1706
+ # < Bank select message
1707
+ # :programselect ::
1708
+ # < Program change message
1709
+ # :pitchbend ::
1710
+ # < Program select message (DOCME)
1711
+ # :pitchwheelsens ::
1712
+ # < Pitch bend message
1713
+ # :modulation ::
1714
+ # < Pitch wheel sensitivity set message @since 1.1.0 was mispelled previously
1715
+ # :sustain ::
1716
+ # < Modulation controller event
1717
+ # :controlchange ::
1718
+ # < Sustain controller event
1719
+ # :pan ::
1720
+ # < MIDI control change event
1721
+ # :volume ::
1722
+ # < Stereo pan set event
1723
+ # :reverbsend ::
1724
+ # < Volume set event
1725
+ # :chorussend ::
1726
+ # < Reverb send set event
1727
+ # :timer ::
1728
+ # < Chorus send set event
1729
+ # :anycontrolchange ::
1730
+ # < Timer event (DOCME)
1731
+ # :channelpressure ::
1732
+ # < DOCME (used for remove_events only)
1733
+ # :systemreset ::
1734
+ # < Channel aftertouch event @since 1.1.0
1735
+ # :unregistering ::
1736
+ # < System reset event @since 1.1.0
1737
+ # :lastevent ::
1738
+ # < Called when a sequencer client is being unregistered. @since 1.1.0
1739
+ #
1740
+ # @method _enum_seq_event_type_
1741
+ # @return [Symbol]
1742
+ # @scope class
1743
+ enum :seq_event_type, [
1744
+ :note, 0,
1745
+ :noteon,
1746
+ :noteoff,
1747
+ :allsoundsoff,
1748
+ :allnotesoff,
1749
+ :bankselect,
1750
+ :programchange,
1751
+ :programselect,
1752
+ :pitchbend,
1753
+ :pitchwheelsens,
1754
+ :modulation,
1755
+ :sustain,
1756
+ :controlchange,
1757
+ :pan,
1758
+ :volume,
1759
+ :reverbsend,
1760
+ :chorussend,
1761
+ :timer,
1762
+ :anycontrolchange,
1763
+ :channelpressure,
1764
+ :systemreset,
1765
+ :unregistering,
1766
+ :lastevent
1767
+ ]
1768
+
1769
+ # (Not documented)
1770
+ #
1771
+ # @method new_fluid_event()
1772
+ # @return [FluidEventT]
1773
+ # @scope class
1774
+ attach_function :new_fluid_event, :new_fluid_event, [], FluidEventT
1775
+
1776
+ # (Not documented)
1777
+ #
1778
+ # @method delete_fluid_event(evt)
1779
+ # @param [FluidEventT] evt
1780
+ # @return [nil]
1781
+ # @scope class
1782
+ attach_function :delete_fluid_event, :delete_fluid_event, [FluidEventT], :void
1783
+
1784
+ # Initializing events
1785
+ #
1786
+ # @method event_set_source(evt, src)
1787
+ # @param [FluidEventT] evt
1788
+ # @param [Integer] src
1789
+ # @return [nil]
1790
+ # @scope class
1791
+ attach_function :event_set_source, :fluid_event_set_source, [FluidEventT, :short], :void
1792
+
1793
+ # (Not documented)
1794
+ #
1795
+ # @method event_set_dest(evt, dest)
1796
+ # @param [FluidEventT] evt
1797
+ # @param [Integer] dest
1798
+ # @return [nil]
1799
+ # @scope class
1800
+ attach_function :event_set_dest, :fluid_event_set_dest, [FluidEventT, :short], :void
1801
+
1802
+ # Timer events
1803
+ #
1804
+ # @method event_timer(evt, data)
1805
+ # @param [FluidEventT] evt
1806
+ # @param [FFI::Pointer(*Void)] data
1807
+ # @return [nil]
1808
+ # @scope class
1809
+ attach_function :event_timer, :fluid_event_timer, [FluidEventT, :pointer], :void
1810
+
1811
+ # Note events
1812
+ #
1813
+ # @method event_note(evt, channel, key, vel, duration)
1814
+ # @param [FluidEventT] evt
1815
+ # @param [Integer] channel
1816
+ # @param [Integer] key
1817
+ # @param [Integer] vel
1818
+ # @param [Integer] duration
1819
+ # @return [nil]
1820
+ # @scope class
1821
+ attach_function :event_note, :fluid_event_note, [FluidEventT, :int, :short, :short, :uint], :void
1822
+
1823
+ # (Not documented)
1824
+ #
1825
+ # @method event_noteon(evt, channel, key, vel)
1826
+ # @param [FluidEventT] evt
1827
+ # @param [Integer] channel
1828
+ # @param [Integer] key
1829
+ # @param [Integer] vel
1830
+ # @return [nil]
1831
+ # @scope class
1832
+ attach_function :event_noteon, :fluid_event_noteon, [FluidEventT, :int, :short, :short], :void
1833
+
1834
+ # (Not documented)
1835
+ #
1836
+ # @method event_noteoff(evt, channel, key)
1837
+ # @param [FluidEventT] evt
1838
+ # @param [Integer] channel
1839
+ # @param [Integer] key
1840
+ # @return [nil]
1841
+ # @scope class
1842
+ attach_function :event_noteoff, :fluid_event_noteoff, [FluidEventT, :int, :short], :void
1843
+
1844
+ # (Not documented)
1845
+ #
1846
+ # @method event_all_sounds_off(evt, channel)
1847
+ # @param [FluidEventT] evt
1848
+ # @param [Integer] channel
1849
+ # @return [nil]
1850
+ # @scope class
1851
+ attach_function :event_all_sounds_off, :fluid_event_all_sounds_off, [FluidEventT, :int], :void
1852
+
1853
+ # (Not documented)
1854
+ #
1855
+ # @method event_all_notes_off(evt, channel)
1856
+ # @param [FluidEventT] evt
1857
+ # @param [Integer] channel
1858
+ # @return [nil]
1859
+ # @scope class
1860
+ attach_function :event_all_notes_off, :fluid_event_all_notes_off, [FluidEventT, :int], :void
1861
+
1862
+ # Instrument selection
1863
+ #
1864
+ # @method event_bank_select(evt, channel, bank_num)
1865
+ # @param [FluidEventT] evt
1866
+ # @param [Integer] channel
1867
+ # @param [Integer] bank_num
1868
+ # @return [nil]
1869
+ # @scope class
1870
+ attach_function :event_bank_select, :fluid_event_bank_select, [FluidEventT, :int, :short], :void
1871
+
1872
+ # (Not documented)
1873
+ #
1874
+ # @method event_program_change(evt, channel, preset_num)
1875
+ # @param [FluidEventT] evt
1876
+ # @param [Integer] channel
1877
+ # @param [Integer] preset_num
1878
+ # @return [nil]
1879
+ # @scope class
1880
+ attach_function :event_program_change, :fluid_event_program_change, [FluidEventT, :int, :short], :void
1881
+
1882
+ # (Not documented)
1883
+ #
1884
+ # @method event_program_select(evt, channel, sfont_id, bank_num, preset_num)
1885
+ # @param [FluidEventT] evt
1886
+ # @param [Integer] channel
1887
+ # @param [Integer] sfont_id
1888
+ # @param [Integer] bank_num
1889
+ # @param [Integer] preset_num
1890
+ # @return [nil]
1891
+ # @scope class
1892
+ attach_function :event_program_select, :fluid_event_program_select, [FluidEventT, :int, :uint, :short, :short], :void
1893
+
1894
+ # Real-time generic instrument controllers
1895
+ #
1896
+ # @method event_control_change(evt, channel, control, val)
1897
+ # @param [FluidEventT] evt
1898
+ # @param [Integer] channel
1899
+ # @param [Integer] control
1900
+ # @param [Integer] val
1901
+ # @return [nil]
1902
+ # @scope class
1903
+ attach_function :event_control_change, :fluid_event_control_change, [FluidEventT, :int, :short, :short], :void
1904
+
1905
+ # Real-time instrument controllers shortcuts
1906
+ #
1907
+ # @method event_pitch_bend(evt, channel, val)
1908
+ # @param [FluidEventT] evt
1909
+ # @param [Integer] channel
1910
+ # @param [Integer] val
1911
+ # @return [nil]
1912
+ # @scope class
1913
+ attach_function :event_pitch_bend, :fluid_event_pitch_bend, [FluidEventT, :int, :int], :void
1914
+
1915
+ # (Not documented)
1916
+ #
1917
+ # @method event_pitch_wheelsens(evt, channel, val)
1918
+ # @param [FluidEventT] evt
1919
+ # @param [Integer] channel
1920
+ # @param [Integer] val
1921
+ # @return [nil]
1922
+ # @scope class
1923
+ attach_function :event_pitch_wheelsens, :fluid_event_pitch_wheelsens, [FluidEventT, :int, :short], :void
1924
+
1925
+ # (Not documented)
1926
+ #
1927
+ # @method event_modulation(evt, channel, val)
1928
+ # @param [FluidEventT] evt
1929
+ # @param [Integer] channel
1930
+ # @param [Integer] val
1931
+ # @return [nil]
1932
+ # @scope class
1933
+ attach_function :event_modulation, :fluid_event_modulation, [FluidEventT, :int, :short], :void
1934
+
1935
+ # (Not documented)
1936
+ #
1937
+ # @method event_sustain(evt, channel, val)
1938
+ # @param [FluidEventT] evt
1939
+ # @param [Integer] channel
1940
+ # @param [Integer] val
1941
+ # @return [nil]
1942
+ # @scope class
1943
+ attach_function :event_sustain, :fluid_event_sustain, [FluidEventT, :int, :short], :void
1944
+
1945
+ # (Not documented)
1946
+ #
1947
+ # @method event_pan(evt, channel, val)
1948
+ # @param [FluidEventT] evt
1949
+ # @param [Integer] channel
1950
+ # @param [Integer] val
1951
+ # @return [nil]
1952
+ # @scope class
1953
+ attach_function :event_pan, :fluid_event_pan, [FluidEventT, :int, :short], :void
1954
+
1955
+ # (Not documented)
1956
+ #
1957
+ # @method event_volume(evt, channel, val)
1958
+ # @param [FluidEventT] evt
1959
+ # @param [Integer] channel
1960
+ # @param [Integer] val
1961
+ # @return [nil]
1962
+ # @scope class
1963
+ attach_function :event_volume, :fluid_event_volume, [FluidEventT, :int, :short], :void
1964
+
1965
+ # (Not documented)
1966
+ #
1967
+ # @method event_reverb_send(evt, channel, val)
1968
+ # @param [FluidEventT] evt
1969
+ # @param [Integer] channel
1970
+ # @param [Integer] val
1971
+ # @return [nil]
1972
+ # @scope class
1973
+ attach_function :event_reverb_send, :fluid_event_reverb_send, [FluidEventT, :int, :short], :void
1974
+
1975
+ # (Not documented)
1976
+ #
1977
+ # @method event_chorus_send(evt, channel, val)
1978
+ # @param [FluidEventT] evt
1979
+ # @param [Integer] channel
1980
+ # @param [Integer] val
1981
+ # @return [nil]
1982
+ # @scope class
1983
+ attach_function :event_chorus_send, :fluid_event_chorus_send, [FluidEventT, :int, :short], :void
1984
+
1985
+ # (Not documented)
1986
+ #
1987
+ # @method event_channel_pressure(evt, channel, val)
1988
+ # @param [FluidEventT] evt
1989
+ # @param [Integer] channel
1990
+ # @param [Integer] val
1991
+ # @return [nil]
1992
+ # @scope class
1993
+ attach_function :event_channel_pressure, :fluid_event_channel_pressure, [FluidEventT, :int, :short], :void
1994
+
1995
+ # (Not documented)
1996
+ #
1997
+ # @method event_system_reset(evt)
1998
+ # @param [FluidEventT] evt
1999
+ # @return [nil]
2000
+ # @scope class
2001
+ attach_function :event_system_reset, :fluid_event_system_reset, [FluidEventT], :void
2002
+
2003
+ # Only for removing events
2004
+ #
2005
+ # @method event_any_control_change(evt, channel)
2006
+ # @param [FluidEventT] evt
2007
+ # @param [Integer] channel
2008
+ # @return [nil]
2009
+ # @scope class
2010
+ attach_function :event_any_control_change, :fluid_event_any_control_change, [FluidEventT, :int], :void
2011
+
2012
+ # Only when unregistering clients
2013
+ #
2014
+ # @method event_unregistering(evt)
2015
+ # @param [FluidEventT] evt
2016
+ # @return [nil]
2017
+ # @scope class
2018
+ attach_function :event_unregistering, :fluid_event_unregistering, [FluidEventT], :void
2019
+
2020
+ # Accessing event data
2021
+ #
2022
+ # @method event_get_type(evt)
2023
+ # @param [FluidEventT] evt
2024
+ # @return [Integer]
2025
+ # @scope class
2026
+ attach_function :event_get_type, :fluid_event_get_type, [FluidEventT], :int
2027
+
2028
+ # (Not documented)
2029
+ #
2030
+ # @method event_get_source(evt)
2031
+ # @param [FluidEventT] evt
2032
+ # @return [Integer]
2033
+ # @scope class
2034
+ attach_function :event_get_source, :fluid_event_get_source, [FluidEventT], :short
2035
+
2036
+ # (Not documented)
2037
+ #
2038
+ # @method event_get_dest(evt)
2039
+ # @param [FluidEventT] evt
2040
+ # @return [Integer]
2041
+ # @scope class
2042
+ attach_function :event_get_dest, :fluid_event_get_dest, [FluidEventT], :short
2043
+
2044
+ # (Not documented)
2045
+ #
2046
+ # @method event_get_channel(evt)
2047
+ # @param [FluidEventT] evt
2048
+ # @return [Integer]
2049
+ # @scope class
2050
+ attach_function :event_get_channel, :fluid_event_get_channel, [FluidEventT], :int
2051
+
2052
+ # (Not documented)
2053
+ #
2054
+ # @method event_get_key(evt)
2055
+ # @param [FluidEventT] evt
2056
+ # @return [Integer]
2057
+ # @scope class
2058
+ attach_function :event_get_key, :fluid_event_get_key, [FluidEventT], :short
2059
+
2060
+ # (Not documented)
2061
+ #
2062
+ # @method event_get_velocity(evt)
2063
+ # @param [FluidEventT] evt
2064
+ # @return [Integer]
2065
+ # @scope class
2066
+ attach_function :event_get_velocity, :fluid_event_get_velocity, [FluidEventT], :short
2067
+
2068
+ # (Not documented)
2069
+ #
2070
+ # @method event_get_control(evt)
2071
+ # @param [FluidEventT] evt
2072
+ # @return [Integer]
2073
+ # @scope class
2074
+ attach_function :event_get_control, :fluid_event_get_control, [FluidEventT], :short
2075
+
2076
+ # (Not documented)
2077
+ #
2078
+ # @method event_get_value(evt)
2079
+ # @param [FluidEventT] evt
2080
+ # @return [Integer]
2081
+ # @scope class
2082
+ attach_function :event_get_value, :fluid_event_get_value, [FluidEventT], :short
2083
+
2084
+ # (Not documented)
2085
+ #
2086
+ # @method event_get_program(evt)
2087
+ # @param [FluidEventT] evt
2088
+ # @return [Integer]
2089
+ # @scope class
2090
+ attach_function :event_get_program, :fluid_event_get_program, [FluidEventT], :short
2091
+
2092
+ # (Not documented)
2093
+ #
2094
+ # @method event_get_data(evt)
2095
+ # @param [FluidEventT] evt
2096
+ # @return [FFI::Pointer(*Void)]
2097
+ # @scope class
2098
+ attach_function :event_get_data, :fluid_event_get_data, [FluidEventT], :pointer
2099
+
2100
+ # (Not documented)
2101
+ #
2102
+ # @method event_get_duration(evt)
2103
+ # @param [FluidEventT] evt
2104
+ # @return [Integer]
2105
+ # @scope class
2106
+ attach_function :event_get_duration, :fluid_event_get_duration, [FluidEventT], :uint
2107
+
2108
+ # (Not documented)
2109
+ #
2110
+ # @method event_get_bank(evt)
2111
+ # @param [FluidEventT] evt
2112
+ # @return [Integer]
2113
+ # @scope class
2114
+ attach_function :event_get_bank, :fluid_event_get_bank, [FluidEventT], :short
2115
+
2116
+ # (Not documented)
2117
+ #
2118
+ # @method event_get_pitch(evt)
2119
+ # @param [FluidEventT] evt
2120
+ # @return [Integer]
2121
+ # @scope class
2122
+ attach_function :event_get_pitch, :fluid_event_get_pitch, [FluidEventT], :int
2123
+
2124
+ # (Not documented)
2125
+ #
2126
+ # @method event_get_sfont_id(evt)
2127
+ # @param [FluidEventT] evt
2128
+ # @return [Integer]
2129
+ # @scope class
2130
+ attach_function :event_get_sfont_id, :fluid_event_get_sfont_id, [FluidEventT], :uint
2131
+
2132
+ # (Not documented)
2133
+ #
2134
+ # @method new_fluid_midi_event()
2135
+ # @return [FluidMidiEventT]
2136
+ # @scope class
2137
+ attach_function :new_fluid_midi_event, :new_fluid_midi_event, [], FluidMidiEventT
2138
+
2139
+ # (Not documented)
2140
+ #
2141
+ # @method delete_fluid_midi_event(event)
2142
+ # @param [FluidMidiEventT] event
2143
+ # @return [Integer]
2144
+ # @scope class
2145
+ attach_function :delete_fluid_midi_event, :delete_fluid_midi_event, [FluidMidiEventT], :int
2146
+
2147
+ # (Not documented)
2148
+ #
2149
+ # @method midi_event_set_type(evt, type)
2150
+ # @param [FluidMidiEventT] evt
2151
+ # @param [Integer] type
2152
+ # @return [Integer]
2153
+ # @scope class
2154
+ attach_function :midi_event_set_type, :fluid_midi_event_set_type, [FluidMidiEventT, :int], :int
2155
+
2156
+ # (Not documented)
2157
+ #
2158
+ # @method midi_event_get_type(evt)
2159
+ # @param [FluidMidiEventT] evt
2160
+ # @return [Integer]
2161
+ # @scope class
2162
+ attach_function :midi_event_get_type, :fluid_midi_event_get_type, [FluidMidiEventT], :int
2163
+
2164
+ # (Not documented)
2165
+ #
2166
+ # @method midi_event_set_channel(evt, chan)
2167
+ # @param [FluidMidiEventT] evt
2168
+ # @param [Integer] chan
2169
+ # @return [Integer]
2170
+ # @scope class
2171
+ attach_function :midi_event_set_channel, :fluid_midi_event_set_channel, [FluidMidiEventT, :int], :int
2172
+
2173
+ # (Not documented)
2174
+ #
2175
+ # @method midi_event_get_channel(evt)
2176
+ # @param [FluidMidiEventT] evt
2177
+ # @return [Integer]
2178
+ # @scope class
2179
+ attach_function :midi_event_get_channel, :fluid_midi_event_get_channel, [FluidMidiEventT], :int
2180
+
2181
+ # (Not documented)
2182
+ #
2183
+ # @method midi_event_get_key(evt)
2184
+ # @param [FluidMidiEventT] evt
2185
+ # @return [Integer]
2186
+ # @scope class
2187
+ attach_function :midi_event_get_key, :fluid_midi_event_get_key, [FluidMidiEventT], :int
2188
+
2189
+ # (Not documented)
2190
+ #
2191
+ # @method midi_event_set_key(evt, key)
2192
+ # @param [FluidMidiEventT] evt
2193
+ # @param [Integer] key
2194
+ # @return [Integer]
2195
+ # @scope class
2196
+ attach_function :midi_event_set_key, :fluid_midi_event_set_key, [FluidMidiEventT, :int], :int
2197
+
2198
+ # (Not documented)
2199
+ #
2200
+ # @method midi_event_get_velocity(evt)
2201
+ # @param [FluidMidiEventT] evt
2202
+ # @return [Integer]
2203
+ # @scope class
2204
+ attach_function :midi_event_get_velocity, :fluid_midi_event_get_velocity, [FluidMidiEventT], :int
2205
+
2206
+ # (Not documented)
2207
+ #
2208
+ # @method midi_event_set_velocity(evt, vel)
2209
+ # @param [FluidMidiEventT] evt
2210
+ # @param [Integer] vel
2211
+ # @return [Integer]
2212
+ # @scope class
2213
+ attach_function :midi_event_set_velocity, :fluid_midi_event_set_velocity, [FluidMidiEventT, :int], :int
2214
+
2215
+ # (Not documented)
2216
+ #
2217
+ # @method midi_event_get_control(evt)
2218
+ # @param [FluidMidiEventT] evt
2219
+ # @return [Integer]
2220
+ # @scope class
2221
+ attach_function :midi_event_get_control, :fluid_midi_event_get_control, [FluidMidiEventT], :int
2222
+
2223
+ # (Not documented)
2224
+ #
2225
+ # @method midi_event_set_control(evt, ctrl)
2226
+ # @param [FluidMidiEventT] evt
2227
+ # @param [Integer] ctrl
2228
+ # @return [Integer]
2229
+ # @scope class
2230
+ attach_function :midi_event_set_control, :fluid_midi_event_set_control, [FluidMidiEventT, :int], :int
2231
+
2232
+ # (Not documented)
2233
+ #
2234
+ # @method midi_event_get_value(evt)
2235
+ # @param [FluidMidiEventT] evt
2236
+ # @return [Integer]
2237
+ # @scope class
2238
+ attach_function :midi_event_get_value, :fluid_midi_event_get_value, [FluidMidiEventT], :int
2239
+
2240
+ # (Not documented)
2241
+ #
2242
+ # @method midi_event_set_value(evt, val)
2243
+ # @param [FluidMidiEventT] evt
2244
+ # @param [Integer] val
2245
+ # @return [Integer]
2246
+ # @scope class
2247
+ attach_function :midi_event_set_value, :fluid_midi_event_set_value, [FluidMidiEventT, :int], :int
2248
+
2249
+ # (Not documented)
2250
+ #
2251
+ # @method midi_event_get_program(evt)
2252
+ # @param [FluidMidiEventT] evt
2253
+ # @return [Integer]
2254
+ # @scope class
2255
+ attach_function :midi_event_get_program, :fluid_midi_event_get_program, [FluidMidiEventT], :int
2256
+
2257
+ # (Not documented)
2258
+ #
2259
+ # @method midi_event_set_program(evt, val)
2260
+ # @param [FluidMidiEventT] evt
2261
+ # @param [Integer] val
2262
+ # @return [Integer]
2263
+ # @scope class
2264
+ attach_function :midi_event_set_program, :fluid_midi_event_set_program, [FluidMidiEventT, :int], :int
2265
+
2266
+ # (Not documented)
2267
+ #
2268
+ # @method midi_event_get_pitch(evt)
2269
+ # @param [FluidMidiEventT] evt
2270
+ # @return [Integer]
2271
+ # @scope class
2272
+ attach_function :midi_event_get_pitch, :fluid_midi_event_get_pitch, [FluidMidiEventT], :int
2273
+
2274
+ # (Not documented)
2275
+ #
2276
+ # @method midi_event_set_pitch(evt, val)
2277
+ # @param [FluidMidiEventT] evt
2278
+ # @param [Integer] val
2279
+ # @return [Integer]
2280
+ # @scope class
2281
+ attach_function :midi_event_set_pitch, :fluid_midi_event_set_pitch, [FluidMidiEventT, :int], :int
2282
+
2283
+ # (Not documented)
2284
+ #
2285
+ # @method midi_event_set_sysex(evt, data, size, dynamic)
2286
+ # @param [FluidMidiEventT] evt
2287
+ # @param [FFI::Pointer(*Void)] data
2288
+ # @param [Integer] size
2289
+ # @param [Integer] dynamic
2290
+ # @return [Integer]
2291
+ # @scope class
2292
+ attach_function :midi_event_set_sysex, :fluid_midi_event_set_sysex, [FluidMidiEventT, :pointer, :int, :int], :int
2293
+
2294
+ # MIDI router rule type.
2295
+ # @since 1.1.0
2296
+ #
2297
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:midi_router_rule_type).</em>
2298
+ #
2299
+ # === Options:
2300
+ # :note ::
2301
+ #
2302
+ # :cc ::
2303
+ # < MIDI note rule
2304
+ # :prog_change ::
2305
+ # < MIDI controller rule
2306
+ # :pitch_bend ::
2307
+ # < MIDI program change rule
2308
+ # :channel_pressure ::
2309
+ # < MIDI pitch bend rule
2310
+ # :key_pressure ::
2311
+ # < MIDI channel pressure rule
2312
+ # :count ::
2313
+ # < MIDI key pressure rule
2314
+ #
2315
+ # @method _enum_midi_router_rule_type_
2316
+ # @return [Symbol]
2317
+ # @scope class
2318
+ enum :midi_router_rule_type, [
2319
+ :note,
2320
+ :cc,
2321
+ :prog_change,
2322
+ :pitch_bend,
2323
+ :channel_pressure,
2324
+ :key_pressure,
2325
+ :count
2326
+ ]
2327
+
2328
+ # Generic callback function for MIDI events.
2329
+ # @param data User defined data pointer
2330
+ # @param event The MIDI event
2331
+ # @return Should return #FLUID_OK on success, #FLUID_FAILED otherwise
2332
+ #
2333
+ # Will be used between
2334
+ # - MIDI driver and MIDI router
2335
+ # - MIDI router and synth
2336
+ # to communicate events.
2337
+ # In the not-so-far future...
2338
+ #
2339
+ # <em>This entry is only for documentation and no real method.</em>
2340
+ #
2341
+ # @method _callback_handle_midi_event_func_t_(event)
2342
+ # @param [FluidMidiEventT] event
2343
+ # @return [FFI::Pointer(*Void)]
2344
+ # @scope class
2345
+ callback :handle_midi_event_func_t, [FluidMidiEventT], :pointer
2346
+
2347
+ # (Not documented)
2348
+ #
2349
+ # @method new_fluid_midi_router(settings, handler, event_handler_data)
2350
+ # @param [FluidHashtableT] settings
2351
+ # @param [Proc(_callback_handle_midi_event_func_t_)] handler
2352
+ # @param [FFI::Pointer(*Void)] event_handler_data
2353
+ # @return [FluidMidiRouterT]
2354
+ # @scope class
2355
+ attach_function :new_fluid_midi_router, :new_fluid_midi_router, [FluidHashtableT, :handle_midi_event_func_t, :pointer], FluidMidiRouterT
2356
+
2357
+ # (Not documented)
2358
+ #
2359
+ # @method delete_fluid_midi_router(handler)
2360
+ # @param [FluidMidiRouterT] handler
2361
+ # @return [Integer]
2362
+ # @scope class
2363
+ attach_function :delete_fluid_midi_router, :delete_fluid_midi_router, [FluidMidiRouterT], :int
2364
+
2365
+ # (Not documented)
2366
+ #
2367
+ # @method midi_router_set_default_rules(router)
2368
+ # @param [FluidMidiRouterT] router
2369
+ # @return [Integer]
2370
+ # @scope class
2371
+ attach_function :midi_router_set_default_rules, :fluid_midi_router_set_default_rules, [FluidMidiRouterT], :int
2372
+
2373
+ # (Not documented)
2374
+ #
2375
+ # @method midi_router_clear_rules(router)
2376
+ # @param [FluidMidiRouterT] router
2377
+ # @return [Integer]
2378
+ # @scope class
2379
+ attach_function :midi_router_clear_rules, :fluid_midi_router_clear_rules, [FluidMidiRouterT], :int
2380
+
2381
+ # (Not documented)
2382
+ #
2383
+ # @method midi_router_add_rule(router, rule, type)
2384
+ # @param [FluidMidiRouterT] router
2385
+ # @param [FluidMidiRouterRuleT] rule
2386
+ # @param [Integer] type
2387
+ # @return [Integer]
2388
+ # @scope class
2389
+ attach_function :midi_router_add_rule, :fluid_midi_router_add_rule, [FluidMidiRouterT, FluidMidiRouterRuleT, :int], :int
2390
+
2391
+ # (Not documented)
2392
+ #
2393
+ # @method new_fluid_midi_router_rule()
2394
+ # @return [FluidMidiRouterRuleT]
2395
+ # @scope class
2396
+ attach_function :new_fluid_midi_router_rule, :new_fluid_midi_router_rule, [], FluidMidiRouterRuleT
2397
+
2398
+ # (Not documented)
2399
+ #
2400
+ # @method delete_fluid_midi_router_rule(rule)
2401
+ # @param [FluidMidiRouterRuleT] rule
2402
+ # @return [nil]
2403
+ # @scope class
2404
+ attach_function :delete_fluid_midi_router_rule, :delete_fluid_midi_router_rule, [FluidMidiRouterRuleT], :void
2405
+
2406
+ # (Not documented)
2407
+ #
2408
+ # @method midi_router_rule_set_chan(rule, min, max, mul, add)
2409
+ # @param [FluidMidiRouterRuleT] rule
2410
+ # @param [Integer] min
2411
+ # @param [Integer] max
2412
+ # @param [Float] mul
2413
+ # @param [Integer] add
2414
+ # @return [nil]
2415
+ # @scope class
2416
+ attach_function :midi_router_rule_set_chan, :fluid_midi_router_rule_set_chan, [FluidMidiRouterRuleT, :int, :int, :float, :int], :void
2417
+
2418
+ # (Not documented)
2419
+ #
2420
+ # @method midi_router_rule_set_param1(rule, min, max, mul, add)
2421
+ # @param [FluidMidiRouterRuleT] rule
2422
+ # @param [Integer] min
2423
+ # @param [Integer] max
2424
+ # @param [Float] mul
2425
+ # @param [Integer] add
2426
+ # @return [nil]
2427
+ # @scope class
2428
+ attach_function :midi_router_rule_set_param1, :fluid_midi_router_rule_set_param1, [FluidMidiRouterRuleT, :int, :int, :float, :int], :void
2429
+
2430
+ # (Not documented)
2431
+ #
2432
+ # @method midi_router_rule_set_param2(rule, min, max, mul, add)
2433
+ # @param [FluidMidiRouterRuleT] rule
2434
+ # @param [Integer] min
2435
+ # @param [Integer] max
2436
+ # @param [Float] mul
2437
+ # @param [Integer] add
2438
+ # @return [nil]
2439
+ # @scope class
2440
+ attach_function :midi_router_rule_set_param2, :fluid_midi_router_rule_set_param2, [FluidMidiRouterRuleT, :int, :int, :float, :int], :void
2441
+
2442
+ # (Not documented)
2443
+ #
2444
+ # @method midi_router_handle_midi_event(data, event)
2445
+ # @param [FFI::Pointer(*Void)] data
2446
+ # @param [FluidMidiEventT] event
2447
+ # @return [Integer]
2448
+ # @scope class
2449
+ attach_function :midi_router_handle_midi_event, :fluid_midi_router_handle_midi_event, [:pointer, FluidMidiEventT], :int
2450
+
2451
+ # (Not documented)
2452
+ #
2453
+ # @method midi_dump_prerouter(data, event)
2454
+ # @param [FFI::Pointer(*Void)] data
2455
+ # @param [FluidMidiEventT] event
2456
+ # @return [Integer]
2457
+ # @scope class
2458
+ attach_function :midi_dump_prerouter, :fluid_midi_dump_prerouter, [:pointer, FluidMidiEventT], :int
2459
+
2460
+ # (Not documented)
2461
+ #
2462
+ # @method midi_dump_postrouter(data, event)
2463
+ # @param [FFI::Pointer(*Void)] data
2464
+ # @param [FluidMidiEventT] event
2465
+ # @return [Integer]
2466
+ # @scope class
2467
+ attach_function :midi_dump_postrouter, :fluid_midi_dump_postrouter, [:pointer, FluidMidiEventT], :int
2468
+
2469
+ # (Not documented)
2470
+ #
2471
+ # @method new_fluid_midi_driver(settings, handler, event_handler_data)
2472
+ # @param [FluidHashtableT] settings
2473
+ # @param [Proc(_callback_handle_midi_event_func_t_)] handler
2474
+ # @param [FFI::Pointer(*Void)] event_handler_data
2475
+ # @return [FluidMidiDriverT]
2476
+ # @scope class
2477
+ attach_function :new_fluid_midi_driver, :new_fluid_midi_driver, [FluidHashtableT, :handle_midi_event_func_t, :pointer], FluidMidiDriverT
2478
+
2479
+ # (Not documented)
2480
+ #
2481
+ # @method delete_fluid_midi_driver(driver)
2482
+ # @param [FluidMidiDriverT] driver
2483
+ # @return [nil]
2484
+ # @scope class
2485
+ attach_function :delete_fluid_midi_driver, :delete_fluid_midi_driver, [FluidMidiDriverT], :void
2486
+
2487
+ # MIDI player status enum.
2488
+ # @since 1.1.0
2489
+ #
2490
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:player_status).</em>
2491
+ #
2492
+ # === Options:
2493
+ # :ready ::
2494
+ #
2495
+ # :playing ::
2496
+ # < Player is ready
2497
+ # :done ::
2498
+ # < Player is currently playing
2499
+ #
2500
+ # @method _enum_player_status_
2501
+ # @return [Symbol]
2502
+ # @scope class
2503
+ enum :player_status, [
2504
+ :ready,
2505
+ :playing,
2506
+ :done
2507
+ ]
2508
+
2509
+ # < Player is finished playing
2510
+ #
2511
+ # @method new_fluid_player(synth)
2512
+ # @param [FluidSynthT] synth
2513
+ # @return [FluidPlayerT]
2514
+ # @scope class
2515
+ attach_function :new_fluid_player, :new_fluid_player, [FluidSynthT], FluidPlayerT
2516
+
2517
+ # (Not documented)
2518
+ #
2519
+ # @method delete_fluid_player(player)
2520
+ # @param [FluidPlayerT] player
2521
+ # @return [Integer]
2522
+ # @scope class
2523
+ attach_function :delete_fluid_player, :delete_fluid_player, [FluidPlayerT], :int
2524
+
2525
+ # (Not documented)
2526
+ #
2527
+ # @method player_add(player, midifile)
2528
+ # @param [FluidPlayerT] player
2529
+ # @param [String] midifile
2530
+ # @return [Integer]
2531
+ # @scope class
2532
+ attach_function :player_add, :fluid_player_add, [FluidPlayerT, :string], :int
2533
+
2534
+ # (Not documented)
2535
+ #
2536
+ # @method player_add_mem(player, buffer, len)
2537
+ # @param [FluidPlayerT] player
2538
+ # @param [FFI::Pointer(*Void)] buffer
2539
+ # @param [Integer] len
2540
+ # @return [Integer]
2541
+ # @scope class
2542
+ attach_function :player_add_mem, :fluid_player_add_mem, [FluidPlayerT, :pointer, :ulong], :int
2543
+
2544
+ # (Not documented)
2545
+ #
2546
+ # @method player_play(player)
2547
+ # @param [FluidPlayerT] player
2548
+ # @return [Integer]
2549
+ # @scope class
2550
+ attach_function :player_play, :fluid_player_play, [FluidPlayerT], :int
2551
+
2552
+ # (Not documented)
2553
+ #
2554
+ # @method player_stop(player)
2555
+ # @param [FluidPlayerT] player
2556
+ # @return [Integer]
2557
+ # @scope class
2558
+ attach_function :player_stop, :fluid_player_stop, [FluidPlayerT], :int
2559
+
2560
+ # (Not documented)
2561
+ #
2562
+ # @method player_join(player)
2563
+ # @param [FluidPlayerT] player
2564
+ # @return [Integer]
2565
+ # @scope class
2566
+ attach_function :player_join, :fluid_player_join, [FluidPlayerT], :int
2567
+
2568
+ # (Not documented)
2569
+ #
2570
+ # @method player_set_loop(player, loop)
2571
+ # @param [FluidPlayerT] player
2572
+ # @param [Integer] loop
2573
+ # @return [Integer]
2574
+ # @scope class
2575
+ attach_function :player_set_loop, :fluid_player_set_loop, [FluidPlayerT, :int], :int
2576
+
2577
+ # (Not documented)
2578
+ #
2579
+ # @method player_set_midi_tempo(player, tempo)
2580
+ # @param [FluidPlayerT] player
2581
+ # @param [Integer] tempo
2582
+ # @return [Integer]
2583
+ # @scope class
2584
+ attach_function :player_set_midi_tempo, :fluid_player_set_midi_tempo, [FluidPlayerT, :int], :int
2585
+
2586
+ # (Not documented)
2587
+ #
2588
+ # @method player_set_bpm(player, bpm)
2589
+ # @param [FluidPlayerT] player
2590
+ # @param [Integer] bpm
2591
+ # @return [Integer]
2592
+ # @scope class
2593
+ attach_function :player_set_bpm, :fluid_player_set_bpm, [FluidPlayerT, :int], :int
2594
+
2595
+ # (Not documented)
2596
+ #
2597
+ # @method player_get_status(player)
2598
+ # @param [FluidPlayerT] player
2599
+ # @return [Integer]
2600
+ # @scope class
2601
+ attach_function :player_get_status, :fluid_player_get_status, [FluidPlayerT], :int
2602
+
2603
+ # (Not documented)
2604
+ #
2605
+ # @method player_set_playback_callback(player, handler, handler_data)
2606
+ # @param [FluidPlayerT] player
2607
+ # @param [Proc(_callback_handle_midi_event_func_t_)] handler
2608
+ # @param [FFI::Pointer(*Void)] handler_data
2609
+ # @return [Integer]
2610
+ # @scope class
2611
+ attach_function :player_set_playback_callback, :fluid_player_set_playback_callback, [FluidPlayerT, :handle_midi_event_func_t, :pointer], :int
2612
+
2613
+ # (Not documented)
2614
+ #
2615
+ # <em>This entry is only for documentation and no real method.</em>
2616
+ #
2617
+ # @method _callback_event_callback_t_(event, seq, data)
2618
+ # @param [FluidEventT] event
2619
+ # @param [FluidSequencerT] seq
2620
+ # @param [FFI::Pointer(*Void)] data
2621
+ # @return [Integer]
2622
+ # @scope class
2623
+ callback :event_callback_t, [FluidEventT, FluidSequencerT, :pointer], :uint
2624
+
2625
+ # (Not documented)
2626
+ #
2627
+ # @method new_fluid_sequencer()
2628
+ # @return [FluidSequencerT]
2629
+ # @scope class
2630
+ attach_function :new_fluid_sequencer, :new_fluid_sequencer, [], FluidSequencerT
2631
+
2632
+ # (Not documented)
2633
+ #
2634
+ # @method new_fluid_sequencer2(use_system_timer)
2635
+ # @param [Integer] use_system_timer
2636
+ # @return [FluidSequencerT]
2637
+ # @scope class
2638
+ attach_function :new_fluid_sequencer2, :new_fluid_sequencer2, [:int], FluidSequencerT
2639
+
2640
+ # (Not documented)
2641
+ #
2642
+ # @method delete_fluid_sequencer(seq)
2643
+ # @param [FluidSequencerT] seq
2644
+ # @return [nil]
2645
+ # @scope class
2646
+ attach_function :delete_fluid_sequencer, :delete_fluid_sequencer, [FluidSequencerT], :void
2647
+
2648
+ # (Not documented)
2649
+ #
2650
+ # @method sequencer_get_use_system_timer(seq)
2651
+ # @param [FluidSequencerT] seq
2652
+ # @return [Integer]
2653
+ # @scope class
2654
+ attach_function :sequencer_get_use_system_timer, :fluid_sequencer_get_use_system_timer, [FluidSequencerT], :int
2655
+
2656
+ # (Not documented)
2657
+ #
2658
+ # @method sequencer_register_client(seq, name, callback, data)
2659
+ # @param [FluidSequencerT] seq
2660
+ # @param [String] name
2661
+ # @param [Proc(_callback_event_callback_t_)] callback
2662
+ # @param [FFI::Pointer(*Void)] data
2663
+ # @return [Integer]
2664
+ # @scope class
2665
+ attach_function :sequencer_register_client, :fluid_sequencer_register_client, [FluidSequencerT, :string, :event_callback_t, :pointer], :short
2666
+
2667
+ # (Not documented)
2668
+ #
2669
+ # @method sequencer_unregister_client(seq, id)
2670
+ # @param [FluidSequencerT] seq
2671
+ # @param [Integer] id
2672
+ # @return [nil]
2673
+ # @scope class
2674
+ attach_function :sequencer_unregister_client, :fluid_sequencer_unregister_client, [FluidSequencerT, :short], :void
2675
+
2676
+ # (Not documented)
2677
+ #
2678
+ # @method sequencer_count_clients(seq)
2679
+ # @param [FluidSequencerT] seq
2680
+ # @return [Integer]
2681
+ # @scope class
2682
+ attach_function :sequencer_count_clients, :fluid_sequencer_count_clients, [FluidSequencerT], :int
2683
+
2684
+ # (Not documented)
2685
+ #
2686
+ # @method sequencer_get_client_id(seq, index)
2687
+ # @param [FluidSequencerT] seq
2688
+ # @param [Integer] index
2689
+ # @return [Integer]
2690
+ # @scope class
2691
+ attach_function :sequencer_get_client_id, :fluid_sequencer_get_client_id, [FluidSequencerT, :int], :short
2692
+
2693
+ # (Not documented)
2694
+ #
2695
+ # @method sequencer_get_client_name(seq, id)
2696
+ # @param [FluidSequencerT] seq
2697
+ # @param [Integer] id
2698
+ # @return [String]
2699
+ # @scope class
2700
+ attach_function :sequencer_get_client_name, :fluid_sequencer_get_client_name, [FluidSequencerT, :int], :string
2701
+
2702
+ # (Not documented)
2703
+ #
2704
+ # @method sequencer_client_is_dest(seq, id)
2705
+ # @param [FluidSequencerT] seq
2706
+ # @param [Integer] id
2707
+ # @return [Integer]
2708
+ # @scope class
2709
+ attach_function :sequencer_client_is_dest, :fluid_sequencer_client_is_dest, [FluidSequencerT, :int], :int
2710
+
2711
+ # (Not documented)
2712
+ #
2713
+ # @method sequencer_process(seq, msec)
2714
+ # @param [FluidSequencerT] seq
2715
+ # @param [Integer] msec
2716
+ # @return [nil]
2717
+ # @scope class
2718
+ attach_function :sequencer_process, :fluid_sequencer_process, [FluidSequencerT, :uint], :void
2719
+
2720
+ # (Not documented)
2721
+ #
2722
+ # @method sequencer_send_now(seq, evt)
2723
+ # @param [FluidSequencerT] seq
2724
+ # @param [FluidEventT] evt
2725
+ # @return [nil]
2726
+ # @scope class
2727
+ attach_function :sequencer_send_now, :fluid_sequencer_send_now, [FluidSequencerT, FluidEventT], :void
2728
+
2729
+ # (Not documented)
2730
+ #
2731
+ # @method sequencer_send_at(seq, evt, time, absolute)
2732
+ # @param [FluidSequencerT] seq
2733
+ # @param [FluidEventT] evt
2734
+ # @param [Integer] time
2735
+ # @param [Integer] absolute
2736
+ # @return [Integer]
2737
+ # @scope class
2738
+ attach_function :sequencer_send_at, :fluid_sequencer_send_at, [FluidSequencerT, FluidEventT, :uint, :int], :int
2739
+
2740
+ # (Not documented)
2741
+ #
2742
+ # @method sequencer_remove_events(seq, source, dest, type)
2743
+ # @param [FluidSequencerT] seq
2744
+ # @param [Integer] source
2745
+ # @param [Integer] dest
2746
+ # @param [Integer] type
2747
+ # @return [nil]
2748
+ # @scope class
2749
+ attach_function :sequencer_remove_events, :fluid_sequencer_remove_events, [FluidSequencerT, :short, :short, :int], :void
2750
+
2751
+ # (Not documented)
2752
+ #
2753
+ # @method sequencer_get_tick(seq)
2754
+ # @param [FluidSequencerT] seq
2755
+ # @return [Integer]
2756
+ # @scope class
2757
+ attach_function :sequencer_get_tick, :fluid_sequencer_get_tick, [FluidSequencerT], :uint
2758
+
2759
+ # (Not documented)
2760
+ #
2761
+ # @method sequencer_set_time_scale(seq, scale)
2762
+ # @param [FluidSequencerT] seq
2763
+ # @param [Float] scale
2764
+ # @return [nil]
2765
+ # @scope class
2766
+ attach_function :sequencer_set_time_scale, :fluid_sequencer_set_time_scale, [FluidSequencerT, :double], :void
2767
+
2768
+ # (Not documented)
2769
+ #
2770
+ # @method sequencer_get_time_scale(seq)
2771
+ # @param [FluidSequencerT] seq
2772
+ # @return [Float]
2773
+ # @scope class
2774
+ attach_function :sequencer_get_time_scale, :fluid_sequencer_get_time_scale, [FluidSequencerT], :double
2775
+
2776
+ # (Not documented)
2777
+ #
2778
+ # @method sequencer_register_fluidsynth(seq, synth)
2779
+ # @param [FluidSequencerT] seq
2780
+ # @param [FluidSynthT] synth
2781
+ # @return [Integer]
2782
+ # @scope class
2783
+ attach_function :sequencer_register_fluidsynth, :fluid_sequencer_register_fluidsynth, [FluidSequencerT, FluidSynthT], :short
2784
+
2785
+ # (Not documented)
2786
+ #
2787
+ # @method sequencer_add_midi_event_to_buffer(data, event)
2788
+ # @param [FFI::Pointer(*Void)] data
2789
+ # @param [FluidMidiEventT] event
2790
+ # @return [Integer]
2791
+ # @scope class
2792
+ attach_function :sequencer_add_midi_event_to_buffer, :fluid_sequencer_add_midi_event_to_buffer, [:pointer, FluidMidiEventT], :int
2793
+
2794
+ # (Not documented)
2795
+ #
2796
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:log_level).</em>
2797
+ #
2798
+ # === Options:
2799
+ # :fluid_panic ::
2800
+ #
2801
+ # :fluid_err ::
2802
+ # < The synth can't function correctly any more
2803
+ # :fluid_warn ::
2804
+ # < Serious error occurred
2805
+ # :fluid_info ::
2806
+ # < Warning
2807
+ # :fluid_dbg ::
2808
+ # < Verbose informational messages
2809
+ # :last_log_level ::
2810
+ # < Debugging messages
2811
+ #
2812
+ # @method _enum_log_level_
2813
+ # @return [Symbol]
2814
+ # @scope class
2815
+ enum :log_level, [
2816
+ :fluid_panic,
2817
+ :fluid_err,
2818
+ :fluid_warn,
2819
+ :fluid_info,
2820
+ :fluid_dbg,
2821
+ :last_log_level
2822
+ ]
2823
+
2824
+ # (Not documented)
2825
+ #
2826
+ # <em>This entry is only for documentation and no real method.</em>
2827
+ #
2828
+ # @method _callback_log_function_t_(message, data)
2829
+ # @param [String] message
2830
+ # @param [FFI::Pointer(*Void)] data
2831
+ # @return [Integer]
2832
+ # @scope class
2833
+ callback :log_function_t, [:string, :pointer], :int
2834
+
2835
+ # (Not documented)
2836
+ #
2837
+ # @method set_log_function(level, fun, data)
2838
+ # @param [Integer] level
2839
+ # @param [Proc(_callback_log_function_t_)] fun
2840
+ # @param [FFI::Pointer(*Void)] data
2841
+ # @return [Proc(_callback_log_function_t_)]
2842
+ # @scope class
2843
+ attach_function :set_log_function, :fluid_set_log_function, [:int, :log_function_t, :pointer], :log_function_t
2844
+
2845
+ # (Not documented)
2846
+ #
2847
+ # @method default_log_function(level, message, data)
2848
+ # @param [Integer] level
2849
+ # @param [String] message
2850
+ # @param [FFI::Pointer(*Void)] data
2851
+ # @return [nil]
2852
+ # @scope class
2853
+ attach_function :default_log_function, :fluid_default_log_function, [:int, :string, :pointer], :void
2854
+
2855
+ # (Not documented)
2856
+ #
2857
+ # @method log(level, fmt)
2858
+ # @param [Integer] level
2859
+ # @param [String] fmt
2860
+ # @return [Integer]
2861
+ # @scope class
2862
+ attach_function :log, :fluid_log, [:int, :string], :int
2863
+
2864
+ # (Not documented)
2865
+ #
2866
+ # @method is_soundfont(filename)
2867
+ # @param [String] filename
2868
+ # @return [Integer]
2869
+ # @scope class
2870
+ attach_function :is_soundfont, :fluid_is_soundfont, [:string], :int
2871
+
2872
+ # (Not documented)
2873
+ #
2874
+ # @method is_midifile(filename)
2875
+ # @param [String] filename
2876
+ # @return [Integer]
2877
+ # @scope class
2878
+ attach_function :is_midifile, :fluid_is_midifile, [:string], :int
2879
+
2880
+ # < SoundFont sample
2881
+ #
2882
+ # = Fields:
2883
+ # :dest ::
2884
+ # (Integer) < Destination generator to control
2885
+ # :src1 ::
2886
+ # (Integer) < Source controller 1
2887
+ # :flags1 ::
2888
+ # (Integer) < Source controller 1 flags
2889
+ # :src2 ::
2890
+ # (Integer) < Source controller 2
2891
+ # :flags2 ::
2892
+ # (Integer) < Source controller 2 flags
2893
+ # :amount ::
2894
+ # (Float) < Multiplier amount
2895
+ # :next ::
2896
+ # (FFI::Pointer(*ModT)) The 'next' field allows to link modulators into a list. It is
2897
+ # not used in fluid_voice.c, there each voice allocates memory for a
2898
+ # fixed number of modulators. Since there may be a huge number of
2899
+ # different zones, this is more efficient.
2900
+ class FluidModT < FFI::Struct
2901
+ layout :dest, :uchar,
2902
+ :src1, :uchar,
2903
+ :flags1, :uchar,
2904
+ :src2, :uchar,
2905
+ :flags2, :uchar,
2906
+ :amount, :double,
2907
+ :next, :pointer
2908
+ end
2909
+
2910
+ # (Not documented)
2911
+ #
2912
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:mod_flags).</em>
2913
+ #
2914
+ # === Options:
2915
+ # :positive ::
2916
+ #
2917
+ # :negative ::
2918
+ # < Mapping function is positive
2919
+ # :unipolar ::
2920
+ # < Mapping function is negative
2921
+ # :bipolar ::
2922
+ # < Mapping function is unipolar
2923
+ # :linear ::
2924
+ # < Mapping function is bipolar
2925
+ # :concave ::
2926
+ # < Linear mapping function
2927
+ # :convex ::
2928
+ # < Concave mapping function
2929
+ # :switch ::
2930
+ # < Convex mapping function
2931
+ # :gc ::
2932
+ # < Switch (on/off) mapping function
2933
+ # :cc ::
2934
+ # < General controller source type (#fluid_mod_src)
2935
+ #
2936
+ # @method _enum_mod_flags_
2937
+ # @return [Symbol]
2938
+ # @scope class
2939
+ enum :mod_flags, [
2940
+ :positive, 0,
2941
+ :negative, 1,
2942
+ :unipolar, 0,
2943
+ :bipolar, 2,
2944
+ :linear, 0,
2945
+ :concave, 4,
2946
+ :convex, 8,
2947
+ :switch, 12,
2948
+ :gc, 0,
2949
+ :cc, 16
2950
+ ]
2951
+
2952
+ # (Not documented)
2953
+ #
2954
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:mod_src).</em>
2955
+ #
2956
+ # === Options:
2957
+ # :none ::
2958
+ #
2959
+ # :velocity ::
2960
+ # < No source controller
2961
+ # :key ::
2962
+ # < MIDI note-on velocity
2963
+ # :keypressure ::
2964
+ # < MIDI note-on note number
2965
+ # :channelpressure ::
2966
+ # < MIDI key pressure
2967
+ # :pitchwheel ::
2968
+ # < MIDI channel pressure
2969
+ # :pitchwheelsens ::
2970
+ # < Pitch wheel
2971
+ #
2972
+ # @method _enum_mod_src_
2973
+ # @return [Symbol]
2974
+ # @scope class
2975
+ enum :mod_src, [
2976
+ :none, 0,
2977
+ :velocity, 2,
2978
+ :key, 3,
2979
+ :keypressure, 10,
2980
+ :channelpressure, 13,
2981
+ :pitchwheel, 14,
2982
+ :pitchwheelsens, 16
2983
+ ]
2984
+
2985
+ # (Not documented)
2986
+ #
2987
+ # @method mod_new()
2988
+ # @return [FluidModT]
2989
+ # @scope class
2990
+ attach_function :mod_new, :fluid_mod_new, [], FluidModT
2991
+
2992
+ # (Not documented)
2993
+ #
2994
+ # @method mod_delete(mod)
2995
+ # @param [FluidModT] mod
2996
+ # @return [nil]
2997
+ # @scope class
2998
+ attach_function :mod_delete, :fluid_mod_delete, [FluidModT], :void
2999
+
3000
+ # (Not documented)
3001
+ #
3002
+ # @method mod_set_source1(mod, src, flags)
3003
+ # @param [FluidModT] mod
3004
+ # @param [Integer] src
3005
+ # @param [Integer] flags
3006
+ # @return [nil]
3007
+ # @scope class
3008
+ attach_function :mod_set_source1, :fluid_mod_set_source1, [FluidModT, :int, :int], :void
3009
+
3010
+ # (Not documented)
3011
+ #
3012
+ # @method mod_set_source2(mod, src, flags)
3013
+ # @param [FluidModT] mod
3014
+ # @param [Integer] src
3015
+ # @param [Integer] flags
3016
+ # @return [nil]
3017
+ # @scope class
3018
+ attach_function :mod_set_source2, :fluid_mod_set_source2, [FluidModT, :int, :int], :void
3019
+
3020
+ # (Not documented)
3021
+ #
3022
+ # @method mod_set_dest(mod, dst)
3023
+ # @param [FluidModT] mod
3024
+ # @param [Integer] dst
3025
+ # @return [nil]
3026
+ # @scope class
3027
+ attach_function :mod_set_dest, :fluid_mod_set_dest, [FluidModT, :int], :void
3028
+
3029
+ # (Not documented)
3030
+ #
3031
+ # @method mod_set_amount(mod, amount)
3032
+ # @param [FluidModT] mod
3033
+ # @param [Float] amount
3034
+ # @return [nil]
3035
+ # @scope class
3036
+ attach_function :mod_set_amount, :fluid_mod_set_amount, [FluidModT, :double], :void
3037
+
3038
+ # (Not documented)
3039
+ #
3040
+ # @method mod_get_source1(mod)
3041
+ # @param [FluidModT] mod
3042
+ # @return [Integer]
3043
+ # @scope class
3044
+ attach_function :mod_get_source1, :fluid_mod_get_source1, [FluidModT], :int
3045
+
3046
+ # (Not documented)
3047
+ #
3048
+ # @method mod_get_flags1(mod)
3049
+ # @param [FluidModT] mod
3050
+ # @return [Integer]
3051
+ # @scope class
3052
+ attach_function :mod_get_flags1, :fluid_mod_get_flags1, [FluidModT], :int
3053
+
3054
+ # (Not documented)
3055
+ #
3056
+ # @method mod_get_source2(mod)
3057
+ # @param [FluidModT] mod
3058
+ # @return [Integer]
3059
+ # @scope class
3060
+ attach_function :mod_get_source2, :fluid_mod_get_source2, [FluidModT], :int
3061
+
3062
+ # (Not documented)
3063
+ #
3064
+ # @method mod_get_flags2(mod)
3065
+ # @param [FluidModT] mod
3066
+ # @return [Integer]
3067
+ # @scope class
3068
+ attach_function :mod_get_flags2, :fluid_mod_get_flags2, [FluidModT], :int
3069
+
3070
+ # (Not documented)
3071
+ #
3072
+ # @method mod_get_dest(mod)
3073
+ # @param [FluidModT] mod
3074
+ # @return [Integer]
3075
+ # @scope class
3076
+ attach_function :mod_get_dest, :fluid_mod_get_dest, [FluidModT], :int
3077
+
3078
+ # (Not documented)
3079
+ #
3080
+ # @method mod_get_amount(mod)
3081
+ # @param [FluidModT] mod
3082
+ # @return [Float]
3083
+ # @scope class
3084
+ attach_function :mod_get_amount, :fluid_mod_get_amount, [FluidModT], :double
3085
+
3086
+ # (Not documented)
3087
+ #
3088
+ # @method mod_test_identity(mod1, mod2)
3089
+ # @param [FluidModT] mod1
3090
+ # @param [FluidModT] mod2
3091
+ # @return [Integer]
3092
+ # @scope class
3093
+ attach_function :mod_test_identity, :fluid_mod_test_identity, [FluidModT, FluidModT], :int
3094
+
3095
+ # (Not documented)
3096
+ #
3097
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:gen_type).</em>
3098
+ #
3099
+ # === Options:
3100
+ # :startaddrofs ::
3101
+ #
3102
+ # :endaddrofs ::
3103
+ # < Sample start address offset (0-32767)
3104
+ # :startloopaddrofs ::
3105
+ # < Sample end address offset (-32767-0)
3106
+ # :endloopaddrofs ::
3107
+ # < Sample loop start address offset (-32767-32767)
3108
+ # :startaddrcoarseofs ::
3109
+ # < Sample loop end address offset (-32767-32767)
3110
+ # :modlfotopitch ::
3111
+ # < Sample start address coarse offset (X 32768)
3112
+ # :viblfotopitch ::
3113
+ # < Modulation LFO to pitch
3114
+ # :modenvtopitch ::
3115
+ # < Vibrato LFO to pitch
3116
+ # :filterfc ::
3117
+ # < Modulation envelope to pitch
3118
+ # :filterq ::
3119
+ # < Filter cutoff
3120
+ # :modlfotofilterfc ::
3121
+ # < Filter Q
3122
+ # :modenvtofilterfc ::
3123
+ # < Modulation LFO to filter cutoff
3124
+ # :endaddrcoarseofs ::
3125
+ # < Modulation envelope to filter cutoff
3126
+ # :modlfotovol ::
3127
+ # < Sample end address coarse offset (X 32768)
3128
+ # :unused1 ::
3129
+ # < Modulation LFO to volume
3130
+ # :chorussend ::
3131
+ # < Unused
3132
+ # :reverbsend ::
3133
+ # < Chorus send amount
3134
+ # :pan ::
3135
+ # < Reverb send amount
3136
+ # :unused2 ::
3137
+ # < Stereo panning
3138
+ # :unused3 ::
3139
+ # < Unused
3140
+ # :unused4 ::
3141
+ # < Unused
3142
+ # :modlfodelay ::
3143
+ # < Unused
3144
+ # :modlfofreq ::
3145
+ # < Modulation LFO delay
3146
+ # :viblfodelay ::
3147
+ # < Modulation LFO frequency
3148
+ # :viblfofreq ::
3149
+ # < Vibrato LFO delay
3150
+ # :modenvdelay ::
3151
+ # < Vibrato LFO frequency
3152
+ # :modenvattack ::
3153
+ # < Modulation envelope delay
3154
+ # :modenvhold ::
3155
+ # < Modulation envelope attack
3156
+ # :modenvdecay ::
3157
+ # < Modulation envelope hold
3158
+ # :modenvsustain ::
3159
+ # < Modulation envelope decay
3160
+ # :modenvrelease ::
3161
+ # < Modulation envelope sustain
3162
+ # :keytomodenvhold ::
3163
+ # < Modulation envelope release
3164
+ # :keytomodenvdecay ::
3165
+ # < Key to modulation envelope hold
3166
+ # :volenvdelay ::
3167
+ # < Key to modulation envelope decay
3168
+ # :volenvattack ::
3169
+ # < Volume envelope delay
3170
+ # :volenvhold ::
3171
+ # < Volume envelope attack
3172
+ # :volenvdecay ::
3173
+ # < Volume envelope hold
3174
+ # :volenvsustain ::
3175
+ # < Volume envelope decay
3176
+ # :volenvrelease ::
3177
+ # < Volume envelope sustain
3178
+ # :keytovolenvhold ::
3179
+ # < Volume envelope release
3180
+ # :keytovolenvdecay ::
3181
+ # < Key to volume envelope hold
3182
+ # :instrument ::
3183
+ # < Key to volume envelope decay
3184
+ # :reserved1 ::
3185
+ # < Instrument ID (shouldn't be set by user)
3186
+ # :keyrange ::
3187
+ # < Reserved
3188
+ # :velrange ::
3189
+ # < MIDI note range
3190
+ # :startloopaddrcoarseofs ::
3191
+ # < MIDI velocity range
3192
+ # :keynum ::
3193
+ # < Sample start loop address coarse offset (X 32768)
3194
+ # :velocity ::
3195
+ # < Fixed MIDI note number
3196
+ # :attenuation ::
3197
+ # < Fixed MIDI velocity value
3198
+ # :reserved2 ::
3199
+ # < Initial volume attenuation
3200
+ # :endloopaddrcoarseofs ::
3201
+ # < Reserved
3202
+ # :coarsetune ::
3203
+ # < Sample end loop address coarse offset (X 32768)
3204
+ # :finetune ::
3205
+ # < Coarse tuning
3206
+ # :sampleid ::
3207
+ # < Fine tuning
3208
+ # :samplemode ::
3209
+ # < Sample ID (shouldn't be set by user)
3210
+ # :reserved3 ::
3211
+ # < Sample mode flags
3212
+ # :scaletune ::
3213
+ # < Reserved
3214
+ # :exclusiveclass ::
3215
+ # < Scale tuning
3216
+ # :overriderootkey ::
3217
+ # < Exclusive class number
3218
+ # :pitch ::
3219
+ # the initial pitch is not a "standard" generator. It is not
3220
+ # mentioned in the list of generator in the SF2 specifications. It
3221
+ # is used, however, as the destination for the default pitch wheel
3222
+ # modulator.
3223
+ # :last ::
3224
+ # < Pitch (NOTE: Not a real SoundFont generator)
3225
+ #
3226
+ # @method _enum_gen_type_
3227
+ # @return [Symbol]
3228
+ # @scope class
3229
+ enum :gen_type, [
3230
+ :startaddrofs,
3231
+ :endaddrofs,
3232
+ :startloopaddrofs,
3233
+ :endloopaddrofs,
3234
+ :startaddrcoarseofs,
3235
+ :modlfotopitch,
3236
+ :viblfotopitch,
3237
+ :modenvtopitch,
3238
+ :filterfc,
3239
+ :filterq,
3240
+ :modlfotofilterfc,
3241
+ :modenvtofilterfc,
3242
+ :endaddrcoarseofs,
3243
+ :modlfotovol,
3244
+ :unused1,
3245
+ :chorussend,
3246
+ :reverbsend,
3247
+ :pan,
3248
+ :unused2,
3249
+ :unused3,
3250
+ :unused4,
3251
+ :modlfodelay,
3252
+ :modlfofreq,
3253
+ :viblfodelay,
3254
+ :viblfofreq,
3255
+ :modenvdelay,
3256
+ :modenvattack,
3257
+ :modenvhold,
3258
+ :modenvdecay,
3259
+ :modenvsustain,
3260
+ :modenvrelease,
3261
+ :keytomodenvhold,
3262
+ :keytomodenvdecay,
3263
+ :volenvdelay,
3264
+ :volenvattack,
3265
+ :volenvhold,
3266
+ :volenvdecay,
3267
+ :volenvsustain,
3268
+ :volenvrelease,
3269
+ :keytovolenvhold,
3270
+ :keytovolenvdecay,
3271
+ :instrument,
3272
+ :reserved1,
3273
+ :keyrange,
3274
+ :velrange,
3275
+ :startloopaddrcoarseofs,
3276
+ :keynum,
3277
+ :velocity,
3278
+ :attenuation,
3279
+ :reserved2,
3280
+ :endloopaddrcoarseofs,
3281
+ :coarsetune,
3282
+ :finetune,
3283
+ :sampleid,
3284
+ :samplemode,
3285
+ :reserved3,
3286
+ :scaletune,
3287
+ :exclusiveclass,
3288
+ :overriderootkey,
3289
+ :pitch,
3290
+ :last
3291
+ ]
3292
+
3293
+ # (Not documented)
3294
+ #
3295
+ # = Fields:
3296
+ # :flags ::
3297
+ # (Integer) < Is the generator set or not (#fluid_gen_flags)
3298
+ # :val ::
3299
+ # (Float) < The nominal value
3300
+ # :mod ::
3301
+ # (Float) < Change by modulators
3302
+ # :nrpn ::
3303
+ # (Float) < Change by NRPN messages
3304
+ class FluidGenT < FFI::Struct
3305
+ layout :flags, :uchar,
3306
+ :val, :double,
3307
+ :mod, :double,
3308
+ :nrpn, :double
3309
+ end
3310
+
3311
+ # (Not documented)
3312
+ #
3313
+ # = Fields:
3314
+ # :flags ::
3315
+ # (Integer) < Is the generator set or not (#fluid_gen_flags)
3316
+ # :val ::
3317
+ # (Float) < The nominal value
3318
+ # :mod ::
3319
+ # (Float) < Change by modulators
3320
+ # :nrpn ::
3321
+ # (Float) < Change by NRPN messages
3322
+ class GenT < FFI::Struct
3323
+ layout :flags, :uchar,
3324
+ :val, :double,
3325
+ :mod, :double,
3326
+ :nrpn, :double
3327
+ end
3328
+
3329
+ # Enum value for 'flags' field of #fluid_gen_t (not really flags).
3330
+ #
3331
+ # <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:gen_flags).</em>
3332
+ #
3333
+ # === Options:
3334
+ # :unused ::
3335
+ #
3336
+ # :set ::
3337
+ # < Generator value is not set
3338
+ # :abs_nrpn ::
3339
+ # < Generator value is set
3340
+ #
3341
+ # @method _enum_gen_flags_
3342
+ # @return [Symbol]
3343
+ # @scope class
3344
+ enum :gen_flags, [
3345
+ :unused,
3346
+ :set,
3347
+ :abs_nrpn
3348
+ ]
3349
+
3350
+ # < Generator is an absolute value
3351
+ #
3352
+ # @method gen_set_default_values(gen)
3353
+ # @param [FluidGenT] gen
3354
+ # @return [Integer]
3355
+ # @scope class
3356
+ attach_function :gen_set_default_values, :fluid_gen_set_default_values, [FluidGenT], :int
3357
+
3358
+ # (Not documented)
3359
+ #
3360
+ # @method voice_update_param(voice, gen)
3361
+ # @param [FluidVoiceT] voice
3362
+ # @param [Integer] gen
3363
+ # @return [nil]
3364
+ # @scope class
3365
+ attach_function :voice_update_param, :fluid_voice_update_param, [FluidVoiceT, :int], :void
3366
+
3367
+ # < For default modulators only, no need to check for duplicates
3368
+ #
3369
+ # @method voice_add_mod(voice, mod, mode)
3370
+ # @param [FluidVoiceT] voice
3371
+ # @param [FluidModT] mod
3372
+ # @param [Integer] mode
3373
+ # @return [nil]
3374
+ # @scope class
3375
+ attach_function :voice_add_mod, :fluid_voice_add_mod, [FluidVoiceT, FluidModT, :int], :void
3376
+
3377
+ # (Not documented)
3378
+ #
3379
+ # @method voice_gen_set(voice, gen, val)
3380
+ # @param [FluidVoiceT] voice
3381
+ # @param [Integer] gen
3382
+ # @param [Float] val
3383
+ # @return [nil]
3384
+ # @scope class
3385
+ attach_function :voice_gen_set, :fluid_voice_gen_set, [FluidVoiceT, :int, :float], :void
3386
+
3387
+ # (Not documented)
3388
+ #
3389
+ # @method voice_gen_get(voice, gen)
3390
+ # @param [FluidVoiceT] voice
3391
+ # @param [Integer] gen
3392
+ # @return [Float]
3393
+ # @scope class
3394
+ attach_function :voice_gen_get, :fluid_voice_gen_get, [FluidVoiceT, :int], :float
3395
+
3396
+ # (Not documented)
3397
+ #
3398
+ # @method voice_gen_incr(voice, gen, val)
3399
+ # @param [FluidVoiceT] voice
3400
+ # @param [Integer] gen
3401
+ # @param [Float] val
3402
+ # @return [nil]
3403
+ # @scope class
3404
+ attach_function :voice_gen_incr, :fluid_voice_gen_incr, [FluidVoiceT, :int, :float], :void
3405
+
3406
+ # (Not documented)
3407
+ #
3408
+ # @method voice_get_id(voice)
3409
+ # @param [FluidVoiceT] voice
3410
+ # @return [Integer]
3411
+ # @scope class
3412
+ attach_function :voice_get_id, :fluid_voice_get_id, [FluidVoiceT], :uint
3413
+
3414
+ # (Not documented)
3415
+ #
3416
+ # @method voice_is_playing(voice)
3417
+ # @param [FluidVoiceT] voice
3418
+ # @return [Integer]
3419
+ # @scope class
3420
+ attach_function :voice_is_playing, :fluid_voice_is_playing, [FluidVoiceT], :int
3421
+
3422
+ # (Not documented)
3423
+ #
3424
+ # @method voice_optimize_sample(s)
3425
+ # @param [FluidSampleT] s
3426
+ # @return [Integer]
3427
+ # @scope class
3428
+ attach_function :voice_optimize_sample, :fluid_voice_optimize_sample, [FluidSampleT], :int
3429
+
3430
+ # (Not documented)
3431
+ #
3432
+ # @method version(major, minor, micro)
3433
+ # @param [FFI::Pointer(*Int)] major
3434
+ # @param [FFI::Pointer(*Int)] minor
3435
+ # @param [FFI::Pointer(*Int)] micro
3436
+ # @return [nil]
3437
+ # @scope class
3438
+ attach_function :version, :fluid_version, [:pointer, :pointer, :pointer], :void
3439
+
3440
+ # (Not documented)
3441
+ #
3442
+ # @method version_str()
3443
+ # @return [String]
3444
+ # @scope class
3445
+ attach_function :version_str, :fluid_version_str, [], :string
3446
+
3447
+ end