178
166
static PyMethodDef CtlScan_methods[] = {
179
167
{"getServer", (PyCFunction)CtlScan_getServer, METH_NOARGS, "Returns server object."},
180
168
{"_getStream", (PyCFunction)CtlScan_getStream, METH_NOARGS, "Returns stream object."},
181
{"deleteStream", (PyCFunction)CtlScan_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
182
169
{"play", (PyCFunction)CtlScan_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
183
170
{"stop", (PyCFunction)CtlScan_stop, METH_NOARGS, "Stops computing."},
184
171
{"setFunction", (PyCFunction)CtlScan_setFunction, METH_O, "Sets the function to be called."},
223
210
0, /* tp_descr_get */
224
211
0, /* tp_descr_set */
225
212
0, /* tp_dictoffset */
226
(initproc)CtlScan_init, /* tp_init */
227
214
0, /* tp_alloc */
228
215
CtlScan_new, /* tp_new */
227
CtlScan2_setProcMode(CtlScan2 *self) {}
230
CtlScan2_compute_next_data_frame(CtlScan2 *self)
233
int i, count, midichnl;
235
buffer = Server_getMidiEventBuffer((Server *)self->server);
236
count = Server_getMidiEventCount((Server *)self->server);
240
for (i=count-1; i>=0; i--) {
241
int status = Pm_MessageStatus(buffer[i].message); // Temp note event holders
242
int number = Pm_MessageData1(buffer[i].message);
243
int value = Pm_MessageData2(buffer[i].message);
245
if ((status & 0xF0) == 0xB0) {
246
midichnl = status - 0xB0 + 1;
247
if (number != self->ctlnumber || midichnl != self->midichnl) {
248
self->ctlnumber = number;
249
self->midichnl = midichnl;
250
tup = PyTuple_New(2);
251
PyTuple_SetItem(tup, 0, PyInt_FromLong(self->ctlnumber));
252
PyTuple_SetItem(tup, 1, PyInt_FromLong(self->midichnl));
253
PyObject_Call((PyObject *)self->callable, tup, NULL);
255
if (self->toprint == 1)
256
printf("ctl number : %i, ctl value : %i, midi channel : %i\n", self->ctlnumber, value, midichnl);
263
CtlScan2_traverse(CtlScan2 *self, visitproc visit, void *arg)
266
Py_VISIT(self->callable);
271
CtlScan2_clear(CtlScan2 *self)
274
Py_CLEAR(self->callable);
279
CtlScan2_dealloc(CtlScan2* self)
282
CtlScan2_clear(self);
283
self->ob_type->tp_free((PyObject*)self);
287
CtlScan2_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
290
PyObject *calltmp=NULL;
292
self = (CtlScan2 *)type->tp_alloc(type, 0);
294
self->ctlnumber = self->midichnl = -1;
298
Stream_setFunctionPtr(self->stream, CtlScan2_compute_next_data_frame);
299
self->mode_func_ptr = CtlScan2_setProcMode;
301
static char *kwlist[] = {"callable", "toprint", NULL};
303
if (! PyArg_ParseTupleAndKeywords(args, kwds, "O|i", kwlist, &calltmp, &self->toprint))
307
PyObject_CallMethod((PyObject *)self, "setFunction", "O", calltmp);
310
PyObject_CallMethod(self->server, "addStream", "O", self->stream);
312
return (PyObject *)self;
315
static PyObject * CtlScan2_getServer(CtlScan2* self) { GET_SERVER };
316
static PyObject * CtlScan2_getStream(CtlScan2* self) { GET_STREAM };
318
static PyObject * CtlScan2_play(CtlScan2 *self, PyObject *args, PyObject *kwds) { PLAY };
319
static PyObject * CtlScan2_stop(CtlScan2 *self) { STOP };
322
CtlScan2_setFunction(CtlScan2 *self, PyObject *arg)
326
if (! PyCallable_Check(arg)) {
327
PyErr_SetString(PyExc_TypeError, "The callable attribute must be a valid Python function.");
333
Py_XDECREF(self->callable);
335
self->callable = tmp;
342
CtlScan2_setToprint(CtlScan2 *self, PyObject *arg)
345
if (PyInt_Check(arg)) {
346
self->toprint = PyInt_AsLong(arg);
352
static PyMemberDef CtlScan2_members[] = {
353
{"server", T_OBJECT_EX, offsetof(CtlScan2, server), 0, "Pyo server."},
354
{"stream", T_OBJECT_EX, offsetof(CtlScan2, stream), 0, "Stream object."},
355
{NULL} /* Sentinel */
358
static PyMethodDef CtlScan2_methods[] = {
359
{"getServer", (PyCFunction)CtlScan2_getServer, METH_NOARGS, "Returns server object."},
360
{"_getStream", (PyCFunction)CtlScan2_getStream, METH_NOARGS, "Returns stream object."},
361
{"play", (PyCFunction)CtlScan2_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
362
{"stop", (PyCFunction)CtlScan2_stop, METH_NOARGS, "Stops computing."},
363
{"setFunction", (PyCFunction)CtlScan2_setFunction, METH_O, "Sets the function to be called."},
364
{"setToprint", (PyCFunction)CtlScan2_setToprint, METH_O, "If True, print values to the console."},
365
{NULL} /* Sentinel */
368
PyTypeObject CtlScan2Type = {
369
PyObject_HEAD_INIT(NULL)
371
"_pyo.CtlScan2_base", /*tp_name*/
372
sizeof(CtlScan2), /*tp_basicsize*/
374
(destructor)CtlScan2_dealloc, /*tp_dealloc*/
381
0, /*tp_as_sequence*/
389
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES, /*tp_flags*/
390
"CtlScan2 objects. Retreive midi channel and controller numbers from a midi input.", /* tp_doc */
391
(traverseproc)CtlScan2_traverse, /* tp_traverse */
392
(inquiry)CtlScan2_clear, /* tp_clear */
393
0, /* tp_richcompare */
394
0, /* tp_weaklistoffset */
397
CtlScan2_methods, /* tp_methods */
398
CtlScan2_members, /* tp_members */
402
0, /* tp_descr_get */
403
0, /* tp_descr_set */
404
0, /* tp_dictoffset */
407
CtlScan2_new, /* tp_new */
390
567
INIT_OBJECT_COMMON
391
568
Stream_setFunctionPtr(self->stream, Midictl_compute_next_data_frame);
392
569
self->mode_func_ptr = Midictl_setProcMode;
394
return (PyObject *)self;
398
Midictl_init(Midictl *self, PyObject *args, PyObject *kwds)
400
PyObject *multmp=NULL, *addtmp=NULL;
402
571
static char *kwlist[] = {"ctlnumber", "minscale", "maxscale", "init", "channel", "mul", "add", NULL};
404
573
if (! PyArg_ParseTupleAndKeywords(args, kwds, TYPE_I_FFFIOO, kwlist, &self->ctlnumber, &self->minscale, &self->maxscale, &self->oldValue, &self->channel, &multmp, &addtmp))
408
577
PyObject_CallMethod((PyObject *)self, "setMul", "O", multmp);
586
751
static PyMethodDef Midictl_methods[] = {
587
752
{"getServer", (PyCFunction)Midictl_getServer, METH_NOARGS, "Returns server object."},
588
753
{"_getStream", (PyCFunction)Midictl_getStream, METH_NOARGS, "Returns stream object."},
589
{"deleteStream", (PyCFunction)Midictl_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
590
754
{"play", (PyCFunction)Midictl_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
591
755
{"stop", (PyCFunction)Midictl_stop, METH_NOARGS, "Stops computing."},
592
756
{"setInterpolation", (PyCFunction)Midictl_setInterpolation, METH_O, "Activate/Deactivate interpolation."},
977
1129
static PyMethodDef Bendin_methods[] = {
978
1130
{"getServer", (PyCFunction)Bendin_getServer, METH_NOARGS, "Returns server object."},
979
1131
{"_getStream", (PyCFunction)Bendin_getStream, METH_NOARGS, "Returns stream object."},
980
{"deleteStream", (PyCFunction)Bendin_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
981
1132
{"play", (PyCFunction)Bendin_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
982
1133
{"stop", (PyCFunction)Bendin_stop, METH_NOARGS, "Stops computing."},
983
1134
{"setBrange", (PyCFunction)Bendin_setBrange, METH_O, "Sets the bending bipolar range."},
1352
1491
static PyMethodDef Touchin_methods[] = {
1353
1492
{"getServer", (PyCFunction)Touchin_getServer, METH_NOARGS, "Returns server object."},
1354
1493
{"_getStream", (PyCFunction)Touchin_getStream, METH_NOARGS, "Returns stream object."},
1355
{"deleteStream", (PyCFunction)Touchin_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
1356
1494
{"play", (PyCFunction)Touchin_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
1357
1495
{"stop", (PyCFunction)Touchin_stop, METH_NOARGS, "Stops computing."},
1358
1496
{"setMinScale", (PyCFunction)Touchin_setMinScale, METH_O, "Sets the minimum value of scaling."},
1674
1800
static PyMethodDef Programin_methods[] = {
1675
1801
{"getServer", (PyCFunction)Programin_getServer, METH_NOARGS, "Returns server object."},
1676
1802
{"_getStream", (PyCFunction)Programin_getStream, METH_NOARGS, "Returns stream object."},
1677
{"deleteStream", (PyCFunction)Programin_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
1678
1803
{"play", (PyCFunction)Programin_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
1679
1804
{"stop", (PyCFunction)Programin_stop, METH_NOARGS, "Stops computing."},
1680
1805
{"setChannel", (PyCFunction)Programin_setChannel, METH_O, "Sets the midi channel."},
2049
2162
static PyMethodDef MidiNote_methods[] = {
2050
2163
{"getServer", (PyCFunction)MidiNote_getServer, METH_NOARGS, "Returns server object."},
2051
2164
{"_getStream", (PyCFunction)MidiNote_getStream, METH_NOARGS, "Returns stream object."},
2052
{"deleteStream", (PyCFunction)MidiNote_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
2053
2165
{"play", (PyCFunction)MidiNote_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
2054
2166
{"stop", (PyCFunction)MidiNote_stop, METH_NOARGS, "Stops computing."},
2055
2167
{"setChannel", (PyCFunction)MidiNote_setChannel, METH_O, "Sets the midi channel."},
2281
2382
static PyMethodDef Notein_methods[] = {
2282
2383
{"getServer", (PyCFunction)Notein_getServer, METH_NOARGS, "Returns server object."},
2283
2384
{"_getStream", (PyCFunction)Notein_getStream, METH_NOARGS, "Returns stream object."},
2284
{"deleteStream", (PyCFunction)Notein_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
2285
2385
{"play", (PyCFunction)Notein_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
2286
2386
{"stop", (PyCFunction)Notein_stop, METH_NOARGS, "Stops computing."},
2287
2387
{"setMul", (PyCFunction)Notein_setMul, METH_O, "Sets Notein mul factor."},
2654
2743
static PyMethodDef MidiAdsr_methods[] = {
2655
2744
{"getServer", (PyCFunction)MidiAdsr_getServer, METH_NOARGS, "Returns server object."},
2656
2745
{"_getStream", (PyCFunction)MidiAdsr_getStream, METH_NOARGS, "Returns stream object."},
2657
{"deleteStream", (PyCFunction)MidiAdsr_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
2658
2746
{"play", (PyCFunction)MidiAdsr_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
2659
2747
{"stop", (PyCFunction)MidiAdsr_stop, METH_NOARGS, "Starts fadeout and stops computing."},
2660
2748
{"setMul", (PyCFunction)MidiAdsr_setMul, METH_O, "Sets MidiAdsr mul factor."},
3048
3125
static PyMethodDef MidiDelAdsr_methods[] = {
3049
3126
{"getServer", (PyCFunction)MidiDelAdsr_getServer, METH_NOARGS, "Returns server object."},
3050
3127
{"_getStream", (PyCFunction)MidiDelAdsr_getStream, METH_NOARGS, "Returns stream object."},
3051
{"deleteStream", (PyCFunction)MidiDelAdsr_deleteStream, METH_NOARGS, "Remove stream from server and delete the object."},
3052
3128
{"play", (PyCFunction)MidiDelAdsr_play, METH_VARARGS|METH_KEYWORDS, "Starts computing without sending sound to soundcard."},
3053
3129
{"stop", (PyCFunction)MidiDelAdsr_stop, METH_NOARGS, "Starts fadeout and stops computing."},
3054
3130
{"setMul", (PyCFunction)MidiDelAdsr_setMul, METH_O, "Sets MidiDelAdsr mul factor."},