89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/mtk/io/dls_synth_device.rb', line 89
def open
synth_pointer = FFI::MemoryPointer.new(:pointer)
graph_pointer = FFI::MemoryPointer.new(:pointer)
synth_node_pointer = FFI::MemoryPointer.new(:pointer)
out_node_pointer = FFI::MemoryPointer.new(:pointer)
cd = AudioToolbox::ComponentDescription.new
cd[:componentManufacturer] = AudioToolbox::AUDIO_UNIT_MANUFACTURER_APPLE
cd[:componentFlags] = 0
cd[:componentFlagsMask] = 0
require_noerr('create AUGraph') { AudioToolbox.NewAUGraph(graph_pointer) }
@graph = graph_pointer.get_pointer(0)
cd[:componentType] = AudioToolbox::AUDIO_UNIT_TYPE_MUSIC_DEVICE
cd[:componentSubType] = AudioToolbox::AUDIO_UNIT_SUBTYPE_DLS_SYNTH
require_noerr('add synthNode') { AudioToolbox.AUGraphAddNode(@graph, cd, synth_node_pointer) }
synth_node = synth_node_pointer.get_pointer(0)
cd[:componentType] = AudioToolbox::AUDIO_UNIT_TYPE_OUTPUT
cd[:componentSubType] = AudioToolbox::AUDIO_UNIT_SUBTYPE_DEFAULT_OUTPUT
require_noerr('add outNode') { AudioToolbox.AUGraphAddNode(@graph, cd, out_node_pointer) }
out_node = out_node_pointer.get_pointer(0)
require_noerr('open graph') { AudioToolbox.AUGraphOpen(@graph) }
require_noerr('connect synth to out') { AudioToolbox.AUGraphConnectNodeInput(@graph, synth_node, 0, out_node, 0) }
require_noerr('graph info') { AudioToolbox.AUGraphNodeInfo(@graph, synth_node, nil, synth_pointer) }
@synth = synth_pointer.get_pointer(0)
require_noerr('init graph') { AudioToolbox.AUGraphInitialize(@graph) }
require_noerr('start graph') { AudioToolbox.AUGraphStart(@graph) }
end
|