fiddle_fluidsynth 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/.standard.yml +3 -0
  3. data/CHANGELOG.md +5 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +138 -0
  6. data/Rakefile +14 -0
  7. data/examples/enum.rb +30 -0
  8. data/examples/example.sf2 +0 -0
  9. data/examples/ffs_arpeggio.rb +252 -0
  10. data/examples/ffs_example.rb +47 -0
  11. data/examples/ffs_fx.rb +200 -0
  12. data/examples/ffs_metronome.rb +260 -0
  13. data/examples/ffs_midiplay.rb +122 -0
  14. data/examples/ffs_simple.rb +45 -0
  15. data/examples/ffs_test1.rb +41 -0
  16. data/examples/ffs_test3.rb +50 -0
  17. data/examples/fiddle-pointer.rb +18 -0
  18. data/examples/presets-each.rb +66 -0
  19. data/examples/presets-full_scan.rb +59 -0
  20. data/examples/settings-each.rb +106 -0
  21. data/exe/ffs_midiplay.rb +122 -0
  22. data/lib/fiddle_fluidsynth/audio_output/driver.rb +104 -0
  23. data/lib/fiddle_fluidsynth/audio_output/file_renderer.rb +84 -0
  24. data/lib/fiddle_fluidsynth/audio_output.rb +7 -0
  25. data/lib/fiddle_fluidsynth/command_interface/command_interface.rb +90 -0
  26. data/lib/fiddle_fluidsynth/command_interface/handler.rb +95 -0
  27. data/lib/fiddle_fluidsynth/command_interface/server.rb +79 -0
  28. data/lib/fiddle_fluidsynth/command_interface/shell.rb +76 -0
  29. data/lib/fiddle_fluidsynth/command_interface.rb +9 -0
  30. data/lib/fiddle_fluidsynth/core_ext/fiddle.rb +142 -0
  31. data/lib/fiddle_fluidsynth/core_ext/module.rb +123 -0
  32. data/lib/fiddle_fluidsynth/fiddle_fluidsynth.rb +172 -0
  33. data/lib/fiddle_fluidsynth/logging/logging.rb +82 -0
  34. data/lib/fiddle_fluidsynth/logging.rb +6 -0
  35. data/lib/fiddle_fluidsynth/midi_input/driver.rb +77 -0
  36. data/lib/fiddle_fluidsynth/midi_input/events.rb +255 -0
  37. data/lib/fiddle_fluidsynth/midi_input/midi_input.rb +70 -0
  38. data/lib/fiddle_fluidsynth/midi_input/player.rb +289 -0
  39. data/lib/fiddle_fluidsynth/midi_input/router.rb +225 -0
  40. data/lib/fiddle_fluidsynth/midi_input.rb +11 -0
  41. data/lib/fiddle_fluidsynth/misc/misc.rb +162 -0
  42. data/lib/fiddle_fluidsynth/misc.rb +6 -0
  43. data/lib/fiddle_fluidsynth/sequencer/events.rb +679 -0
  44. data/lib/fiddle_fluidsynth/sequencer/sequencer.rb +384 -0
  45. data/lib/fiddle_fluidsynth/sequencer.rb +7 -0
  46. data/lib/fiddle_fluidsynth/settings/settings.rb +465 -0
  47. data/lib/fiddle_fluidsynth/settings.rb +6 -0
  48. data/lib/fiddle_fluidsynth/soundfonts/generators.rb +128 -0
  49. data/lib/fiddle_fluidsynth/soundfonts/loader.rb +506 -0
  50. data/lib/fiddle_fluidsynth/soundfonts/modulators.rb +247 -0
  51. data/lib/fiddle_fluidsynth/soundfonts/soundfonts.rb +64 -0
  52. data/lib/fiddle_fluidsynth/soundfonts/voices.rb +178 -0
  53. data/lib/fiddle_fluidsynth/soundfonts.rb +11 -0
  54. data/lib/fiddle_fluidsynth/synth/audio_rendering.rb +100 -0
  55. data/lib/fiddle_fluidsynth/synth/effect/chorus.rb +269 -0
  56. data/lib/fiddle_fluidsynth/synth/effect/iir_filter.rb +81 -0
  57. data/lib/fiddle_fluidsynth/synth/effect/ladspa.rb +172 -0
  58. data/lib/fiddle_fluidsynth/synth/effect/reverb.rb +207 -0
  59. data/lib/fiddle_fluidsynth/synth/effect.rb +10 -0
  60. data/lib/fiddle_fluidsynth/synth/midi/messages.rb +292 -0
  61. data/lib/fiddle_fluidsynth/synth/midi/setup.rb +235 -0
  62. data/lib/fiddle_fluidsynth/synth/midi/tuning.rb +128 -0
  63. data/lib/fiddle_fluidsynth/synth/midi.rb +9 -0
  64. data/lib/fiddle_fluidsynth/synth/params/params.rb +200 -0
  65. data/lib/fiddle_fluidsynth/synth/params.rb +8 -0
  66. data/lib/fiddle_fluidsynth/synth/soundfont_management.rb +210 -0
  67. data/lib/fiddle_fluidsynth/synth/synth.rb +114 -0
  68. data/lib/fiddle_fluidsynth/synth/voice_control.rb +94 -0
  69. data/lib/fiddle_fluidsynth/synth.rb +18 -0
  70. data/lib/fiddle_fluidsynth/types/types.rb +131 -0
  71. data/lib/fiddle_fluidsynth/types.rb +10 -0
  72. data/lib/fiddle_fluidsynth/util/callback.rb +585 -0
  73. data/lib/fiddle_fluidsynth/util/interface/settings.rb +689 -0
  74. data/lib/fiddle_fluidsynth/util/interface/soundfont.rb +115 -0
  75. data/lib/fiddle_fluidsynth/util/interface/soundfont_preset.rb +69 -0
  76. data/lib/fiddle_fluidsynth/util/interface/soundfont_sample.rb +61 -0
  77. data/lib/fiddle_fluidsynth/util/interface.rb +11 -0
  78. data/lib/fiddle_fluidsynth/util/module_hier.rb +403 -0
  79. data/lib/fiddle_fluidsynth/util/util.rb +467 -0
  80. data/lib/fiddle_fluidsynth/util-after.rb +12 -0
  81. data/lib/fiddle_fluidsynth/util.rb +37 -0
  82. data/lib/fiddle_fluidsynth/version.rb +10 -0
  83. data/lib/fiddle_fluidsynth.rb +57 -0
  84. data/sig/fiddle_fluidsynth.rbs +4 -0
  85. metadata +128 -0
