]> git.alsa-project.org Git - alsa-python.git/commitdiff
alsacontrol - add hwdepDevices(), pcmDevices(), rawmidiDevices()
authorJaroslav Kysela <perex@perex.cz>
Wed, 12 Sep 2007 09:11:23 +0000 (11:11 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 12 Sep 2007 09:11:23 +0000 (11:11 +0200)
pyalsa/alsacontrol.c
setup.py
test/ctltest1.py [new file with mode: 0755]

index 9bbde5324614defa482179093f8e96a7f0f8bded..f5e79948874c6b9f2e8e874e8dc5b7f09145f846 100644 (file)
@@ -80,9 +80,7 @@ pyalsacontrol_cardinfo(struct pyalsacontrol *self, PyObject *args)
        if (err < 0) {
                PyErr_Format(PyExc_IOError,
                     "Control card info error: %s", strerror(-err));
-               Py_RETURN_NONE;
-       } else {
-               
+               return NULL;
        }
        d = PyDict_New();
        if (d) {
@@ -97,6 +95,59 @@ pyalsacontrol_cardinfo(struct pyalsacontrol *self, PyObject *args)
        return d;
 }
 
+static PyObject *
+devices(struct pyalsacontrol *self, PyObject *args,
+                          int (*fcn)(snd_ctl_t *, int *))
+{
+       int dev, err, size = 0;
+       PyObject *t;
+
+       dev = -1;
+       t = PyTuple_New(size);
+       do {
+               err = fcn(self->handle, &dev);
+               if (err < 0) {
+                       PyErr_Format(PyExc_IOError,
+                            "Control hwdep_next_device error: %s", strerror(-err));
+                       Py_DECREF(t);
+                       return NULL;
+               }
+               if (dev >= 0) {
+                       _PyTuple_Resize(&t, ++size);
+                       if (t)
+                               PyTuple_SetItem(t, size-1, PyInt_FromLong(dev));
+               }
+       } while (dev >= 0);
+       return t;
+}
+
+PyDoc_STRVAR(hwdepdevices__doc__,
+"hwdepDevices() -- Return a tuple with available hwdep devices.");
+
+static PyObject *
+pyalsacontrol_hwdepdevices(struct pyalsacontrol *self, PyObject *args)
+{
+       return devices(self, args, snd_ctl_hwdep_next_device);
+}
+
+PyDoc_STRVAR(pcmdevices__doc__,
+"pcmDevices() -- Return a tuple with available PCM devices.");
+
+static PyObject *
+pyalsacontrol_pcmdevices(struct pyalsacontrol *self, PyObject *args)
+{
+       return devices(self, args, snd_ctl_pcm_next_device);
+}
+
+PyDoc_STRVAR(rawmididevices__doc__,
+"rawmidiDevices() -- Return a tuple with available RawMidi devices.");
+
+static PyObject *
+pyalsacontrol_rawmididevices(struct pyalsacontrol *self, PyObject *args)
+{
+       return devices(self, args, snd_ctl_rawmidi_next_device);
+}
+
 PyDoc_STRVAR(alsacontrolinit__doc__,
 "Control([name='default'],[mode=0])\n"
 "  -- Open an ALSA Control device.\n");
@@ -141,6 +192,9 @@ static PyGetSetDef pyalsacontrol_getseters[] = {
 static PyMethodDef pyalsacontrol_methods[] = {
 
        {"cardInfo",    (PyCFunction)pyalsacontrol_cardinfo,    METH_NOARGS,    cardinfo__doc__},
+       {"hwdepDevices",(PyCFunction)pyalsacontrol_hwdepdevices,        METH_NOARGS,    hwdepdevices__doc__},
+       {"pcmDevices",  (PyCFunction)pyalsacontrol_pcmdevices,  METH_NOARGS,    pcmdevices__doc__},
+       {"rawmidiDevices",(PyCFunction)pyalsacontrol_rawmididevices,    METH_NOARGS,    rawmididevices__doc__},
        {NULL}
 };
 
index 27e11fa31a9449fa5a025701e6b45313955706f5..6b5fb496e868cf61d417afa1a97970336f5ad464 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -52,7 +52,7 @@ setup(
 
 uname = os.uname()
 a = 'build/lib.%s-%s-%s' % (uname[0].lower(), uname[4], sys.version[:3])
-for f in ['alsacard.so', 'alsahcontrol.so', 'alsamixer.so']:
+for f in ['alsacard.so', 'alsacontrol.so', 'alsahcontrol.so', 'alsamixer.so']:
         if not os.path.exists('pyalsa/%s' % f):
                 a = '../build/lib.%s-%s-%s/pyalsa/%s' % (uname[0].lower(),
                         uname[4], sys.version[:3], f)
diff --git a/test/ctltest1.py b/test/ctltest1.py
new file mode 100755 (executable)
index 0000000..9221bc6
--- /dev/null
@@ -0,0 +1,22 @@
+#! /usr/bin/python
+# -*- Python -*-
+
+import sys
+sys.path.insert(0, '../pyalsa')
+del sys
+import alsacontrol
+
+ctl = alsacontrol.Control()
+print 'Card info:', ctl.cardInfo()
+try:
+  print 'Hwdep devices:', ctl.hwdepDevices()
+except IOError, msg:
+  print 'No hwdep devices:', msg
+try:
+  print 'PCM devices:', ctl.pcmDevices()
+except IOError, msg:
+  print 'No PCM devices:', msg
+try:
+  print 'Rawmidi devices:', ctl.rawmidiDevices()
+except IOError, msg:
+  print 'No rawmidi devices:', msg