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.
- checksums.yaml +7 -0
- data/.standard.yml +3 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +138 -0
- data/Rakefile +14 -0
- data/examples/enum.rb +30 -0
- data/examples/example.sf2 +0 -0
- data/examples/ffs_arpeggio.rb +252 -0
- data/examples/ffs_example.rb +47 -0
- data/examples/ffs_fx.rb +200 -0
- data/examples/ffs_metronome.rb +260 -0
- data/examples/ffs_midiplay.rb +122 -0
- data/examples/ffs_simple.rb +45 -0
- data/examples/ffs_test1.rb +41 -0
- data/examples/ffs_test3.rb +50 -0
- data/examples/fiddle-pointer.rb +18 -0
- data/examples/presets-each.rb +66 -0
- data/examples/presets-full_scan.rb +59 -0
- data/examples/settings-each.rb +106 -0
- data/exe/ffs_midiplay.rb +122 -0
- data/lib/fiddle_fluidsynth/audio_output/driver.rb +104 -0
- data/lib/fiddle_fluidsynth/audio_output/file_renderer.rb +84 -0
- data/lib/fiddle_fluidsynth/audio_output.rb +7 -0
- data/lib/fiddle_fluidsynth/command_interface/command_interface.rb +90 -0
- data/lib/fiddle_fluidsynth/command_interface/handler.rb +95 -0
- data/lib/fiddle_fluidsynth/command_interface/server.rb +79 -0
- data/lib/fiddle_fluidsynth/command_interface/shell.rb +76 -0
- data/lib/fiddle_fluidsynth/command_interface.rb +9 -0
- data/lib/fiddle_fluidsynth/core_ext/fiddle.rb +142 -0
- data/lib/fiddle_fluidsynth/core_ext/module.rb +123 -0
- data/lib/fiddle_fluidsynth/fiddle_fluidsynth.rb +172 -0
- data/lib/fiddle_fluidsynth/logging/logging.rb +82 -0
- data/lib/fiddle_fluidsynth/logging.rb +6 -0
- data/lib/fiddle_fluidsynth/midi_input/driver.rb +77 -0
- data/lib/fiddle_fluidsynth/midi_input/events.rb +255 -0
- data/lib/fiddle_fluidsynth/midi_input/midi_input.rb +70 -0
- data/lib/fiddle_fluidsynth/midi_input/player.rb +289 -0
- data/lib/fiddle_fluidsynth/midi_input/router.rb +225 -0
- data/lib/fiddle_fluidsynth/midi_input.rb +11 -0
- data/lib/fiddle_fluidsynth/misc/misc.rb +162 -0
- data/lib/fiddle_fluidsynth/misc.rb +6 -0
- data/lib/fiddle_fluidsynth/sequencer/events.rb +679 -0
- data/lib/fiddle_fluidsynth/sequencer/sequencer.rb +384 -0
- data/lib/fiddle_fluidsynth/sequencer.rb +7 -0
- data/lib/fiddle_fluidsynth/settings/settings.rb +465 -0
- data/lib/fiddle_fluidsynth/settings.rb +6 -0
- data/lib/fiddle_fluidsynth/soundfonts/generators.rb +128 -0
- data/lib/fiddle_fluidsynth/soundfonts/loader.rb +506 -0
- data/lib/fiddle_fluidsynth/soundfonts/modulators.rb +247 -0
- data/lib/fiddle_fluidsynth/soundfonts/soundfonts.rb +64 -0
- data/lib/fiddle_fluidsynth/soundfonts/voices.rb +178 -0
- data/lib/fiddle_fluidsynth/soundfonts.rb +11 -0
- data/lib/fiddle_fluidsynth/synth/audio_rendering.rb +100 -0
- data/lib/fiddle_fluidsynth/synth/effect/chorus.rb +269 -0
- data/lib/fiddle_fluidsynth/synth/effect/iir_filter.rb +81 -0
- data/lib/fiddle_fluidsynth/synth/effect/ladspa.rb +172 -0
- data/lib/fiddle_fluidsynth/synth/effect/reverb.rb +207 -0
- data/lib/fiddle_fluidsynth/synth/effect.rb +10 -0
- data/lib/fiddle_fluidsynth/synth/midi/messages.rb +292 -0
- data/lib/fiddle_fluidsynth/synth/midi/setup.rb +235 -0
- data/lib/fiddle_fluidsynth/synth/midi/tuning.rb +128 -0
- data/lib/fiddle_fluidsynth/synth/midi.rb +9 -0
- data/lib/fiddle_fluidsynth/synth/params/params.rb +200 -0
- data/lib/fiddle_fluidsynth/synth/params.rb +8 -0
- data/lib/fiddle_fluidsynth/synth/soundfont_management.rb +210 -0
- data/lib/fiddle_fluidsynth/synth/synth.rb +114 -0
- data/lib/fiddle_fluidsynth/synth/voice_control.rb +94 -0
- data/lib/fiddle_fluidsynth/synth.rb +18 -0
- data/lib/fiddle_fluidsynth/types/types.rb +131 -0
- data/lib/fiddle_fluidsynth/types.rb +10 -0
- data/lib/fiddle_fluidsynth/util/callback.rb +585 -0
- data/lib/fiddle_fluidsynth/util/interface/settings.rb +689 -0
- data/lib/fiddle_fluidsynth/util/interface/soundfont.rb +115 -0
- data/lib/fiddle_fluidsynth/util/interface/soundfont_preset.rb +69 -0
- data/lib/fiddle_fluidsynth/util/interface/soundfont_sample.rb +61 -0
- data/lib/fiddle_fluidsynth/util/interface.rb +11 -0
- data/lib/fiddle_fluidsynth/util/module_hier.rb +403 -0
- data/lib/fiddle_fluidsynth/util/util.rb +467 -0
- data/lib/fiddle_fluidsynth/util-after.rb +12 -0
- data/lib/fiddle_fluidsynth/util.rb +37 -0
- data/lib/fiddle_fluidsynth/version.rb +10 -0
- data/lib/fiddle_fluidsynth.rb +57 -0
- data/sig/fiddle_fluidsynth.rbs +4 -0
- 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
|