@@ -0,0 +1,689 @@
1
+ #
2
+ # filename: util/settings.rb
3
+ #
4
+ require 'fiddle'
5
+ require 'fiddle/import'
6
+
7
+
8
+ #
9
+ #
10
+ #
11
+ class FiddleFluidSynth
12
+
13
+ #
14
+ module Interface
15
+ module Settings; end
16
+ end
17
+
18
+ #
19
+ module Interface
20
+ module AudioOutputDriver; end
21
+ end
22
+
23
+ end
24
+
25
+
26
+ #
27
+ #
28
+ #
29
+ #class FiddleFluidSynth
30
+ # module Interface::Settings
31
+ module FiddleFluidSynth::Interface
32
+ module Settings
33
+
34
+ #
35
+ def self.item_to_meth_name( item )
36
+ _item = item
37
+ ret = _item.to_s.gsub(/(\w)[.](\w)/, '\1_\2').
38
+ gsub(/(\w)[-](\w)/, '\1__\2')
39
+ ret
40
+ end
41
+ #def item_to_meth_name( item )
42
+ #def item_to_meth( item )
43
+ def item_to_meth_name( item )
44
+ #ng. self.class.send(__method__, item)
45
+ #ng. self.class.item_to_meth_name(item)
46
+ # Settings.item_to_meth_name(item) # ok.
47
+ Settings.send(__method__, item)
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+
54
+ class FiddleFluidSynth
55
+ module Interface::Settings
56
+
57
+ #
58
+ def self.define_accessors( item, debug_f: false )
59
+ # dummy object for defining interface methods.
60
+ settings_obj = FiddleFluidSynth.settings_new()
61
+
62
+ type = ::FiddleFluidSynth::C.fluid_settings_get_type(settings_obj,item)
63
+ $stderr.puts "{#{__method__}} item: #{item}, type: #{type}" if debug_f
64
+
65
+ #
66
+ mname_base = item_to_meth_name(item)
67
+ mname_setter = mname_base + "="
68
+ mname_getter = mname_base
69
+ mname_default = mname_base + "_default"
70
+ mname_range = mname_base + "_range"
71
+
72
+ #
73
+ mname_name = mname_base + "_name"
74
+ define_method(mname_name){|_self: itself|
75
+ ret = item
76
+ ret
77
+ }
78
+
79
+ #
80
+ case type
81
+ when FiddleFluidSynth::FLUID_NUM_TYPE
82
+ # setters.
83
+ define_method(mname_setter){|dbl, _self: itself|
84
+ _dbl = dbl
85
+ rg = _self.send(mname_range)
86
+
87
+ #
88
+ if rg.nil?
89
+
90
+ else
91
+ if rg.cover?(_dbl)
92
+
93
+ else
94
+ _dbl = rg.first if _dbl < rg.first
95
+ _dbl = rg.last if rg.first < _dbl
96
+ $stderr.puts "(**) value #{int} is out of range #{rg}." +
97
+ " so fixed to #{_int}"
98
+ end
99
+ end
100
+
101
+ ret = FiddleFluidSynth::C.fluid_settings_setnum(_self, item, _dbl)
102
+ ret
103
+ }
104
+
105
+ # getters.
106
+ define_method(mname_getter){|_self: itself|
107
+ tmp = Fiddle::Pointer.malloc_dbl
108
+ FiddleFluidSynth::C.fluid_settings_getnum(_self,item,tmp)
109
+ ret = tmp.decode1_dbl
110
+ ret
111
+ }
112
+
113
+ # default.
114
+ define_method(mname_default){|_self: itself|
115
+ ret = nil
116
+
117
+ outval = Fiddle::Pointer.malloc_dbl
118
+ tmp = FiddleFluidSynth::C.fluid_settings_getnum_default(
119
+ _self,item,outval)
120
+ if FLUID_OK == tmp
121
+ ret = outval.decode1_dbl
122
+ else
123
+ # do nothing.
124
+ end
125
+
126
+ ret
127
+ }
128
+
129
+ # range.
130
+ define_method(mname_range){|_self: itself|
131
+ ret = nil
132
+
133
+ out_min = Fiddle::Pointer.malloc_dbl
134
+ out_max = Fiddle::Pointer.malloc_dbl
135
+ tmp = FiddleFluidSynth::C.fluid_settings_getnum_range(
136
+ _self,item,out_min,out_max)
137
+ if FLUID_OK == tmp
138
+ min = out_min.decode1_dbl
139
+ max = out_max.decode1_dbl
140
+ ret = min..max
141
+ else
142
+ # do nothing. (ret = nil)
143
+ end
144
+ ret
145
+ }
146
+
147
+ when FiddleFluidSynth::FLUID_INT_TYPE
148
+ # setters.
149
+ define_method(mname_setter){|int, _self: itself|
150
+ _int = int
151
+ rg = _self.send(mname_range)
152
+
153
+ #
154
+ if rg.nil?
155
+ # nothing to do.
156
+ else
157
+ if rg.cover?(_int)
158
+ # nothing to do.
159
+ else
160
+ _int = rg.first if _int < rg.first
161
+ _int = rg.last if rg.last < _int
162
+ $stderr.puts "(**) value #{int} is out of range #{rg}." +
163
+ " so fixed to #{_int}"
164
+ end
165
+ end
166
+
167
+ ret = FiddleFluidSynth::C.fluid_settings_setint(_self, item, _int)
168
+ ret
169
+ }
170
+
171
+ # getters.
172
+ define_method(mname_getter){|_self: itself|
173
+ tmp = Fiddle::Pointer.malloc_int
174
+ FiddleFluidSynth::C.fluid_settings_getint(_self,item,tmp)
175
+ ret = tmp.decode1_int
176
+ ret
177
+ }
178
+
179
+ # default.
180
+ define_method(mname_default){|_self: itself|
181
+ ret = nil
182
+
183
+ outval = Fiddle::Pointer.malloc_int
184
+ tmp = FiddleFluidSynth::C.fluid_settings_getint_default(
185
+ _self, item, outval)
186
+ if FLUID_OK == tmp
187
+ ret = outval.decode1_int
188
+ else
189
+ #
190
+ end
191
+
192
+ ret
193
+ }
194
+
195
+ # range.
196
+ define_method(mname_range){|_self: itself|
197
+ ret = nil
198
+
199
+ out_min = Fiddle::Pointer.malloc_int
200
+ out_max = Fiddle::Pointer.malloc_int
201
+ tmp = FiddleFluidSynth::C.fluid_settings_getint_range(
202
+ _self,item, out_min, out_max)
203
+ if FLUID_OK == tmp
204
+ min = out_min.decode1_int
205
+ max = out_max.decode1_int
206
+ ret = min..max
207
+ else
208
+ #
209
+ end
210
+
211
+ ret
212
+ }
213
+
214
+ when FiddleFluidSynth::FLUID_STR_TYPE
215
+ # setters.
216
+ define_method(mname_setter){|str, _self: itself|
217
+ FiddleFluidSynth::C.fluid_settings_setstr(_self, item, str)
218
+ }
219
+
220
+ # getters. STR_TYPE
221
+ define_method(mname_getter){|_self: itself|
222
+ ret = nil
223
+ out = Fiddle::Pointer.malloc_voidp
224
+ ret = FiddleFluidSynth.settings_dupstr(
225
+ settings: _self, name: item, out: out)
226
+ ret
227
+ }
228
+
229
+ # default.
230
+ define_method(mname_default){|_self: itself|
231
+ ret = nil
232
+
233
+ #
234
+ outval = Fiddle::Pointer.malloc_voidp
235
+ tmp = FiddleFluidSynth::C.fluid_settings_getstr_default(
236
+ _self, item, outval)
237
+ # $stderr.puts "[DEBUG] outval: #{outval}, tmp: #{tmp}, ret: #{ret}"
238
+
239
+ #
240
+ if FLUID_OK == tmp
241
+ cstr_ptr = outval.ptr
242
+ ret = (cstr_ptr.null?)? nil : cstr_ptr.to_s
243
+ else
244
+ $stderr.puts "(**) API returned FLUID_FAILED (#{tmp})"
245
+ end
246
+
247
+ ret
248
+ }
249
+
250
+ # range. STR_TYPE does NOT have the range.
251
+ # FIXME. by optionlist?
252
+ #
253
+ # define_method(mname_range){|_self: itself|
254
+ # ret = nil
255
+ # out_min = Fiddle::Pointer.malloc_dbl
256
+ # out_max = Fiddle::Pointer.malloc_dbl
257
+ # tmp = FiddleFluidSynth::C.fluid_settings_getint_range(
258
+ # _self,item, out_min, out_max)
259
+ # if FLUID_OK == tmp
260
+ # min = out_min.decode1_dbl
261
+ # max = out_max.decode1_dbl
262
+ # ret = min..max
263
+ # else
264
+ # #
265
+ # end
266
+ # ret
267
+ # }
268
+ define_method(mname_range){|_self: itself|
269
+ ret = nil
270
+ $stderr.puts "(**) #{item} does NOT have the range."
271
+ ret
272
+ }
273
+
274
+
275
+ else
276
+ msg = ""
277
+ if FLUID_NO_TYPE == type
278
+ msg = "(**) item \"#{item}\" is FLUID_NO_TYPE (#{type}) in this" +
279
+ " machine. So we do NOT define accessors for this..."
280
+ else
281
+ msg = "(**) Unknown type #{type} for item: #{item}."
282
+ end
283
+
284
+ $stderr.puts "#{msg}"
285
+ end
286
+
287
+ #
288
+ FiddleFluidSynth.settings_delete(settings_obj)
289
+ end
290
+
291
+ #
292
+ def get_value_of( name )
293
+ meth_name = self.item_to_meth_name(name)
294
+ ret = self.send(meth_name)
295
+ ret
296
+ end
297
+ alias get_val_of get_value_of
298
+ alias get_val get_value_of
299
+ alias get_value get_value_of
300
+ alias value_of get_value_of
301
+ alias val_of get_value_of
302
+ alias value get_value_of
303
+ alias val get_value_of
304
+
305
+ def set_value_of( name, value )
306
+ meth_name = self.item_to_meth_name(name)
307
+ setter_name = meth_name + "="
308
+ ret = self.send(setter_name, value)
309
+ ret
310
+ end
311
+ alias set_val_of set_value_of
312
+ alias set_value set_value_of
313
+ alias set_val set_value_of
314
+
315
+
316
+ end
317
+ end
318
+
319
+
320
+ # Settings callback functions for iterators.
321
+ #
322
+ #
323
+ module FiddleFluidSynth::Interface
324
+ module Settings
325
+
326
+ def each_setting( data: nil, verbose_f: false, &blk )
327
+ cb_ptr = FiddleFluidSynth.
328
+ define_settings_foreach_callback(){|data,name,type|
329
+ blk.call(data,name,type)
330
+ }
331
+ $stderr.puts "{#{__method__}} 0x#{cb_ptr.to_i.to_s(16)}" if verbose_f
332
+
333
+ FiddleFluidSynth::C.
334
+ fluid_settings_foreach(self,data,cb_ptr)
335
+ end
336
+
337
+ def each_option_of( setting_name, data: nil, verbose_f: false, &blk )
338
+ cb_ptr = FiddleFluidSynth.
339
+ define_settings_foreach_option_callback(){|_data,_name,_option|
340
+ blk.call(_data,_name,_option)
341
+ }
342
+ $stderr.puts "{#{__method__}} 0x#{cb_ptr.to_i.to_s(16)}" if verbose_f
343
+
344
+ FiddleFluidSynth::C.
345
+ fluid_settings_foreach_option(self,setting_name,data,cb_ptr)
346
+ end
347
+
348
+ end
349
+ end
350
+
351
+
352
+ # Settings/Audio driver settings.
353
+ # ==== References
354
+ # - fluidsynth.org, [Settings Reference](https://www.fluidsynth.org/api/fluidsettings.html).
355
+ #
356
+ module FiddleFluidSynth::Interface
357
+ module Settings
358
+
359
+ #
360
+ [
361
+ 'audio.driver',
362
+ 'audio.periods',
363
+ 'audio.period-size',
364
+ 'audio.realtime-prio',
365
+ 'audio.sample-format',
366
+
367
+ #
368
+ 'audio.alsa.device',
369
+
370
+ #
371
+ "audio.coreaudio.device",
372
+ "audio.coreaudio.channel-map",
373
+
374
+ #
375
+ # "audio.driver",
376
+ 'audio.dart.device',
377
+
378
+ #
379
+ 'audio.dsound.device',
380
+
381
+ #
382
+ "audio.file.endian",
383
+ "audio.file.format",
384
+ "audio.file.name",
385
+ "audio.file.type",
386
+
387
+ #
388
+ 'audio.jack.autoconnect',
389
+ 'audio.jack.id',
390
+ 'audio.jack.multi',
391
+ 'audio.jack.server',
392
+
393
+ #
394
+ 'audio.oboe.id',
395
+ 'audio.oboe.sample-rate-conversion-quality',
396
+ 'audio.oboe.sharing-mode',
397
+ 'audio.oboe.performance-mode',
398
+ 'audio.oboe.error-recovery-mode',
399
+
400
+ #
401
+ 'audio.oss.device',
402
+
403
+ #
404
+ 'audio.pipewire.media-category',
405
+ 'audio.pipewire.media-role',
406
+ 'audio.pipewire.media-type',
407
+
408
+ #
409
+ 'audio.portaudio.device',
410
+
411
+ #
412
+ 'audio.pulseaudio.adjust-latency',
413
+ 'audio.pulseaudio.device',
414
+ 'audio.pulseaudio.media-role',
415
+ 'audio.pulseaudio.server',
416
+
417
+ #
418
+ 'audio.sdl2.device',
419
+
420
+ #
421
+ 'audio.wasapi.device',
422
+ 'audio.wasapi.exclusive-mode',
423
+
424
+ #
425
+ 'audio.waveout.device',
426
+
427
+ ].each do |item|
428
+ define_accessors(item)
429
+ end
430
+
431
+ end
432
+ end
433
+
434
+ # Settings/MIDI driver settings.
435
+ # ==== References
436
+ # - fluidsynth.org, [Settings Reference](https://www.fluidsynth.org/api/fluidsettings.html).
437
+ #
438
+ #
439
+ module FiddleFluidSynth::Interface
440
+
441
+ module Settings
442
+
443
+ #
444
+ [
445
+ "midi.autoconnect",
446
+ "midi.driver",
447
+ "midi.realtime-prio",
448
+ "midi.portname",
449
+
450
+ #
451
+ "midi.alsa.device",
452
+ "midi.alsa_seq.device",
453
+ "midi.alsa_seq.id",
454
+
455
+ #
456
+ "midi.coremidi.id",
457
+
458
+ #
459
+ "midi.jack.server",
460
+ "midi.jack.id",
461
+
462
+ #
463
+ "midi.oss.device",
464
+
465
+ #
466
+ "midi.winmidi.device",
467
+
468
+ ].each do |_item|
469
+ define_accessors(_item)
470
+ end
471
+
472
+ end
473
+
474
+ end
475
+
476
+ # Settings/MIDI player settings.
477
+ # ==== References
478
+ # - fluidsynth.org, [Settings Reference](https://www.fluidsynth.org/api/fluidsettings.html).
479
+ #
480
+ module FiddleFluidSynth::Interface
481
+
482
+ module Settings
483
+
484
+ #
485
+ [
486
+ "player.reset-synth",
487
+ "player.timing-source",
488
+ ].each do |_item|
489
+ define_accessors(_item)
490
+ end
491
+
492
+ end
493
+
494
+ end
495
+
496
+
497
+ # Settings/Shell (command line) settings.
498
+ # ==== References
499
+ # - fluidsynth.org, [Settings Reference](https://www.fluidsynth.org/api/fluidsettings.html).
500
+ #
501
+ module FiddleFluidSynth::Interface
502
+
503
+ module Settings
504
+
505
+ #
506
+ [
507
+ "shell.port",
508
+ "shell.prompt",
509
+ ].each do |_item|
510
+ define_accessors(_item)
511
+ end
512
+
513
+ end
514
+
515
+ end
516
+
517
+
518
+ # Settings/Synthesizer settings.
519
+ # ==== References
520
+ # - fluidsynth.org, [Settings Reference](https://www.fluidsynth.org/api/fluidsettings.html).
521
+ #
522
+ module FiddleFluidSynth::Interface
523
+
524
+ module Settings
525
+
526
+ #
527
+ [
528
+ #
529
+ "synth.audio-channels",
530
+ "synth.audio-groups",
531
+
532
+ #
533
+ "synth.chorus.active",
534
+ "synth.chorus.depth",
535
+ "synth.chorus.level",
536
+ "synth.chorus.nr",
537
+ "synth.chorus.speed",
538
+ "synth.cpu-cores",
539
+
540
+ #
541
+ "synth.default-soundfont",
542
+ "synth.device-id",
543
+ "synth.dynamic-sample-loading",
544
+
545
+ #
546
+ "synth.effects-channels",
547
+ "synth.effects-groups",
548
+
549
+ #
550
+ "synth.gain",
551
+
552
+ #
553
+ "synth.ladspa.active",
554
+ "synth.lock-memory",
555
+
556
+ #
557
+ "synth.midi-channels",
558
+ "synth.midi-bank-select",
559
+ "synth.min-note-length",
560
+
561
+ #
562
+ "synth.note-cut",
563
+
564
+ #
565
+ "synth.overflow.age",
566
+ "synth.overflow.important",
567
+ "synth.overflow.important-channels",
568
+ "synth.overflow.percussion",
569
+ "synth.overflow.released",
570
+ "synth.overflow.sustained",
571
+ "synth.overflow.volume",
572
+
573
+ #
574
+ "synth.polyphony",
575
+
576
+ #
577
+ "synth.reverb.active",
578
+ "synth.reverb.damp",
579
+ "synth.reverb.level",
580
+ "synth.reverb.room-size",
581
+ "synth.reverb.width",
582
+
583
+ #
584
+ "synth.sample-rate",
585
+
586
+ #
587
+ "synth.threadsafe-api",
588
+
589
+ #
590
+ "synth.verbose",
591
+
592
+ ].each do |_item|
593
+ define_accessors(_item)
594
+ end
595
+
596
+ end
597
+
598
+ end
599
+
600
+
601
+ #
602
+ #
603
+ #
604
+ module FiddleFluidSynth::Interface
605
+ module Settings
606
+ FFS = FiddleFluidSynth
607
+
608
+
609
+ ### type.
610
+
611
+ def type_of( name, _self: self.itself )
612
+ ret = FFS.settings_get_type(name, settings: _self)
613
+ ret
614
+ end
615
+ alias type type_of
616
+
617
+ #def type_is_notype?( name,
618
+ # _self: self.itself ,
619
+ # type: self.type_of(name, _self: _self) )
620
+ # self.send("setting_#{__method__}", type)
621
+ #end
622
+ [
623
+ :type_is_notype?,
624
+ :type_is_num?,
625
+ :type_is_int?,
626
+ :type_is_str?,
627
+ :type_is_set?,
628
+ ].each do |_meth|
629
+ call_name = "setting_#{_meth}"
630
+ define_method(_meth){|name, _self: self.itself, type: nil|
631
+ raise "Strange item name: #{name}" unless name.is_a?(String)
632
+
633
+ type = self.type_of(name, _self: _self) if type.nil?
634
+ FFS.send(call_name, type)
635
+ }
636
+ end
637
+
638
+
639
+ ### hints.
640
+
641
+ def hints_of( name, _self: self.itself )
642
+ ret = FFS.settings_get_hints(name, settings: _self)
643
+ ret
644
+ end
645
+ alias hints hints_of
646
+
647
+ [
648
+ :hints_is_bounded_above?,
649
+ :hints_is_bounded_below?,
650
+ :hints_is_optionlist?,
651
+ :hints_is_toggled?,
652
+ ].each do |_meth|
653
+ call_name = "setting_#{_meth}"
654
+ define_method(_meth){|name, _self: self.itself, hints: nil|
655
+ raise "Strange item name: #{name}" unless name.is_a?(String)
656
+
657
+ hints = self.hints_of(name, _self: _self) if hints.nil?
658
+ FFS.send(call_name, hints)
659
+ }
660
+ end
661
+
662
+
663
+
664
+ end
665
+ end
666
+
667
+
668
+ #
669
+ #
670
+ #
671
+ module FiddleFluidSynth::Interface
672
+ module Settings
673
+
674
+ #
675
+ # ==== Warning
676
+ # we have to prepare audio driver, midi driver, and synth, etc. to
677
+ # use this method. See API Reference `fluid_settings_is_realtime()`
678
+ #
679
+ def is_realtime?( name, _self: self.itself )
680
+ tmp = FFS.settings_is_realtime(_self, name: name)
681
+ ret = (tmp != 0)
682
+ ret
683
+ end
684
+
685
+ end
686
+ end
687
+
688
+
689
+ #### endof filename: util/interface/settings.rb