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,679 @@
1
+ #
2
+ # filename: fiddle-fluidstynth/sequencer/events.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - fluidsynth.org, [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # Create, modify, query and destroy sequencer events.
12
+ # ==== References
13
+ # - API Reference, MIDI Sequencer/[Sequencer Events](https://www.fluidsynth.org/api/group__sequencer.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ # ==== See Also
16
+ # - midi_input/events.rb
17
+
18
+ # Enumerations
19
+ #
20
+ #
21
+
22
+ # Sequencer event type enumeration.
23
+ enum(
24
+ :fluid_seq_event_type,
25
+ FLUID_SEQ_NOTE: 0,
26
+ FLUID_SEQ_NOTEON: nil,
27
+ FLUID_SEQ_NOTEOFF: nil,
28
+ FLUID_SEQ_ALLSOUNDSOFF: nil,
29
+ FLUID_SEQ_ALLNOTESOFF: nil,
30
+ FLUID_SEQ_BANKSELECT: nil,
31
+ FLUID_SEQ_PROGRAMCHANGE: nil,
32
+ FLUID_SEQ_PROGRAMSELECT: nil,
33
+ FLUID_SEQ_PITCHBEND: nil,
34
+ FLUID_SEQ_PITCHWHEELSENS: nil,
35
+ FLUID_SEQ_MODULATION: nil,
36
+
37
+ FLUID_SEQ_SUSTAIN: nil,
38
+ FLUID_SEQ_CONTROLCHANGE: nil,
39
+ FLUID_SEQ_PAN: nil,
40
+ FLUID_SEQ_VOLUME: nil,
41
+ FLUID_SEQ_REVERBSEND: nil,
42
+ FLUID_SEQ_CHORUSSEND: nil,
43
+ FLUID_SEQ_TIMER: nil,
44
+ FLUID_SEQ_CHANNELPRESSURE: nil,
45
+ FLUID_SEQ_KEYPRESSURE: nil,
46
+ FLUID_SEQ_SYSTEMRESET: nil,
47
+
48
+ FLUID_SEQ_UNREGISTERING: nil,
49
+ FLUID_SEQ_SCALE: nil,
50
+ FLUID_SEQ_LASTEVENT: nil)
51
+
52
+
53
+ #
54
+ module C
55
+
56
+ # Lifecycle Functions (MIDI Sequencer).
57
+ #
58
+ #
59
+
60
+ # Create a new sequencer event structure.
61
+ extern 'fluid_event_t* new_fluid_event(void)'
62
+
63
+ # Delete a sequencer event structure.
64
+ extern 'void delete_fluid_event(fluid_event_t*)'
65
+
66
+
67
+ # Functions.
68
+ #
69
+ #
70
+
71
+ # Set a sequencer event to be a all notes off event.
72
+ extern 'void fluid_event_all_notes_off(fluid_event_t*, int)'
73
+
74
+ # Set a sequencer event to be an all sounds off event.
75
+ extern 'void fluid_event_all_sounds_off(fluid_event_t*, int)'
76
+
77
+ # Set a sequencer event to be a bank select event.
78
+ extern 'void fluid_event_bank_select(fluid_event_t*, int, short)'
79
+
80
+ # Set a sequencer event to be a channel-wide aftertouch event.
81
+ extern 'void fluid_event_channel_pressure(fluid_event_t*, int, int)'
82
+
83
+ # Set a sequencer event to be a chorus send event.
84
+ extern 'void fluid_event_chorus_send(fluid_event_t*, int, int)'
85
+
86
+ # Set a sequencer event to be a MIDI control change event.
87
+ extern 'void fluid_event_control_change(fluid_event_t*, int, short, int)'
88
+
89
+ # Transforms an incoming MIDI event (from a MIDI driver or MIDI router)
90
+ # to a sequencer event.
91
+ extern 'int fluid_event_from_midi_event' +
92
+ '(fluid_event_t*, fluid_midi_event_t*)'
93
+
94
+
95
+ ### getters.
96
+
97
+ # Get the MIDI bank field from a sequencer event structure.
98
+ extern 'short fluid_event_get_bank(fluid_event_t*)'
99
+
100
+ # Get the MIDI channel field from a sequencer event structure.
101
+ extern 'int fluid_event_get_channel(fluid_event_t*)'
102
+
103
+ # Get the MIDI control number field from a sequencer event structure.
104
+ extern 'short fluid_event_get_control(fluid_event_t*)'
105
+
106
+ # Get the data field from a sequencer event structure.
107
+ extern 'void* fluid_event_get_data(fluid_event_t*)'
108
+
109
+ # Get the dest sequencer client from a sequencer event structure.
110
+ extern 'fluid_seq_id_t fluid_event_get_dest(fluid_event_t*)'
111
+
112
+ # Get the duration field from a sequencer event structure.
113
+ extern 'unsigned int fluid_event_get_duration(fluid_event_t*)'
114
+
115
+ # Get the MIDI note field from a sequencer event structure.
116
+ extern 'short fluid_event_get_key(fluid_event_t*)'
117
+
118
+ # Get the pitch field from a sequencer event structure.
119
+ extern 'int fluid_event_get_pitch(fluid_event_t*)'
120
+
121
+ # Get the MIDI program field from a sequencer event structure.
122
+ extern 'int fluid_event_get_program(fluid_event_t*)'
123
+
124
+ # Gets time scale field from a sequencer event structure.
125
+ extern 'double fluid_event_get_scale(fluid_event_t*)'
126
+
127
+ # Get the SoundFont ID field from a sequencer event structure.
128
+ extern 'unsigned int fluid_event_get_sfont_id(fluid_event_t*)'
129
+
130
+ # Get the source sequencer client from a sequencer event structure.
131
+ extern 'fluid_seq_id_t fluid_event_get_source(fluid_event_t*)'
132
+
133
+ # Get the event type (fluid_seq_event_type) field from a sequencer
134
+ # event structure.
135
+ extern 'int fluid_event_get_type(fluid_event_t*)'
136
+
137
+ # Get the value field from a sequencer event structure.
138
+ extern 'int fluid_event_get_value(fluid_event_t*)'
139
+
140
+ # Get the MIDI velocity field from a sequencer event structure.
141
+ extern 'short fluid_event_get_velocity(fluid_event_t*)'
142
+
143
+ ### .
144
+
145
+ # Set a sequencer event to be a polyphonic aftertouch event.
146
+ extern 'void fluid_event_key_pressure(fluid_event_t*, int, short, int)'
147
+
148
+ # Set a sequencer event to be a modulation event.
149
+ extern 'void fluid_event_modulation(fluid_event_t*, int, int)'
150
+
151
+ # Set a sequencer event to be a note duration event.
152
+ extern 'void fluid_event_note' +
153
+ '(fluid_event_t*, int, short, short, unsigned int)'
154
+
155
+ # Set a sequencer event to be a note off event.
156
+ extern 'void fluid_event_noteoff(fluid_event_t*, int, short)'
157
+
158
+ # Set a sequencer event to be a note on event.
159
+ extern 'void fluid_event_noteon(fluid_event_t*, int, short, short)'
160
+
161
+ # Set a sequencer event to be a stereo pan event.
162
+ extern 'void fluid_event_pan(fluid_event_t*, int, int)'
163
+
164
+ # Set a sequencer event to be a pitch bend event.
165
+ extern 'void fluid_event_pitch_bend(fluid_event_t*, int, int)'
166
+
167
+ # Set a sequencer event to be a pitch wheel sensitivity event.
168
+ extern 'void fluid_event_pitch_wheelsens(fluid_event_t*, int, int)'
169
+
170
+ # Set a sequencer event to be a program change event.
171
+ extern 'void fluid_event_program_change(fluid_event_t*, int, int)'
172
+
173
+ # Set a sequencer event to be a program select event.
174
+ extern 'void fluid_event_program_select' +
175
+ '(fluid_event_t*, int, unsigned int, short, short)'
176
+
177
+ # Set a sequencer event to be a reverb send event.
178
+ extern 'void fluid_event_reverb_send(fluid_event_t*, int, int)'
179
+
180
+ # Set a sequencer event to be a scale change event.
181
+ extern 'void fluid_event_scale(fluid_event_t*, double)'
182
+
183
+ # Set destination of this sequencer event, i.e.
184
+ extern 'void fluid_event_set_dest(fluid_event_t*, fluid_seq_id_t)'
185
+
186
+ # Set source of a sequencer event.
187
+ extern 'void fluid_event_set_source(fluid_event_t*, fluid_seq_id_t)'
188
+
189
+ # Set a sequencer event to be a MIDI sustain event.
190
+ extern 'void fluid_event_sustain(fluid_event_t*, int, int)'
191
+
192
+ # Set a sequencer event to be a midi system reset event.
193
+ extern 'void fluid_event_system_reset(fluid_event_t*)'
194
+
195
+ # Set a sequencer event to be a timer event.
196
+ extern 'void fluid_event_timer(fluid_event_t*, void*)'
197
+
198
+ # Set a sequencer event to be an unregistering event.
199
+ extern 'void fluid_event_unregistering(fluid_event_t*)'
200
+
201
+ # Set a sequencer event to be a volume event.
202
+ extern 'void fluid_event_volume(fluid_event_t*, int, int)'
203
+
204
+ end
205
+ end
206
+
207
+
208
+ #
209
+ #
210
+ #
211
+ class FiddleFluidSynth
212
+
213
+ #
214
+ module SequencerEventIF
215
+ module EventIF; end
216
+ end
217
+
218
+ #
219
+ extend SequencerEventIF
220
+ include SequencerEventIF
221
+
222
+ end
223
+
224
+
225
+ # Lifecycle Functions (SequencerEventIF).
226
+ #
227
+ #
228
+ class FiddleFluidSynth
229
+ module SequencerEventIF
230
+
231
+ #
232
+ def event_new()
233
+ ret = C.new_fluid_event()
234
+ if ret.nil? || ret.null?
235
+ ret = nil
236
+ else
237
+ ret.extend(EventIF)
238
+ end
239
+ ret
240
+ end
241
+
242
+ def event_delete( ev )
243
+ ret = C.delete_fluid_event(ev)
244
+ ret
245
+ end
246
+
247
+ #ng. def seq_event( type, ..., &blk )
248
+ def seq_event( type, ... )
249
+ ev = event_new()
250
+ ev.set_type(type, ...)
251
+
252
+ # blk.(ev)
253
+ yield(ev)
254
+
255
+ event_delete(ev)
256
+ end
257
+
258
+ end
259
+ end
260
+
261
+
262
+ # Functions (SequencerEventIF).
263
+ #
264
+ #
265
+ class FiddleFluidSynth
266
+ module SequencerEventIF
267
+
268
+ ### getters.
269
+
270
+ def event_get_bank( ev )
271
+ ret = C.fluid_event_get_bank(ev)
272
+ ret
273
+ end
274
+ alias event_get_bknum event_get_bank
275
+
276
+ def event_get_channel( ev )
277
+ ret = C.fluid_event_get_channel(ev)
278
+ ret
279
+ end
280
+
281
+ def event_get_control( ev )
282
+ ret = C.fluid_event_get_control(ev)
283
+ ret
284
+ end
285
+
286
+ def event_get_data( ev )
287
+ ret = C.fluid_event_get_data(ev)
288
+ ret
289
+ end
290
+
291
+ def event_get_dest( ev )
292
+ ret = C.fluid_event_get_dest(ev)
293
+ ret
294
+ end
295
+
296
+ def event_get_duration( ev )
297
+ ret = C.fluid_event_get_duration(ev)
298
+ ret
299
+ end
300
+
301
+ def event_get_key( ev )
302
+ ret = C.fluid_event_get_key(ev)
303
+ ret
304
+ end
305
+
306
+ def event_get_pitch( ev )
307
+ ret = C.fluid_event_get_pitch(ev)
308
+ ret
309
+ end
310
+
311
+ def event_get_program( ev )
312
+ ret = C.fluid_event_get_program(ev)
313
+ ret
314
+ end
315
+
316
+ def event_get_scale( ev )
317
+ ret = C.fluid_event_get_scale(ev)
318
+ ret
319
+ end
320
+
321
+ def event_get_sfont_id( ev )
322
+ ret = C.fluid_event_get_sfont_id(ev)
323
+ ret
324
+ end
325
+ alias event_get_sfid event_get_sfont_id
326
+
327
+ def event_get_source( ev )
328
+ ret = C.fluid_event_get_source(ev)
329
+ ret
330
+ end
331
+ alias event_get_src event_get_source
332
+
333
+ def event_get_type( ev )
334
+ ret = C.fluid_event_get_type(ev)
335
+ ret
336
+ end
337
+
338
+ def event_get_value( ev )
339
+ ret = C.fluid_event_get_value(ev)
340
+ ret
341
+ end
342
+
343
+ def event_get_velocity( ev )
344
+ ret = C.fluid_event_get_velocity(ev)
345
+ ret
346
+ end
347
+
348
+
349
+ ### Type Setters.
350
+
351
+ #
352
+ def event_note( ev, ch: , key: , vel: , duration: )
353
+ ret = C.fluid_event_note(ev, ch, key, vel, duration)
354
+ ret
355
+ end
356
+
357
+ def event_noteon( ev, ch: , key: , vel: )
358
+ ret = C.fluid_event_noteon(ev, ch, key, vel)
359
+ ret
360
+ end
361
+
362
+ def event_noteoff( ev, ch: , key: )
363
+ ret = C.fluid_event_noteoff(ev, ch, key)
364
+ ret
365
+ end
366
+
367
+ #
368
+ def event_all_sounds_off( ev, ch: )
369
+ ret = C.fluid_event_all_sounds_off(ev, ch)
370
+ ret
371
+ end
372
+
373
+ def event_all_notes_off( ev, ch: )
374
+ ret = C.fluid_event_all_notes_off(ev, ch)
375
+ ret
376
+ end
377
+
378
+ def event_bank_select( ev, ch: , bknum: )
379
+ ret = C.fluid_event_bank_select(ev, ch, bknum)
380
+ ret
381
+ end
382
+
383
+ # def event_program_change( ev, ch: , prenum: )
384
+ def event_program_change( ev, ch: , pgnum: nil, prenum: nil,
385
+ _pgnum: pgnum||prenum)
386
+ ret = C.fluid_event_program_change(ev, ch, _pgnum)
387
+ ret
388
+ end
389
+
390
+ def event_program_select( ev, ch: , sfid: , bknum: ,
391
+ prenum: nil, pgnum: nil,
392
+ _prenum: prenum||pgnum )
393
+ ret = C.fluid_event_program_select(ev, ch, sfid, bknum, _prenum)
394
+ ret
395
+ end
396
+
397
+ # def event_pitch_bend( ev, ch: , val: )
398
+ def event_pitch_bend( ev, ch: , pitch: nil, val: nil,
399
+ _pitch: pitch || val)
400
+ ret = C.fluid_event_pitch_bend(ev, ch, _pitch)
401
+ ret
402
+ end
403
+
404
+ def event_pitch_wheelsens( ev, ch: , val: )
405
+ ret = C.fluid_event_pitch_wheelsens(ev, ch, val)
406
+ ret
407
+ end
408
+
409
+ def event_modulation( ev, ch: , val: )
410
+ ret = C.fluid_event_modulation(ev, ch, val)
411
+ ret
412
+ end
413
+
414
+
415
+ #
416
+ def event_sustain( ev, ch: , val: )
417
+ ret = C.fluid_event_sustain(ev, ch, val)
418
+ ret
419
+ end
420
+
421
+ def event_control_change( ev, ch: , ctrl: , val: )
422
+ ret = C.fluid_event_control_change(ev, ch, ctrl, val)
423
+ ret
424
+ end
425
+
426
+ def event_pan( ev, ch: , val: )
427
+ ret = C.fluid_event_pan(ev, ch, val)
428
+ ret
429
+ end
430
+
431
+ def event_volume( ev, ch: , val: )
432
+ ret = C.fluid_event_volume(ev, ch, val)
433
+ ret
434
+ end
435
+
436
+ def event_reverb_send( ev, ch: , val: )
437
+ ret = C.fluid_event_reverb_send(ev, ch, val)
438
+ ret
439
+ end
440
+
441
+ def event_chorus_send( ev, ch: , val: )
442
+ ret = C.fluid_event_chorus_send(ev, ch, val)
443
+ ret
444
+ end
445
+
446
+ def event_timer( ev, data: )
447
+ ret = C.fluid_event_timer(ev,data)
448
+ ret
449
+ end
450
+
451
+ def event_channel_pressure( ev, ch: , val: )
452
+ ret = C.fluid_event_channel_pressure(ev, ch, val)
453
+ ret
454
+ end
455
+
456
+ def event_key_pressure( ev, ch: , key: , val: )
457
+ ret = C.fluid_event_key_pressure(ev,ch,key,val)
458
+ ret
459
+ end
460
+
461
+ def event_system_reset( ev )
462
+ ret = C.fluid_event_system_reset(ev)
463
+ ret
464
+ end
465
+
466
+ #
467
+ def event_unregistering( ev )
468
+ ret = C.fluid_event_unregistering(ev)
469
+ ret
470
+ end
471
+
472
+ def event_scale( ev, scale: )
473
+ ret = C.fluid_event_scale(ev,scale)
474
+ ret
475
+ end
476
+
477
+ # last_event.
478
+
479
+
480
+ ### .
481
+
482
+ #
483
+ #
484
+ # ==== Returns
485
+ # FLUID_OK or FLUID_FAILED.
486
+ #
487
+ def event_from_midi_event( ev, midi_ev: )
488
+ ret = C.fluid_event_from_midi_event(ev, midi_ev)
489
+ ret
490
+ end
491
+
492
+
493
+ ### setters.
494
+
495
+ def event_set_dest( ev, dest: )
496
+ ret = C.fluid_event_set_dest(ev,dest)
497
+ ret
498
+ end
499
+
500
+ def event_set_source( ev, src: )
501
+ ret = C.fluid_event_set_source(ev,src)
502
+ ret
503
+ end
504
+ alias event_set_src event_set_source
505
+
506
+
507
+ end
508
+ end
509
+
510
+
511
+ #
512
+ #
513
+ #
514
+ class FiddleFluidSynth
515
+ module SequencerEventIF::EventIF
516
+
517
+ # getter only.
518
+ #
519
+ #
520
+
521
+ [
522
+ :bank,
523
+ :channel,
524
+ :control,
525
+ :data,
526
+ # :dest,
527
+ :duration,
528
+ :key,
529
+ :pitch,
530
+ :program, # alias as pgnum, prenum.
531
+ :scale,
532
+ :sfont_id, # alias sfid.
533
+ # :source,
534
+ :type,
535
+ :value, # alias as val.
536
+ :velocity, # alias vel, velc.
537
+ ].each do |_meth|
538
+ meth_name = _meth
539
+ call_name = 'event_get_'+_meth.to_s
540
+
541
+ define_method(meth_name){|_self = self.itself|
542
+ FFS.send(call_name, _self)
543
+ }
544
+ end
545
+ # ex.
546
+ # def bank( _self = self.itself )
547
+ # FFS.event_get_bank(_self)
548
+ # end
549
+
550
+ ### Aliases.
551
+ alias bknum bank
552
+
553
+ alias ch channel
554
+ alias chan channel
555
+ alias ctrl control
556
+
557
+ alias pgnum program
558
+ alias prenum program
559
+
560
+ alias sfid sfont_id
561
+
562
+ alias val value
563
+ alias vel velocity
564
+ alias velc velocity
565
+
566
+ #
567
+ #
568
+ #
569
+ def from_midi_event( midi_ev, _self = self.itself )
570
+ FFS.event_from_midi_event(_self, midi_ev)
571
+ end
572
+
573
+ # getter+setter.
574
+ #
575
+ #
576
+ def dest( _self = self.itself )
577
+ FFS.event_get_dest(_self)
578
+ end
579
+ def dest=( _dst, _self = self.itself )
580
+ FFS.event_set_dest(_self, dest: _dst)
581
+ end
582
+ alias dst dest
583
+ alias dst= dest=
584
+
585
+ #
586
+ def source( _self = self.itself )
587
+ FFS.event_get_source(_self)
588
+ end
589
+ def source=( _src, _self = self.itself )
590
+ FFS.event_set_source(_self, src: _src)
591
+ end
592
+ alias src source
593
+ alias src= source=
594
+
595
+ # setters (types)
596
+ #
597
+ #
598
+ EVENT_TYPE_ARY = [
599
+ #
600
+ :note, :noteon, :noteoff,
601
+ :all_sounds_off, :all_notes_off,
602
+ :bank_select,
603
+ :program_change, :program_select,
604
+ :pitch_bend, :pitch_wheelsens,
605
+ :modulation,
606
+
607
+ #
608
+ :sustain,
609
+ :control_change,
610
+ :pan,
611
+ :volume,
612
+ :reverb_send,
613
+ :chorus_send,
614
+ :timer,
615
+ :channel_pressure, :key_pressure,
616
+ :system_reset,
617
+
618
+ #
619
+ :unregistering,
620
+ :scale,
621
+ # last.
622
+ ]
623
+ def set_type_alias( kn )
624
+ ret = kn.to_s.downcase.to_sym
625
+ case kn
626
+ when /^cc$/i
627
+ ret = :control_change
628
+ when /^mod$/i
629
+ ret = :modulation
630
+ when /^pc$/i
631
+ ret = :program_change
632
+ when /^psel$/i
633
+ ret = :program_select
634
+ when /^ps$/i
635
+ ret = :program_select
636
+ end
637
+
638
+ ret
639
+ end
640
+
641
+ def set_type( type, ... )
642
+ _type = set_type_alias(type)
643
+
644
+ type_s = _type.to_s.downcase
645
+ unless EVENT_TYPE_ARY.include? type_s.to_sym
646
+ raise "No such event type: #{type}. Select one of #{EVENT_TYPE_ARY}."
647
+ end
648
+
649
+ #
650
+ meth_type = "event_" + type_s
651
+ FFS.send(meth_type, self, ...)
652
+
653
+ end
654
+
655
+ # action (set_type).
656
+ #
657
+ #
658
+ tmp = EVENT_TYPE_ARY.dup
659
+ tmp = tmp - [ :scale ]
660
+ tmp.each do |_meth|
661
+ #
662
+ meth_name = "set_" + _meth.to_s
663
+
664
+ #
665
+ define_method(meth_name){| *args, **kwargs |
666
+ self.send('set_type', _meth, *args, **kwargs)
667
+ }
668
+ end
669
+ def set_scale( v )
670
+ set_type(:scale, scale: v)
671
+ end
672
+
673
+ end
674
+ end
675
+
676
+
677
+
678
+
679
+ #### endof filename: fiddle-fluidstynth/sequencer/events.rb