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,289 @@
1
+ #
2
+ # filename: fiddle-fluidsynth/midi_input/player.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - fluidsynth.org, [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # Parse standard MIDI files and emit MIDI events.
12
+ # ==== References
13
+ # - MIDI Input/[MIDI File Player](https://www.fluidsynth.org/api/group__midi__player.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ #
16
+
17
+ #
18
+ # [](https://www.fluidsynth.org/api/group__midi__player.html#gac792e9405fca53c296f7cef4d5fadfde)
19
+ #
20
+ enum(
21
+ :fluid_player_set_tempo_type,
22
+ FLUID_PLAYER_TEMPO_INTERNAL: nil,
23
+ FLUID_PLAYER_TEMPO_EXTERNAL_BPM: nil,
24
+ FLUID_PLAYER_TEMPO_EXTERNAL_MIDI: nil,
25
+ FLUID_PLAYER_TEMPO_NBR: nil,
26
+ )
27
+
28
+ #
29
+ # - [](https://www.fluidsynth.org/api/group__midi__player.html#ga5ec93766f61465dedbbac9bdb76ced83)
30
+ #
31
+ enum(
32
+ :fluid_player_status,
33
+ FLUID_PLAYER_READY: nil,
34
+ FLUID_PLAYER_PLAYING: nil,
35
+ FLUID_PLAYER_STOPPING: nil,
36
+ FLUID_PLAYER_DONE: nil,
37
+ )
38
+
39
+ #
40
+ module C
41
+
42
+
43
+ # Lifecycle Functions.
44
+ #
45
+ #
46
+
47
+ # Create a new MIDI player.
48
+ extern 'fluid_player_t* new_fluid_player(fluid_synth_t*)'
49
+
50
+ # Delete a MIDI player instance.
51
+ extern 'void delete_fluid_player(fluid_player_t*)'
52
+
53
+
54
+ # Functions.
55
+ #
56
+ #
57
+
58
+ # Add a MIDI file to a player queue.
59
+ # extern 'int fluid_player_add(void* player, const char*)' # also ok.
60
+ extern 'int fluid_player_add(fluid_player_t*, char*)'
61
+
62
+ # Add a MIDI file to a player queue, from a buffer in memory.
63
+ extern 'int fluid_player_add_mem(fluid_player_t*, void*, size_t)'
64
+
65
+ # Get the tempo currently used by a MIDI player.
66
+ extern 'int fluid_player_get_bpm(fluid_player_t*)'
67
+
68
+ # Get the number of tempo ticks passed.
69
+ extern 'int fluid_player_get_current_tick(fluid_player_t*)'
70
+
71
+ # Get the division currently used by a MIDI player.
72
+ extern 'int fluid_player_get_division(fluid_player_t*)'
73
+
74
+ # Get the tempo currently used by a MIDI player.
75
+ extern 'int fluid_player_get_midi_tempo(fluid_player_t*)'
76
+
77
+ # Get MIDI player status.
78
+ extern 'int fluid_player_get_status(fluid_player_t*)'
79
+
80
+ # Looks through all available MIDI tracks and gets the absolute tick
81
+ # of the very last event to play.
82
+ extern 'int fluid_player_get_total_ticks(fluid_player_t*)'
83
+
84
+ # Wait for a MIDI player until the playback has been stopped.
85
+ extern 'int fluid_player_join(fluid_player_t*)'
86
+
87
+ # Activates play mode for a MIDI player if not already playing.
88
+ extern 'int fluid_player_play(fluid_player_t*)'
89
+
90
+ # Seek in the currently playing file.
91
+ extern 'int fluid_player_seek(fluid_player_t*, int)'
92
+
93
+ ### setters.
94
+
95
+ # Set the tempo of a MIDI player in beats per minute.
96
+ extern 'int fluid_player_set_bpm(fluid_player_t*, int)'
97
+
98
+ # Enable looping of a MIDI player.
99
+ extern 'int fluid_player_set_loop(fluid_player_t*, int)'
100
+
101
+ # Set the tempo of a MIDI player.
102
+ extern 'int fluid_player_set_midi_tempo(fluid_player_t*, int)'
103
+
104
+ # Change the MIDI callback function.
105
+ extern 'int fluid_player_set_playback_callback' +
106
+ '(fluid_player_t*, handle_midi_event_func_t, void*)'
107
+
108
+ # Set the tempo of a MIDI player.
109
+ extern 'int fluid_player_set_tempo(fluid_player_t*, int, double)'
110
+
111
+ # Add a listener function for every MIDI tick change.
112
+ extern 'int fluid_player_set_tick_callback' +
113
+ '(fluid_player_t*, handle_midi_tick_func_t, void*)'
114
+ # '(fluid_player_t*, void*, void*)'
115
+
116
+ # Pauses the MIDI playback.
117
+ extern 'int fluid_player_stop(fluid_player_t*)'
118
+
119
+ end
120
+ end
121
+
122
+
123
+ # Lifecycle Functions.
124
+ #
125
+ #
126
+ class FiddleFluidSynth
127
+
128
+ def self.player_new( synth )
129
+ ret = C.new_fluid_player(synth)
130
+ ret
131
+ end
132
+ def player_new( synth = self.synth )
133
+ self.class.player_new(synth)
134
+ end
135
+
136
+ def self.player_delete( player )
137
+ ret = C.delete_fluid_player(player)
138
+ ret
139
+ end
140
+ def player_delete( player = self.player )
141
+ self.class.player_delete(player)
142
+ end
143
+
144
+ end
145
+
146
+
147
+ #
148
+ #
149
+ #
150
+ class FiddleFluidSynth
151
+
152
+ # def player_add( file: , player: self.player )
153
+ def player_add( player = self.player, file: )
154
+ ret = C.fluid_player_add(player, file)
155
+ ret
156
+ end
157
+
158
+ def player_add_mem( player = self.player, buf: , size: )
159
+ ret = C.fluid_player_add_mem(player, buf, size)
160
+ ret
161
+ end
162
+
163
+ #
164
+ def player_get_bpm( player = self.player )
165
+ ret = C.fluid_player_get_bpm(player)
166
+ ret
167
+ end
168
+ alias :player_bpm :player_get_bpm
169
+
170
+ def player_get_current_tick( player = self.player )
171
+ ret = C.fluid_player_get_current_tick(player)
172
+ ret
173
+ end
174
+
175
+ def player_get_division( player = self.player )
176
+ ret = C.fluid_player_get_division(player)
177
+ ret
178
+ end
179
+
180
+ def player_get_midi_tempo( player = self.player )
181
+ ret = C.fluid_player_get_midi_tempo(player)
182
+ ret
183
+ end
184
+
185
+ def player_get_status( player = self.player )
186
+ ret = C.fluid_player_get_status(player)
187
+ ret
188
+ end
189
+ alias :player_status :player_get_status
190
+
191
+ def player_get_total_ticks( player = self.player )
192
+ ret = C.fluid_player_get_total_ticks(player)
193
+ ret
194
+ end
195
+
196
+ def player_join( player = self.player )
197
+ ret = C.fluid_player_join(player)
198
+ ret
199
+ end
200
+
201
+ def player_play( player = self.player )
202
+ ret = C.fluid_player_play(player)
203
+ ret
204
+ end
205
+
206
+ #
207
+ def player_seek( player = self.player, ticks: )
208
+ ret = C.fluid_player_seek(player, ticks)
209
+ ret
210
+ end
211
+
212
+ ### .
213
+
214
+ #
215
+ def player_set_bpm( player = self.player, bpm: )
216
+ deprecated_msg_instead('player_set_tempo()', meth: __method__)
217
+ ret = C.fluid_player_set_bmp(player, bpm)
218
+ ret
219
+ end
220
+
221
+ #
222
+ # ==== Args
223
+ # times:: Times left to loop the playlist. -1 means loop infinitely.
224
+ #
225
+ def player_set_loop( player = self.player, times: )
226
+ ret = C.fluid_player_set_loop(player, times)
227
+ ret
228
+ end
229
+
230
+ def player_set_midi_tempo( player = self.player, tempo: )
231
+ deprecated_msg_instead('player_set_tempo()', meth: __method__)
232
+ ret = C.fluid_player_set_midi_tempo(player, tempo)
233
+ ret
234
+ end
235
+
236
+ def player_set_playback_callback( player=self.player,
237
+ handler: , handler_data: )
238
+ ret = C.fluid_player_set_playback_callback(player, handler, handler_data)
239
+ ret
240
+ end
241
+
242
+ def player_set_tempo( player=self.player, tempo: )
243
+ ret = C.fluid_player_set_tempo(player, tempo)
244
+ ret
245
+ end
246
+
247
+ #
248
+ # ==== Args
249
+ # handler:: callback function address (in Fiddle::Pointer(FFI::Pointer)).
250
+ # handler_data:: Fiddle::Pointer.new(FFI::Pointer#address).
251
+ # (actually this arg is
252
+ # meaningless in Ruby. because we can use closure to describe
253
+ # callback function.)
254
+ # yeild::
255
+ # {|user_data, cur_tick| ... } is tick callback function, where
256
+ # cur_tick is current tick in MIDI file.
257
+ #
258
+ # ==== See Also
259
+ # - util/util.rb:define_tick_callback().
260
+ #
261
+ def player_set_tick_callback( player=self.player,
262
+ handler: nil, handler_data: nil )
263
+ #
264
+ if handler.nil? && block_given?
265
+ cb_ptr = self.define_tick_callback(){|user_data, cur_tick|
266
+ yield(user_data, cur_tick)
267
+ }
268
+ handler = cb_ptr
269
+ elsif !(handler.nil?)
270
+ # do nothing.
271
+ else
272
+ raise "Specify the handler in args or block."
273
+ end
274
+
275
+ #
276
+ ret = C.fluid_player_set_tick_callback(player, handler, handler_data)
277
+ ret
278
+ end
279
+
280
+ def player_stop( player = self.player )
281
+ ret = C.fluid_player_stop(player)
282
+ ret
283
+ end
284
+
285
+
286
+ end
287
+
288
+
289
+ #### endof filename: fiddle-fluidsynth/midi_input/player.rb
@@ -0,0 +1,225 @@
1
+ #
2
+ # filename: fiddle-fluidstynth/midi_input/router.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - fluidsynth.org, [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # Rule based transformation and filtering of MIDI events.
12
+ # ==== References
13
+ # - API Reference, MIDI Input/[MIDI Router](https://www.fluidsynth.org/api/group__midi__router.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ #
16
+
17
+ # MIDI router rule type.
18
+ #
19
+ #
20
+ enum(
21
+ :fluid_midi_router_rule_type,
22
+ FLUID_MIDI_ROUTER_RULE_NOTE: nil,
23
+ FLUID_MIDI_ROUTER_RULE_CC: nil,
24
+ FLUID_MIDI_ROUTER_RULE_PROG_CHANGE: nil,
25
+ FLUID_MIDI_ROUTER_RULE_PITCH_BEND: nil,
26
+ FLUID_MIDI_ROUTER_RULE_CHANNEL_PRESSURE: nil,
27
+ FLUID_MIDI_ROUTER_RULE_KEY_PRESSURE: nil,
28
+ FLUID_MIDI_ROUTER_RULE_COUNT: nil,
29
+ )
30
+
31
+ #
32
+ module C
33
+
34
+
35
+ # Lifecycle Functions (MIDI Router).
36
+ #
37
+ #
38
+
39
+ # Create a new midi router.
40
+ extern 'fluid_midi_router_t* new_fluid_midi_router' +
41
+ '(fluid_settings_t*, handle_midi_event_func_t, void*)'
42
+
43
+ # Delete a MIDI router instance.
44
+ extern 'void delete_fluid_midi_router(fluid_midi_router_t*)'
45
+
46
+
47
+ # Lifecycle Functions (MIDI Router Rule).
48
+ #
49
+ #
50
+
51
+ # Create a new MIDI router rule.
52
+ extern 'fluid_midi_router_rule_t* new_fluid_midi_router_rule(void)'
53
+
54
+ # Free a MIDI router rule.
55
+ extern 'void delete_fluid_midi_router_rule(fluid_midi_router_rule_t*)'
56
+
57
+
58
+ # Functions.
59
+ #
60
+ #
61
+
62
+ # MIDI event callback function to display event information to stdout.
63
+ extern 'int fluid_midi_dump_postrouter(void*, fluid_midi_event_t*)'
64
+
65
+ # MIDI event callback function to display event information to stdout.
66
+ extern 'int fluid_midi_dump_prerouter(void*, fluid_midi_event_t*)'
67
+
68
+ # Add a rule to a MIDI router.
69
+ extern 'int fluid_midi_router_add_rule' +
70
+ '(fluid_midi_router_t*, fluid_midi_router_rule_t*, int)'
71
+
72
+ # Clear all rules in a MIDI router.
73
+ extern 'int fluid_midi_router_clear_rules(fluid_midi_router_t*)'
74
+
75
+ # Handle a MIDI event through a MIDI router instance.
76
+ extern 'int fluid_midi_router_handle_midi_event(void*, fluid_midi_event_t*)'
77
+
78
+ # Set the channel portion of a rule.
79
+ extern 'void fluid_midi_router_rule_set_chan' +
80
+ '(fluid_midi_router_rule_t*, int, int, float, int)'
81
+
82
+ # Set the first parameter portion of a rule.
83
+ extern 'void fluid_midi_router_rule_set_param1' +
84
+ '(fluid_midi_router_rule_t*, int, int, float, int)'
85
+
86
+ # Set the second parameter portion of a rule.
87
+ extern 'void fluid_midi_router_rule_set_param2' +
88
+ '(fluid_midi_router_rule_t*, int, int, float, int)'
89
+
90
+ # Set a MIDI router to use default "unity" rules.
91
+ extern 'int fluid_midi_router_set_default_rules(fluid_midi_router_t*)'
92
+
93
+
94
+ end
95
+ end
96
+
97
+
98
+ # Lifecycle Functions.
99
+ #
100
+ #
101
+ class FiddleFluidSynth
102
+
103
+ ### Router.
104
+
105
+ #
106
+ # ==== See Also
107
+ # - fluid_synth_handle_midi_event()
108
+ # - util/callback.rb
109
+ #
110
+ # def midi_router_new( handler: , data: , settings: self.settings )
111
+ def self.midi_router_new( settings: ,
112
+ handler: Synth_handle_midi_event_default,
113
+ handler_data: nil )
114
+ ret = C.new_fluid_midi_router(settings, handler, handler_data)
115
+ ret
116
+ end
117
+ def midi_router_new( settings = self.settings,
118
+ handler: Synth_handle_midi_event_default,
119
+ handler_data: nil )
120
+ self.class.midi_router_new(
121
+ settings: settings, handler: handler, handler_data: handler_data)
122
+ end
123
+
124
+ def self.midi_router_delete( router )
125
+ ret = C.delete_fluid_midi_router(router)
126
+ ret
127
+ end
128
+ def midi_router_delete( router )
129
+ self.class.midi_router_delete(router)
130
+ end
131
+
132
+ ### Router Rule.
133
+
134
+ def self.midi_router_rule_new
135
+ ret = C.new_fluid_midi_router_rule()
136
+ ret
137
+ end
138
+ def midi_router_rule_new
139
+ self.class.midi_router_rule_new
140
+ end
141
+
142
+ def self.midi_router_rule_delete( rule )
143
+ ret = C.delete_fluid_midi_router_rule(rule)
144
+ ret
145
+ end
146
+ def midi_router_rule_delete( rule )
147
+ self.class.midi_router_rule_delete(rule)
148
+ end
149
+
150
+ end
151
+
152
+ # Functions (Router).
153
+ #
154
+ #
155
+ class FiddleFluidSynth
156
+
157
+ def midi_dump_postrouter( data: , event: )
158
+ ret = C.fluid_midi_dump_postrouter(data, event)
159
+ ret
160
+ end
161
+
162
+ def midi_dump_prerouter( data: , event: )
163
+ ret = C.fluid_midi_dump_prerouter(data, event)
164
+ ret
165
+ end
166
+
167
+ end
168
+
169
+
170
+ # Functions (Router Rules).
171
+ #
172
+ #
173
+ class FiddleFluidSynth
174
+
175
+ #
176
+ def midi_router_add_rule( router, rule: , type: )
177
+ ret = C.fluid_midi_router_add_rule(router, rule, type)
178
+ ret
179
+ end
180
+
181
+ def midi_router_clear_rules( router )
182
+ ret = C.fluid_midi_router_clear_rules(router)
183
+ ret
184
+ end
185
+
186
+ #
187
+ # ==== See Also
188
+ # - util/callback.rb
189
+ #
190
+ def self.midi_router_handle_midi_event( data, event )
191
+ ret = C.fluid_midi_router_handle_midi_event(data, event)
192
+ ret
193
+ end
194
+ def midi_router_handle_midi_event( data, event )
195
+ self.class.midi_router_handle_midi_event(data, event)
196
+ end
197
+
198
+ #
199
+ def midi_router_rule_set_chan( rule, min: , max: , mul: , add: )
200
+ ret = C.fluid_midi_router_rule_set_chan(rule,min,max,mul,add)
201
+ ret
202
+ end
203
+ alias midi_router_rule_set_ch midi_router_rule_set_chan
204
+
205
+ def midi_router_rule_set_param1( rule, min: , max: , mul: , add: )
206
+ ret = C.fluid_midi_router_rule_set_param1(rule,min,max,mul,add)
207
+ ret
208
+ end
209
+
210
+ def midi_router_rule_set_param2( rule, min: , max: , mul: , add: )
211
+ ret = C.fluid_midi_router_rule_set_param2(rule,min,max,mul,add)
212
+ ret
213
+ end
214
+
215
+ #
216
+ def midi_router_set_default_rules( router )
217
+ ret = C.fluid_midi_router_set_default_rules(router)
218
+ ret
219
+ end
220
+
221
+
222
+ end
223
+
224
+
225
+ #### endof filename: fiddle-fluidstynth/midi_input/router.rb
@@ -0,0 +1,11 @@
1
+ #
2
+ # filename: midi_input.rb
3
+ #
4
+ require_relative "./midi_input/midi_input"
5
+
6
+ require_relative "./midi_input/driver"
7
+ require_relative "./midi_input/events"
8
+ require_relative "./midi_input/player"
9
+ require_relative "./midi_input/router"
10
+
11
+ #### end.
@@ -0,0 +1,162 @@
1
+ #
2
+ # filename: misc/misc.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # Miscellaneous utility functions and defines.
12
+ # ==== References
13
+ # - [Miscellaneous](https://www.fluidsynth.org/api/group__misc.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ #
16
+
17
+ # Value that indicates failure, used by most libfluidsynth functions.
18
+ FLUID_FAILED = -1
19
+ # Value that indicates success, used by most libfluidsynth functions.
20
+ FLUID_OK = 0
21
+
22
+ # these constants are available via #version_str() and #version().
23
+ # FLUIDSYNTH_VERSION = "2.4.6"
24
+ # FLUIDSYNTH_VERSION_MAJOR = 2
25
+ # FLUIDSYNTH_VERSION_MICRO = 4
26
+ # FLUIDSYNTH_VERSION_MINOR = 6
27
+
28
+ #
29
+ module C
30
+
31
+
32
+ # Functions.
33
+ #
34
+ #
35
+
36
+ # Wrapper for free() that satisfies at least C90 requirements.
37
+ extern 'void fluid_free(void*)'
38
+
39
+ # Check if a file is a MIDI file.
40
+ extern 'int fluid_is_midifile(char*)'
41
+
42
+ # Check if a file is a SoundFont file.
43
+ extern 'int fluid_is_soundfont(char*)'
44
+
45
+ # Get FluidSynth runtime version.
46
+ extern 'void fluid_version(int*, int*, int*)'
47
+
48
+ # Get FluidSynth runtime version as a string.
49
+ extern 'char* fluid_version_str(void)'
50
+
51
+ end
52
+
53
+ end
54
+
55
+
56
+ #
57
+ #
58
+ #
59
+ class FiddleFluidSynth
60
+
61
+ def self.free( ptr )
62
+ ret = C.fluid_free(ptr)
63
+ ret
64
+ end
65
+ def free( ptr )
66
+ self.class.free(ptr)
67
+ end
68
+
69
+ def self.is_midifile( file )
70
+ ret = C.fluid_is_midifile(file)
71
+ ret
72
+ end
73
+ def is_midifile( file )
74
+ self.class.is_midifile(file)
75
+ end
76
+
77
+ def self.is_midifile?( file )
78
+ unless File.exist?(file)
79
+ raise "No such file: #{file}"
80
+ end
81
+
82
+ #ng. self.is_midifile(file) == C::FLUID_OK
83
+ self.is_midifile(file) != 0
84
+ end
85
+ def is_midifile?( file )
86
+ self.class.is_midifile?(file)
87
+ end
88
+
89
+
90
+ ### SoundFont
91
+
92
+ #
93
+ def self.is_soundfont( file )
94
+ ret = C.fluid_is_soundfont(file)
95
+ ret
96
+ end
97
+ def is_soundfont( file )
98
+ self.class.is_soundfont(file)
99
+ end
100
+
101
+ #
102
+ def self.is_soundfont?( file )
103
+ unless File.exist?(file)
104
+ raise "No such file: #{file}"
105
+ end
106
+
107
+ # self.is_soundfont(file) == C::FLUID_OK
108
+ self.is_soundfont(file) != 0
109
+ end
110
+ def is_soundfont?( file )
111
+ self.class.is_soundfont?(file)
112
+ end
113
+
114
+ #
115
+ def self.misc_version( major, micro, minor )
116
+ ret = C.fluid_version(major, micro, minor)
117
+ ret
118
+ end
119
+ def misc_version( major, micro, minor )
120
+ self.class.misc_version(major, micro, minor)
121
+ end
122
+
123
+ def self.misc_version_str
124
+ ret = C.fluid_version_str().to_s
125
+ ret
126
+ end
127
+ def misc_version_str
128
+ self.class.misc_version_str
129
+ end
130
+
131
+ end
132
+
133
+ #
134
+ #
135
+ #
136
+ class FiddleFluidSynth
137
+
138
+ def self.fluidsynth_version
139
+ ver_maj = Fiddle::Pointer.malloc_i
140
+ ver_mic = Fiddle::Pointer.malloc_i
141
+ ver_min = Fiddle::Pointer.malloc_i
142
+
143
+ misc_version(ver_maj, ver_mic, ver_min)
144
+ tmp = [ver_maj, ver_mic, ver_min].map{|e| e.decode1_i }
145
+
146
+ ret = tmp
147
+ ret
148
+ end
149
+ def fluidsynth_version; self.class.fluidsynth_version; end
150
+
151
+ def self.fluidsynth_version_str
152
+ # ret = C.fluid_version_str()
153
+ ret = misc_version_str()
154
+ ret
155
+ end
156
+ def fluidsynth_version_str; self.class.fluidsynth_version_str; end
157
+
158
+
159
+ end
160
+
161
+
162
+ #### endof filename: misc/misc.rb
@@ -0,0 +1,6 @@
1
+ #
2
+ #
3
+ #
4
+ require_relative "./misc/misc"
5
+
6
+ #