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,82 @@
1
+ #
2
+ # filename: fiddle-fluidstynth/logging/logging.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # Logging interface.
12
+ # ==== References
13
+ # - API References, [Logging](https://www.fluidsynth.org/api/group__logging.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ #
16
+
17
+ # Enumerations
18
+ #
19
+ #
20
+
21
+ ### FluidSynth log levels.
22
+ enum(
23
+ :fluid_log_level,
24
+ FLUID_PANIC: nil, # The synth can't function correctly any more.
25
+ FLUID_ERR: nil, # Serious error occurred.
26
+ FLUID_WARN: nil, # Warning.
27
+ FLUID_INFO: nil, # Verbose informational messages.
28
+ FLUID_DBG: nil, # Debugging messages.
29
+ LAST_LOG_LEVEL: nil)
30
+
31
+ #
32
+ module C
33
+
34
+ # Typedefs
35
+ #
36
+ #
37
+
38
+ # Log function handler callback type used by fluid_set_log_function().
39
+ typealias 'fluid_log_function_t', 'void*'
40
+
41
+ # Functions.
42
+ #
43
+ #
44
+
45
+ # Default log function which prints to the stderr.
46
+ extern 'void fluid_default_log_function(int, char*, void*)'
47
+
48
+ # Print a message to the log.
49
+ extern 'int fluid_log(int, char*, ...)'
50
+
51
+ # Installs a new log function for a specified log level.
52
+ extern 'fluid_log_function_t fluid_set_log_function' +
53
+ '(int, fluid_log_function_t, void*)'
54
+
55
+ end
56
+ end
57
+
58
+
59
+ #
60
+ #
61
+ #
62
+ class FiddleFluidSynth
63
+
64
+ def self.default_log_function( level: , message: , data: )
65
+ ret = C.fluid_default_log_function(level, message, data)
66
+ ret
67
+ end
68
+
69
+ def self.log( level: , fmt: , **args )
70
+ ret = C.fluid_log(level, fmt, args)
71
+ ret
72
+ end
73
+
74
+ def self.set_log_function( level: , func: , data: )
75
+ ret = C.fluid_set_log_function(level, func, data)
76
+ ret
77
+ end
78
+
79
+ end
80
+
81
+
82
+ #### endof filename: fiddle-fluidstynth/logging/logging.rb
@@ -0,0 +1,6 @@
1
+ #
2
+ # filename: fiddle-fluidsynth/logging.rb
3
+ #
4
+ require_relative "./logging/logging"
5
+
6
+ ####
@@ -0,0 +1,77 @@
1
+ #
2
+ # filename: fiddle-fluidstynth/midi_input/driver.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - fluidsynth.org, [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # Functions for managing MIDI drivers.
12
+ # ==== References
13
+ # - MIDI Input/[MIDI Driver](https://www.fluidsynth.org/api/group__midi__driver.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ #
16
+
17
+ #
18
+ module C
19
+
20
+
21
+ # Lifecycle Functions.
22
+ #
23
+ #
24
+
25
+ # Create a new MIDI driver instance.
26
+ # [MIDI driver settings](https://www.fluidsynth.org/api/settings_midi.html)
27
+ # [Settings Reference](https://www.fluidsynth.org/api/fluidsettings.html)
28
+ #
29
+ extern 'fluid_midi_driver_t* new_fluid_midi_driver' +
30
+ '(fluid_settings_t*, handle_midi_event_func_t*, void*)'
31
+
32
+ # Delete a MIDI driver instance.
33
+ extern 'void delete_fluid_midi_driver(fluid_midi_driver_t*)' #
34
+
35
+
36
+ # Functions.
37
+ #
38
+ #
39
+
40
+
41
+ end
42
+ end
43
+
44
+
45
+ #
46
+ #
47
+ #
48
+ class FiddleFluidSynth
49
+
50
+ #
51
+ #
52
+ # ==== See Also
53
+ # - util/callback.rb
54
+ #
55
+ def self.midi_driver_new( settings: ,
56
+ handler: Midi_event_func_default, handler_data: nil )
57
+ ret = C.new_fluid_midi_driver(settings, handler, handler_data)
58
+ ret
59
+ end
60
+ def midi_driver_new( settings = self.settings,
61
+ handler: Midi_event_func_default, handler_data: nil )
62
+ self.class.midi_driver_new(
63
+ settings: settings, handler: handler, handler_data: handler_data)
64
+ end
65
+
66
+ def self.midi_driver_delete( driver )
67
+ ret = C.delete_fluid_midi_driver(driver)
68
+ ret
69
+ end
70
+ def midi_driver_delete( driver )
71
+ self.class.midi_driver_delete(driver)
72
+ end
73
+
74
+ end
75
+
76
+
77
+ #### endof filename: fiddle-fluidstynth/midi_input/driver.rb
@@ -0,0 +1,255 @@
1
+ #
2
+ # filename: fiddle-fluidstynth/midi_input/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
+ # Functions to create, modify, query and delete MIDI events.
12
+ # ==== References
13
+ # - API Reference, MIDI Input/[MIDI Events](https://www.fluidsynth.org/api/group__midi__events.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ # ==== See Also
16
+ # - sequencer/events.rb
17
+
18
+ #
19
+ module C
20
+
21
+ # Lifecycle Functions.
22
+ #
23
+ #
24
+
25
+ # Create a MIDI event structure.
26
+ extern 'fluid_midi_event_t* new_fluid_midi_event(void)'
27
+
28
+ # Delete MIDI event structure.
29
+ extern 'void delete_fluid_midi_event(fluid_midi_event_t*)'
30
+
31
+
32
+ # Functions.
33
+ #
34
+ #
35
+
36
+ # Get the channel field of a MIDI event structure.
37
+ extern 'int fluid_midi_event_get_channel(fluid_midi_event_t*)'
38
+
39
+ # Get the control number of a MIDI event structure.
40
+ extern 'int fluid_midi_event_get_control(fluid_midi_event_t*)'
41
+
42
+ # Get the key field of a MIDI event structure.
43
+ extern 'int fluid_midi_event_get_key(fluid_midi_event_t*)'
44
+
45
+ # Get the lyric of a MIDI event structure.
46
+ # FIXME. void**
47
+ # extern 'int fluid_midi_event_get_lyrics(void*, void**, void*)'
48
+ extern 'int fluid_midi_event_get_lyrics(fluid_midi_event_t*, void*, void*)'
49
+
50
+ # Get the pitch field of a MIDI event structure.
51
+ extern 'int fluid_midi_event_get_pitch(fluid_midi_event_t*)'
52
+
53
+ # Get the program field of a MIDI event structure.
54
+ extern 'int fluid_midi_event_get_program(fluid_midi_event_t*)'
55
+
56
+ # Get the text of a MIDI event structure.
57
+ # FIXME. void**
58
+ # extern 'int fluid_midi_event_get_text(void*, void**, void*)'
59
+ extern 'int fluid_midi_event_get_text(fluid_midi_event_t*, void*, void*)'
60
+
61
+ # Get the event type field of a MIDI event structure.
62
+ extern 'int fluid_midi_event_get_type(fluid_midi_event_t*)'
63
+
64
+ # Get the value field from a MIDI event structure.
65
+ extern 'int fluid_midi_event_get_value(fluid_midi_event_t*)'
66
+
67
+ # Get the velocity field of a MIDI event structure.
68
+ extern 'int fluid_midi_event_get_velocity(fluid_midi_event_t*)'
69
+
70
+ ###
71
+
72
+ # Set the channel field of a MIDI event structure.
73
+ extern 'int fluid_midi_event_set_channel(fluid_midi_event_t*, int)'
74
+
75
+ # Set the control field of a MIDI event structure.
76
+ extern 'int fluid_midi_event_set_control(fluid_midi_event_t*, int)'
77
+
78
+ # Set the key field of a MIDI event structure.
79
+ extern 'int fluid_midi_event_set_key(fluid_midi_event_t*, int)'
80
+
81
+ # Assign lyric data to a MIDI event structure.
82
+ extern 'int fluid_midi_event_set_lyrics' +
83
+ '(fluid_midi_event_t*, void*, int, int)'
84
+
85
+ # Set the pitch field of a MIDI event structure.
86
+ extern 'int fluid_midi_event_set_pitch(fluid_midi_event_t*, int)'
87
+
88
+ # Set the program field of a MIDI event structure.
89
+ extern 'int fluid_midi_event_set_program(fluid_midi_event_t*, int)'
90
+
91
+ # Assign sysex data to a MIDI event structure.
92
+ extern 'int fluid_midi_event_set_sysex(fluid_midi_event_t*, void*, int, int)'
93
+
94
+ # Assign text data to a MIDI event structure.
95
+ extern 'int fluid_midi_event_set_text(fluid_midi_event_t*, void*, int, int)'
96
+
97
+ # Set the event type field of a MIDI event structure.
98
+ extern 'int fluid_midi_event_set_type(fluid_midi_event_t*, int)'
99
+
100
+ # Set the value field of a MIDI event structure.
101
+ extern 'int fluid_midi_event_set_value(fluid_midi_event_t*, int)'
102
+
103
+ # Set the velocity field of a MIDI event structure.
104
+ extern 'int fluid_midi_event_set_velocity(fluid_midi_event_t*, int)'
105
+
106
+
107
+ end
108
+ end
109
+
110
+
111
+ # Lifecycle Functions.
112
+ #
113
+ #
114
+ class FiddleFluidSynth
115
+
116
+ def self.midi_event_new()
117
+ ret = C.new_fluid_midi_event()
118
+ ret
119
+ end
120
+ def midi_event_new()
121
+ self.class.midi_event_new()
122
+ end
123
+
124
+ def self.midi_event_delete( ev )
125
+ ret = C.delete_fluid_midi_event(ev)
126
+ ret
127
+ end
128
+ def midi_event_delete( ev )
129
+ self.class.midi_event_delete(ev)
130
+ end
131
+
132
+ end
133
+
134
+
135
+ # Functions.
136
+ #
137
+ #
138
+
139
+ ### getter-related midi event.
140
+ class FiddleFluidSynth
141
+
142
+ def midi_event_get_channel( ev )
143
+ ret = C.fluid_midi_event_get_channel(ev)
144
+ ret
145
+ end
146
+
147
+ def midi_event_get_control( ev )
148
+ ret = C.fluid_midi_event_get_control(ev)
149
+ ret
150
+ end
151
+
152
+ def midi_event_get_key( ev )
153
+ ret = C.fluid_midi_event_get_key(ev)
154
+ ret
155
+ end
156
+
157
+ def midi_event_get_lyrics( ev, data, size )
158
+ ret = C.fluid_midi_event_get_lyrics(ev, data, size)
159
+ ret
160
+ end
161
+
162
+ def midi_event_get_pitch( ev )
163
+ ret = C.fluid_midi_event_get_pitch(ev)
164
+ ret
165
+ end
166
+
167
+ def midi_event_get_program( ev )
168
+ ret = C.fluid_midi_event_get_program(ev)
169
+ ret
170
+ end
171
+
172
+ def midi_event_get_text( ev, data: , size: )
173
+ ret = C.fluid_midi_event_get_text(ev, data, size)
174
+ ret
175
+ end
176
+
177
+ def midi_event_get_type( ev )
178
+ ret = C.fluid_midi_event_get_type(ev)
179
+ ret
180
+ end
181
+
182
+ def midi_event_get_value( ev )
183
+ ret = C.fluid_midi_event_get_value(ev)
184
+ ret
185
+ end
186
+
187
+ def midi_event_get_velocity( ev )
188
+ ret = C.fluid_midi_event_get_velocity(ev)
189
+ ret
190
+ end
191
+
192
+ end
193
+
194
+ ### setter-related midi events.
195
+ class FiddleFluidSynth
196
+
197
+ def midi_event_set_channel( ev, ch: )
198
+ ret = C.fluid_midi_event_set_channel(ev, ch)
199
+ ret
200
+ end
201
+
202
+ def midi_event_set_control( ev, ctrl: )
203
+ ret = C.fluid_midi_event_set_control(ev, ctrl)
204
+ ret
205
+ end
206
+
207
+ def midi_event_set_key( ev, key: )
208
+ ret = C.fluid_midi_event_set_key(ev, key)
209
+ ret
210
+ end
211
+
212
+ def midi_event_set_lyrics( ev, data: , size: , dynamic: )
213
+ ret = C.fluid_midi_event_set_lyrics(ev, data, size, dynamic)
214
+ ret
215
+ end
216
+
217
+ def midi_event_set_pitch( ev, val: )
218
+ ret = C.fluid_midi_event_set_pitch(ev, val)
219
+ ret
220
+ end
221
+
222
+ def midi_event_set_program( ev, val: )
223
+ ret = C.fluid_midi_event_set_program(ev, val)
224
+ ret
225
+ end
226
+
227
+ def midi_event_set_sysex( ev, data: , size: , dynamic: )
228
+ ret = C.fluid_midi_event_set_sysex(ev, data, size, dynamic)
229
+ ret
230
+ end
231
+
232
+ def midi_event_set_text( ev, data: , size: , dynamic: )
233
+ ret = C.fluid_midi_event_set_text(ev, data, size, dynamic)
234
+ ret
235
+ end
236
+
237
+ def midi_event_set_type( ev, type: )
238
+ ret = C.fluid_midi_event_set_type(ev, type)
239
+ ret
240
+ end
241
+
242
+ def midi_event_set_value( ev, val: )
243
+ ret = C.fluid_midi_event_set_value(ev, val)
244
+ ret
245
+ end
246
+
247
+ def midi_event_set_velocity( ev, val: )
248
+ ret = C.fluid_midi_event_set_velocity(ev, val)
249
+ ret
250
+ end
251
+
252
+ end
253
+
254
+
255
+ #### endof filename: fiddle-fluidstynth/midi_input/events.rb
@@ -0,0 +1,70 @@
1
+ #
2
+ # filename: fiddle-fluidstynth/midi_input/midi_input.rb
3
+ #
4
+
5
+
6
+ # References
7
+ # - fluidsynth.org, [API Reference](https://www.fluidsynth.org/api/modules.html)
8
+ #
9
+ class FiddleFluidSynth
10
+
11
+ # MIDI Input Subsystem.
12
+ # ==== References
13
+ # - MIDI Input/[MIDI Driver](https://www.fluidsynth.org/api/group__midi__driver.html)
14
+ # - [library fiddle](https://docs.ruby-lang.org/ja/latest/library/fiddle.html)
15
+ #
16
+
17
+ #
18
+ module C
19
+
20
+ # Typedefs.
21
+ #
22
+ #
23
+
24
+ # Generic callback function for MIDI event handler.
25
+ # typedef int(*handle_midi_event_func_t) (void *data, fluid_midi_event_t *event)
26
+ typealias 'handle_midi_event_func_t', 'void*'
27
+
28
+ # Generic callback function fired once by MIDI tick change.
29
+ # typedef int(*handle_midi_tick_func_t) (void *data, int tick)
30
+ typealias 'handle_midi_tick_func_t', 'void*'
31
+
32
+
33
+ # Lifecycle Functions.
34
+ #
35
+ #
36
+
37
+
38
+ # Functions.
39
+ #
40
+ #
41
+
42
+ # Handle MIDI event from MIDI router, used as a callback function.
43
+ extern 'int fluid_synth_handle_midi_event(void*, fluid_midi_event_t*)'
44
+
45
+ end
46
+ end
47
+
48
+
49
+ #
50
+ #
51
+ #
52
+ class FiddleFluidSynth
53
+
54
+ #
55
+ # ==== See ALso
56
+ # - midi_input/router.rb
57
+ # - util/callback.rb:define_tick_callback().
58
+ #
59
+ def self.synth_handle_midi_event( data, event )
60
+ ret = C.fluid_synth_handle_midi_event(data, event)
61
+ ret
62
+ end
63
+ def synth_handle_midi_event( data, event )
64
+ self.class.synth_handle_midi_event(data, event)
65
+ end
66
+
67
+ end
68
+
69
+
70
+ #### endof filename: fiddle-fluidstynth/midi_input/midi_input.rb