sclang: ServerShmInterface - try to avoid multiple destructor calls
[supercollider.git] / HelpSource / Classes / GeneralHIDSpec.schelp
blobab6ffde73b86cf1773eb6c9f8e89f27b5e6ea9ce
1 class:: GeneralHIDSpec
2 summary:: Create access by names to slots of a GeneralHIDDevice
3 related:: Classes/HIDDeviceService, Classes/LID, Classes/GeneralHID, Classes/GeneralHIDDevice
4 categories:: HID
6 ClassMethods::
8 private::initClass
10 InstanceMethods::
12 method::add
13 define a key to a slot
15 method::at
16 get the slot
18 method::value
19 get or set the slot
21 method::action
22 set the action
24 method::bus
25 get the bus
27 method::createBus
28 create the bus
30 method::freeBus
31 free the bus
33 method:: freeAllBuses
34 free all buses
36 Examples::
38 code::
39 // Look for the devices that are attached:
40 GeneralHID.buildDeviceList;
42 // Get the list of devices:
43 d = GeneralHID.deviceList;
45 // Check which devices have been found:
46 GeneralHID.postDevices;
48 // Pick the 6th device and open it and create an instance of it:
49 a = GeneralHID.open( d[5] )
51 // Get info on the device to see if it is the right one:
52 a.info;
54 // Start eventloop:
55 GeneralHID.startEventLoop
57 // Get the capabilities of the device in a readable format:
58 a.caps;
60 // See if data is coming in:
61 a.debug_( true );
63 // make an instance of a spec:
64 b = GeneralHIDSpec.new( a );
66 ( // defining the spec.
67 // trick: look at the debug output, by using each input thing on the gamepad and use the first two numbers posted as indexes
68 // example output of debug: [ 3, 2, 0.49803921568627, nil ]
69 // as a result of moving the y-axis of the right joystick.
70 // so we create this slot:
71 b.add( \ry, [3,2] );
73 // and so on...
74 b.add( \lx, [3,0] );
75 b.add( \ly, [3,1] );
76 b.add( \rx, [3,5] );
78 b.add( \b1, [1,288] );
79 b.add( \b2, [1,289] );
80 b.add( \b3, [1,290] );
81 b.add( \b4, [1,291] );
82 b.add( \b5, [1,292] );
83 b.add( \b6, [1,293] );
84 b.add( \b7, [1,294] );
85 b.add( \b8, [1,295] );
87 b.add( \b5, [1,292] );
88 b.add( \b6, [1,293] );
89 b.add( \b7, [1,294] );
90 b.add( \b8, [1,295] );
92 b.add( \cx, [3,16] );
93 b.add( \cy, [3,17] );
95 b.add( \bl, [1,296] );
96 b.add( \br, [1,297] );
98 b.add( \bj1, [1,298] );
99 b.add( \bj2, [1,299] );
102 // Stop it:
103 a.debug_( false );
105 // look at the map
106 b.map.postcs;
108 // store it with a name:
109 b.save( "Impact" );
111 // find matching, previously stored specs:
112 c = b.find;
114 // load from file:
115 b.fromFile( "Impact" );
117 // the loading and storing mechanism works across SC sessions, as they are stored to file, and GeneralHIDSpec loads the device info of all stored specs at startup of the language.
119 /// A GeneralHIDDevice automatically has a spec, so we can access it even faster:
121 a.spec;
123 // to find and set a spec:
124 a.findSpec;
125 a.setSpec( "Impact" );
127 // post the mapping
128 a.spec.map
130 // examples of use:
131 s = Server.local.boot;
133 // create a bus
134 b.createBus( \rx, s );
135 b.createBus( \b1, s );
138 // simple example:
140 SynthDef( \hidbus_help, { |out=0,amp=0.5|
141         Out.ar( out, SinOsc.ar( 300, 0, 0.2*(amp-0.5) ) );
142 }).add;
145 x = Synth.new( \hidbus_help );
146 x.map( \amp, b.at( \rx ).bus );
147 x.free;
149 ( // a nicer version:
150 SynthDef( \hidbus_help, { |out=0,amp=0.5,amp2=0|
151         Out.ar( out, SinOsc.ar( 300, 0, 0.2*(amp-0.5).lag( 0.1 ) * amp2.lag(0.01,0.99) ) );
152 }).add;
155 x = Synth.new( \hidbus_help );
156 x.map( \amp, b.at( \rx ).bus );
157 x.map( \amp2, b.at( \b1 ).bus );
158 x.free;
160 ( // an even nicer version:
161 SynthDef( \hidbus_help, { |out=0,freqadd=0,amp=0,fmmul=200|
162         Out.ar( out, SinOsc.ar( 300 + (freqadd.lag(0.2,1)*fmmul), 0, 0.2*amp.lag(0.01,0.99) ) );
163 }).add;
167 // if you want to have buses for all the things defined in the spec, you can use:
168 b.createAllBuses( s );
171 x = [ Synth.new( \hidbus_help ), Synth.new( \hidbus_help ) ];
172 x[0].map( \freqadd, b.bus( \ly ) );
173 x[0].map( \amp, b.bus( \b6 ) );
175 x[1].map( \freqadd, b.bus( \lx ) );
176 x[1].map( \amp, b.bus( \b7 ) );
178 y = [ Synth.new( \hidbus_help, [\fmmul,400] ), Synth.new( \hidbus_help, [\fmmul,400] ) ];
179 y[0].map( \freqadd, b.bus( \ry ) );
180 y[0].map( \amp, b.bus( \b5 ) );
182 y[1].map( \freqadd, b.bus( \rx ) );
183 y[1].map( \amp, b.bus( \b6 ) );
186 // see what's going on on the server
187 s.queryAllNodes( true );
189 // free the synths
190 y.do{ |it| it.free; }; x.do{ |it| it.free; };
194 // To free all buses
195 b.freeAllBuses;
197 // Close the device after use:
199 a.close;
201 GeneralHID.stopEventLoop