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,115 @@
|
|
1
|
+
#
|
2
|
+
# filename: util/interface/soundfont.rb
|
3
|
+
#
|
4
|
+
require 'fiddle'
|
5
|
+
require 'fiddle/import'
|
6
|
+
|
7
|
+
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class FiddleFluidSynth
|
12
|
+
|
13
|
+
#
|
14
|
+
module Interface
|
15
|
+
module SoundFont; end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
# SoundFont getters/setters.
|
22
|
+
#
|
23
|
+
#
|
24
|
+
module FiddleFluidSynth::Interface
|
25
|
+
module SoundFont
|
26
|
+
|
27
|
+
FFS = FiddleFluidSynth
|
28
|
+
|
29
|
+
### from soundfonts/loader.rb
|
30
|
+
|
31
|
+
#
|
32
|
+
def data( _self: self.itself )
|
33
|
+
FFS.sfont_get_data(_self)
|
34
|
+
end
|
35
|
+
def set_data( data, _self: self.itself )
|
36
|
+
FFS.sfont_set_data(_self, data: data)
|
37
|
+
end
|
38
|
+
|
39
|
+
def id( _self: self.itself )
|
40
|
+
FFS.sfont_get_id(_self)
|
41
|
+
end
|
42
|
+
alias sfid id
|
43
|
+
|
44
|
+
def name( _self: self.itself )
|
45
|
+
FFS.sfont_get_name(_self)
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# ==== Args
|
50
|
+
# bknum:: bank number.
|
51
|
+
# prenum:: preset number.
|
52
|
+
# ==== Returns
|
53
|
+
# nil or Preset instance.
|
54
|
+
def preset( bknum: , prenum: , _self: self.itself )
|
55
|
+
FFS.sfont_get_preset(_self, bknum: bknum, prenum: prenum)
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
def preset_iter_reset( _self: self.itself )
|
60
|
+
FFS.sfont_iteration_start(_self)
|
61
|
+
end
|
62
|
+
|
63
|
+
def each_preset( _self: self.itself, debug_f: false, &blk )
|
64
|
+
#
|
65
|
+
# self.preset_iter_reset()
|
66
|
+
self.preset_iter_reset(_self: _self)
|
67
|
+
preset = nil
|
68
|
+
cnt = 0
|
69
|
+
$stderr.puts "{#{__method__}} cnt: #{cnt}," +
|
70
|
+
" preset: #{preset.inspect}" if debug_f
|
71
|
+
|
72
|
+
|
73
|
+
# until (preset = FFS.sfont_iteration_next(_self))&.null?
|
74
|
+
# while (preset = FFS.sfont_iteration_next(_self)) # ok.
|
75
|
+
#
|
76
|
+
#ng. while (preset = FFS.sfont_iteration_next(_self),
|
77
|
+
# #(preset && !preset.null?))
|
78
|
+
# (preset))
|
79
|
+
#ng. while ((preset = FFS.sfont_iteration_next(_self)),
|
80
|
+
# (preset && !preset.null?))
|
81
|
+
#ng. while (preset = FFS.sfont_iteration_next(_self)),
|
82
|
+
# (preset && !preset.null?)
|
83
|
+
|
84
|
+
while [preset = FFS.sfont_iteration_next(_self),
|
85
|
+
(preset && !preset.null?)].last
|
86
|
+
|
87
|
+
$stderr.puts "{#{__method__}} cnt: #{cnt}," +
|
88
|
+
" preset: #{preset.inspect}:#{preset.class}," +
|
89
|
+
" null?: #{preset.null?}" if debug_f
|
90
|
+
|
91
|
+
blk.(preset)
|
92
|
+
cnt += 1
|
93
|
+
end
|
94
|
+
$stderr.puts "{#{__method__}} LAST: cnt: #{cnt}," +
|
95
|
+
" preset: #{preset.inspect}:#{preset.class}" if debug_f
|
96
|
+
|
97
|
+
cnt
|
98
|
+
end
|
99
|
+
alias preset_iter each_preset
|
100
|
+
|
101
|
+
def presets( _self: self.itself, debug_f: false )
|
102
|
+
ret = []
|
103
|
+
|
104
|
+
self.each_preset(debug_f: debug_f){|pres| ret << pres }
|
105
|
+
$stderr.puts "{#{__method__}} ret (#{ret.size}):" +
|
106
|
+
" #{ret.first.name} - #{ret.last.name}" if debug_f
|
107
|
+
ret
|
108
|
+
end
|
109
|
+
alias all_presets presets
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
#### endof filename: util/interface/soundfont.rb
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# filename: util/interface/soundfont_preset.rb
|
3
|
+
#
|
4
|
+
require 'fiddle'
|
5
|
+
require 'fiddle/import'
|
6
|
+
|
7
|
+
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class FiddleFluidSynth
|
12
|
+
|
13
|
+
#
|
14
|
+
module Interface
|
15
|
+
module SoundFont
|
16
|
+
module Preset; end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# SoundFont getters/setters.
|
24
|
+
#
|
25
|
+
#
|
26
|
+
module FiddleFluidSynth::Interface
|
27
|
+
module SoundFont::Preset
|
28
|
+
|
29
|
+
FFS = FiddleFluidSynth
|
30
|
+
|
31
|
+
### from soundfonts/loader.rb
|
32
|
+
|
33
|
+
#
|
34
|
+
def banknum( _self: self.itself )
|
35
|
+
FFS.preset_get_banknum(_self)
|
36
|
+
end
|
37
|
+
alias bknum banknum
|
38
|
+
|
39
|
+
#
|
40
|
+
def data( _self: self.itself )
|
41
|
+
FFS.preset_get_data(_self, data: data)
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_data( data, _self: self.itself )
|
45
|
+
FFS.preset_set_data(_self, data: data)
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
def num( _self: self.itself )
|
50
|
+
FFS.preset_get_num(_self)
|
51
|
+
end
|
52
|
+
alias prenum num
|
53
|
+
|
54
|
+
#
|
55
|
+
def name( _self: self.itself )
|
56
|
+
FFS.preset_get_name(_self)
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
def sfont( _self: self.itself )
|
61
|
+
FFS.preset_get_sfont(_self)
|
62
|
+
end
|
63
|
+
alias soundfont sfont
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
#### endof filename: util/interface/soundfont_preset.rb
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#
|
2
|
+
# filename: util/interface/soundfont_sample.rb
|
3
|
+
#
|
4
|
+
require 'fiddle'
|
5
|
+
require 'fiddle/import'
|
6
|
+
|
7
|
+
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class FiddleFluidSynth
|
12
|
+
|
13
|
+
#
|
14
|
+
module Interface
|
15
|
+
module SoundFont
|
16
|
+
module Sample; end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# SoundFont getters/setters.
|
24
|
+
#
|
25
|
+
#
|
26
|
+
module FiddleFluidSynth::Interface
|
27
|
+
module SoundFont::Sample
|
28
|
+
|
29
|
+
FFS = FiddleFluidSynth
|
30
|
+
|
31
|
+
### from soundfonts/loader.rb
|
32
|
+
|
33
|
+
#
|
34
|
+
def set_loop( loop_start: , loop_end: , _self: self.itself )
|
35
|
+
FFS.sample_set_loop(_self, loop_start, loop_end)
|
36
|
+
end
|
37
|
+
def set_name( name, _self: self.itself )
|
38
|
+
FFS.sample_set_name(_self, name: name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_pitch( root_key: , fine_tune: , _self: self.itself )
|
42
|
+
FFS.sample_set_pitch(_self, root_key: root_key, fine_tune: fine_tune)
|
43
|
+
end
|
44
|
+
|
45
|
+
def set_sound_data( data: , data24: ,
|
46
|
+
nbframes: , sample_rate: , copy_data: ,
|
47
|
+
_self: self.itself )
|
48
|
+
FFS.sample_set_sound_data(
|
49
|
+
_self, data: data, data24: data24,
|
50
|
+
nbframes: nbframes, sample_rate: sample_rate, copy_data: copy_data)
|
51
|
+
end
|
52
|
+
|
53
|
+
def sizeof( _self: self.itself )
|
54
|
+
FFS.sample_sizeof()
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
#### endof filename: util/interface/soundfont_sample.rb
|
@@ -0,0 +1,403 @@
|
|
1
|
+
#
|
2
|
+
# filename: fiddle-fluidsynth/util/module_hier.rb
|
3
|
+
#
|
4
|
+
|
5
|
+
|
6
|
+
#
|
7
|
+
#
|
8
|
+
#
|
9
|
+
class FiddleFluidSynth
|
10
|
+
|
11
|
+
#
|
12
|
+
class ModuleBase
|
13
|
+
#
|
14
|
+
class AudioOutput < ModuleBase; end
|
15
|
+
class CommandInterface < ModuleBase; end
|
16
|
+
class Logging < ModuleBase; end
|
17
|
+
|
18
|
+
class Settings < ModuleBase; end
|
19
|
+
class Synthesizer < ModuleBase; end
|
20
|
+
|
21
|
+
class SoundFont < ModuleBase; end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
module SoundFont_IF
|
27
|
+
def id
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
#
|
35
|
+
#
|
36
|
+
#
|
37
|
+
class FiddleFluidSynth
|
38
|
+
|
39
|
+
#
|
40
|
+
# should be called from FiddleFluidSynth#initialize()
|
41
|
+
#
|
42
|
+
def init_objects( top = self )
|
43
|
+
#
|
44
|
+
@object = ModuleBase.new(
|
45
|
+
parent: top, fluidsynth_instance: top, value: nil)
|
46
|
+
|
47
|
+
end
|
48
|
+
attr_reader :object
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
#
|
54
|
+
#
|
55
|
+
#
|
56
|
+
class FiddleFluidSynth
|
57
|
+
|
58
|
+
#
|
59
|
+
class ModuleBase
|
60
|
+
def initialize( parent: , fluidsynth_instance: , value: , sub_new_f: true )
|
61
|
+
@parent = parent
|
62
|
+
@value = value
|
63
|
+
@fluidsynth_instance = fluidsynth_instance
|
64
|
+
|
65
|
+
#
|
66
|
+
if sub_new_f
|
67
|
+
self.init_sub
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
attr_reader :parent
|
72
|
+
attr_accessor :value
|
73
|
+
#ng. alias :itself :value # ng... i dont know why...
|
74
|
+
alias :itself :value
|
75
|
+
#def itself; self.value; end # ok.
|
76
|
+
# alias :object :value
|
77
|
+
alias :obj :value
|
78
|
+
attr_reader :fluidsynth_instance
|
79
|
+
|
80
|
+
def init_sub
|
81
|
+
@settings = Settings.new(
|
82
|
+
parent: self,
|
83
|
+
fluidsynth_instance: fluidsynth_instance, value: nil)
|
84
|
+
#@audio_output = AudioOutput.new(parent: self, fluidsynth_instance: fluidsynth_instance, value: nil)
|
85
|
+
#@commandInterface = CommandInterface.new(parent: self, fluidsynth_instance: fluidsynth_instance, value: nil)
|
86
|
+
#@logging = Logging.new(parent: self, fluidsynth_instance: fluidsynth_instance, value: nil)
|
87
|
+
@soundfont = SoundFont.new(
|
88
|
+
parent: self,
|
89
|
+
fluidsynth_instance: fluidsynth_instance,
|
90
|
+
value: fluidsynth_instance.sfonts.first)
|
91
|
+
end
|
92
|
+
attr_reader :settings
|
93
|
+
|
94
|
+
#
|
95
|
+
def soundfont( at_sfid = 1 )
|
96
|
+
@soundfont.sfid = at_sfid
|
97
|
+
@soundfont
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
#
|
105
|
+
#
|
106
|
+
#
|
107
|
+
class FiddleFluidSynth::ModuleBase
|
108
|
+
|
109
|
+
class Settings
|
110
|
+
def initialize( parent: , fluidsynth_instance: , value: , sub_new_f: true )
|
111
|
+
# super
|
112
|
+
super(parent: parent, fluidsynth_instance: fluidsynth_instance,
|
113
|
+
value: fluidsynth_instance.settings, sub_new_f: false)
|
114
|
+
|
115
|
+
if sub_new_f
|
116
|
+
self.init_sub
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
def value; self.fluidsynth_instance.settings; end
|
121
|
+
def init_sub
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
#
|
128
|
+
#
|
129
|
+
#
|
130
|
+
class FiddleFluidSynth::ModuleBase
|
131
|
+
|
132
|
+
class Synthesizer
|
133
|
+
def initialize( parent: , fluidsynth_instance: , value: , sub_new_f: true )
|
134
|
+
super(parent: parent, fluidsynth_instance: fluidsynth_instance,
|
135
|
+
value: fluidsynth_instance.synth, sub_new_f: false)
|
136
|
+
|
137
|
+
if sub_new_f
|
138
|
+
self.init_sub
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
def value; self.fluidsynth_instance.synth; end
|
143
|
+
def init_sub
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
# SoundFont
|
151
|
+
#
|
152
|
+
#
|
153
|
+
class FiddleFluidSynth::ModuleBase
|
154
|
+
#
|
155
|
+
class SoundFont
|
156
|
+
class Bank < SoundFont; end
|
157
|
+
class Bank::Presets < Bank; end
|
158
|
+
end
|
159
|
+
|
160
|
+
# SoundFont.
|
161
|
+
# this hierachy represents an array of SoundFonts.
|
162
|
+
#
|
163
|
+
class SoundFont
|
164
|
+
|
165
|
+
#
|
166
|
+
#
|
167
|
+
# ==== Args
|
168
|
+
# value:: NOT used.
|
169
|
+
#
|
170
|
+
def initialize( parent: , fluidsynth_instance: , value: nil, sub_new_f: true )
|
171
|
+
#_val = parent.sfonts[@sfid-1]
|
172
|
+
super(parent: parent, fluidsynth_instance: fluidsynth_instance,
|
173
|
+
value: value, sub_new_f: false)
|
174
|
+
|
175
|
+
#
|
176
|
+
unless value.nil?
|
177
|
+
@sfid = fluidsynth_instance.sfont_get_id(value)
|
178
|
+
else
|
179
|
+
@sfid = nil
|
180
|
+
end
|
181
|
+
@map_preset = {
|
182
|
+
sfid: {
|
183
|
+
bknum: {
|
184
|
+
prenum: { },
|
185
|
+
},
|
186
|
+
},
|
187
|
+
}
|
188
|
+
|
189
|
+
#
|
190
|
+
if sub_new_f
|
191
|
+
self.init_sub
|
192
|
+
end
|
193
|
+
|
194
|
+
end
|
195
|
+
attr_accessor :sfid
|
196
|
+
attr_reader :map_preset
|
197
|
+
|
198
|
+
# def value( _sfid = self.sfid )
|
199
|
+
def value( debug_f: false )
|
200
|
+
_sfid = self.sfid
|
201
|
+
# ret = self.fluidsynth_instance.sfonts[_sfid-1]
|
202
|
+
# ret = self.fluidsynth_instance.synth_get_sfont_by_id(_sfid)
|
203
|
+
idx = self.fluidsynth_instance.sfid_ary.index(_sfid)
|
204
|
+
ret = self.fluidsynth_instance.sfonts[idx]
|
205
|
+
$stderr.puts "{#{self.class}##{__method__}} _sfid: #{_sfid}," +
|
206
|
+
" 0x#{ret.to_i.to_s(16)}:#{ret.class}" if debug_f
|
207
|
+
ret
|
208
|
+
end
|
209
|
+
|
210
|
+
def count
|
211
|
+
ret = self.fluidsynth_instance.synth_sfcount()
|
212
|
+
ret
|
213
|
+
end
|
214
|
+
|
215
|
+
#
|
216
|
+
#
|
217
|
+
#
|
218
|
+
def init_sub
|
219
|
+
@bank = Bank.new(
|
220
|
+
parent: self, fluidsynth_instance: fluidsynth_instance,
|
221
|
+
value: nil, sub_new_f: true)
|
222
|
+
end
|
223
|
+
def bank( at_bknum = 0)
|
224
|
+
# @bank.bank = at_bknum
|
225
|
+
@bank.bknum = at_bknum
|
226
|
+
@bank
|
227
|
+
end
|
228
|
+
|
229
|
+
#
|
230
|
+
def full_path
|
231
|
+
parent.soundfont_fullpath
|
232
|
+
end
|
233
|
+
|
234
|
+
def load( filename: self.full_path, reset_presets: parent.reset_presets,
|
235
|
+
synth: self.fluidsynth_instance.synth )
|
236
|
+
self.fluidsynth_instance.synth_sfload(
|
237
|
+
filename: filename, reset_presets: reset_presets, synth: synth)
|
238
|
+
end
|
239
|
+
|
240
|
+
#
|
241
|
+
def name( sfont = self.value )
|
242
|
+
# name = self.fluidsynth_instance.sfont_get_name(sfont).to_s
|
243
|
+
name = self.fluidsynth_instance.sfont_get_name(sfont)
|
244
|
+
ret = name
|
245
|
+
ret
|
246
|
+
end
|
247
|
+
|
248
|
+
#
|
249
|
+
#
|
250
|
+
#
|
251
|
+
def preset_iter_reset( _sfont = self.value )
|
252
|
+
self.fluidsynth_instance.sfont_iteration_start(_sfont)
|
253
|
+
end
|
254
|
+
|
255
|
+
#
|
256
|
+
#
|
257
|
+
# ====
|
258
|
+
# &blk:: {|preset| }
|
259
|
+
#
|
260
|
+
# ==== See Also
|
261
|
+
# - fluidsynth_settings_foreach()
|
262
|
+
#
|
263
|
+
def preset_iter( debug_f: false, &blk )
|
264
|
+
sfont = self.value
|
265
|
+
cnt = 0
|
266
|
+
self.preset_iter_reset(sfont)
|
267
|
+
preset = self.fluidsynth_instance.sfont_iteration_next(sfont)
|
268
|
+
cnt += 1
|
269
|
+
|
270
|
+
#ng. while !(preset&.null?)
|
271
|
+
while !(preset.nil? || preset.null?)
|
272
|
+
$stderr.puts "cnt: #{cnt}: #{preset.inspect}" if debug_f
|
273
|
+
blk.call(preset)
|
274
|
+
|
275
|
+
preset = self.fluidsynth_instance.sfont_iteration_next(sfont)
|
276
|
+
cnt += 1
|
277
|
+
end
|
278
|
+
|
279
|
+
cnt
|
280
|
+
end
|
281
|
+
alias each_preset preset_iter
|
282
|
+
|
283
|
+
def scan_presets
|
284
|
+
_sfnm = self.name
|
285
|
+
@map_preset[_sfnm] = {}
|
286
|
+
|
287
|
+
#
|
288
|
+
ret = self.each_preset{|preset|
|
289
|
+
bknum = self.fluidsynth_instance.preset_get_banknum(preset)
|
290
|
+
prenum = self.fluidsynth_instance.preset_get_num(preset)
|
291
|
+
prename = self.fluidsynth_instance.preset_get_name(preset)
|
292
|
+
|
293
|
+
@map_preset[_sfnm][bknum] ||= {}
|
294
|
+
@map_preset[_sfnm][bknum][prenum] = prename
|
295
|
+
}
|
296
|
+
|
297
|
+
ret
|
298
|
+
end
|
299
|
+
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
|
304
|
+
#
|
305
|
+
#
|
306
|
+
#
|
307
|
+
class FiddleFluidSynth::ModuleBase::SoundFont
|
308
|
+
|
309
|
+
#
|
310
|
+
class Bank
|
311
|
+
def initialize( parent: , fluidsynth_instance: , value: , sub_new_f: true )
|
312
|
+
super(parent: parent, fluidsynth_instance: fluidsynth_instance,
|
313
|
+
value: fluidsynth_instance.synth, sub_new_f: false)
|
314
|
+
|
315
|
+
if sub_new_f
|
316
|
+
self.init_sub
|
317
|
+
end
|
318
|
+
|
319
|
+
end
|
320
|
+
attr_accessor :bknum
|
321
|
+
def value
|
322
|
+
# TODO:
|
323
|
+
end
|
324
|
+
def init_sub
|
325
|
+
@presets = Bank::Presets.new(
|
326
|
+
parent: self, fluidsynth_instance: fluidsynth_instance,
|
327
|
+
value: nil, sub_new_f: true)
|
328
|
+
end
|
329
|
+
def presets( prenum = @presets.num )
|
330
|
+
@presets.num = prenum
|
331
|
+
@presets
|
332
|
+
end
|
333
|
+
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
|
338
|
+
#
|
339
|
+
#
|
340
|
+
#
|
341
|
+
class FiddleFluidSynth::ModuleBase::SoundFont::Bank
|
342
|
+
|
343
|
+
#
|
344
|
+
class Presets
|
345
|
+
def initialize( parent: , fluidsynth_instance: , value: , sub_new_f: true )
|
346
|
+
super(parent: parent, fluidsynth_instance: fluidsynth_instance,
|
347
|
+
value: fluidsynth_instance.synth, sub_new_f: false)
|
348
|
+
|
349
|
+
#
|
350
|
+
@num = nil
|
351
|
+
|
352
|
+
#
|
353
|
+
if sub_new_f
|
354
|
+
self.init_sub
|
355
|
+
end
|
356
|
+
|
357
|
+
end
|
358
|
+
attr_accessor :num
|
359
|
+
|
360
|
+
def value
|
361
|
+
bknum = self.parent.bknum
|
362
|
+
prenum = self.num
|
363
|
+
sfont = self.parent.parent.value
|
364
|
+
|
365
|
+
ret = self.fluidsynth_instance.
|
366
|
+
sfont_get_preset(sfont: sfont, bknum: bknum, prenum: prenum)
|
367
|
+
ret
|
368
|
+
end
|
369
|
+
def init_sub
|
370
|
+
# nothing todo.
|
371
|
+
end
|
372
|
+
|
373
|
+
# .
|
374
|
+
def name
|
375
|
+
preset_obj = self.value
|
376
|
+
|
377
|
+
_name = self.fluidsynth_instance.preset_get_name(preset_obj).to_s
|
378
|
+
|
379
|
+
ret = _name
|
380
|
+
ret
|
381
|
+
end
|
382
|
+
|
383
|
+
def bknum
|
384
|
+
preset_obj = self.value
|
385
|
+
|
386
|
+
_bknum = self.fluidsynth_instance.preset_get_banknum(preset_obj)
|
387
|
+
ret = _bknum
|
388
|
+
ret
|
389
|
+
end
|
390
|
+
|
391
|
+
def pre_num
|
392
|
+
preset_obj = self.value
|
393
|
+
|
394
|
+
_num = self.fluidsynth_instance.preset_get_num(preset_obj)
|
395
|
+
ret = _num
|
396
|
+
ret
|
397
|
+
end
|
398
|
+
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
|
403
|
+
#### endof filename: fiddle-fluidsynth/util/module_hier.rb
|