]> git.alsa-project.org Git - alsa-python.git/commitdiff
added ask_volume_dB and ask_dB_volume for mixer element
authorJaroslav Kysela <perex@perex.cz>
Mon, 21 Apr 2008 09:45:02 +0000 (11:45 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 21 Apr 2008 09:45:02 +0000 (11:45 +0200)
pyalsa/alsamixer.c
test/mixertest1.py

index 316d86d1d5212b45200ec92255344806b9778133..53825cc05f19b60261438a3f76537eb171ddef30 100644 (file)
@@ -433,6 +433,52 @@ pyalsamixerelement_hasswitch(struct pyalsamixerelement *pyelem, PyObject *args)
        }
 }
 
+PyDoc_STRVAR(askvoldB__doc__,
+"ask_volume_dB(value, [capture=False]]) -- Convert integer volume to dB value.");
+
+static PyObject *
+pyalsamixerelement_askvoldB(struct pyalsamixerelement *pyelem, PyObject *args)
+{
+       int res, dir = 0;
+       long volume, val;
+
+       if (!PyArg_ParseTuple(args, "|LI", &volume, &dir))
+               return NULL;
+
+       if (dir == 0)
+               res = snd_mixer_selem_ask_playback_vol_dB(pyelem->elem, volume, &val);
+       else
+               res = snd_mixer_selem_ask_capture_vol_dB(pyelem->elem, volume, &val);
+       if (res < 0) {
+                PyErr_Format(PyExc_RuntimeError, "Cannot convert mixer volume (capture=%s, value=%li): %s", dir ? "True" : "False", volume, snd_strerror(-res));
+                Py_RETURN_NONE;
+       }
+       return PyInt_FromLong(val);
+}
+
+PyDoc_STRVAR(askdBvol__doc__,
+"ask_dB_volume(dBvalue, [[direction=-1], [capture=False]]) -- Convert integer volume to dB value.");
+
+static PyObject *
+pyalsamixerelement_askdBvol(struct pyalsamixerelement *pyelem, PyObject *args)
+{
+       int res, xdir = -1, dir = 0;
+       long dBvolume, val;
+
+       if (!PyArg_ParseTuple(args, "|LII", &dBvolume, &xdir, &dir))
+               return NULL;
+
+       if (dir == 0)
+               res = snd_mixer_selem_ask_playback_dB_vol(pyelem->elem, dBvolume, xdir, &val);
+       else
+               res = snd_mixer_selem_ask_capture_dB_vol(pyelem->elem, dBvolume, xdir, &val);
+       if (res < 0) {
+                PyErr_Format(PyExc_RuntimeError, "Cannot convert mixer volume (capture=%s, dBvalue=%li, direction=%i): %s", dir ? "True" : "False", dBvolume, xdir, snd_strerror(-res));
+                Py_RETURN_NONE;
+       }
+       return PyInt_FromLong(val);
+}
+
 PyDoc_STRVAR(getvolume__doc__,
 "get_volume([channel=ChannelId['MONO'], [capture=False]]) -- Get volume.");
 
@@ -453,7 +499,7 @@ pyalsamixerelement_getvolume(struct pyalsamixerelement *pyelem, PyObject *args)
                 PyErr_Format(PyExc_RuntimeError, "Cannot get mixer volume (capture=%s, channel=%i): %s", dir ? "True" : "False", chn, snd_strerror(-res));
                 Py_RETURN_NONE;
        }
-       return Py_BuildValue("i", res);
+       return PyInt_FromLong(val);
 }
 
 PyDoc_STRVAR(getvolumetuple__doc__,
@@ -1107,6 +1153,9 @@ static PyGetSetDef pyalsamixerelement_getseters[] = {
 
 static PyMethodDef pyalsamixerelement_methods[] = {
 
+       {"ask_volume_dB",(PyCFunction)pyalsamixerelement_askvoldB,      METH_VARARGS,   askvoldB__doc__},
+       {"ask_dB_volume",(PyCFunction)pyalsamixerelement_askdBvol,      METH_VARARGS,   askdBvol__doc__},
+       {"get_volume",  (PyCFunction)pyalsamixerelement_getvolume,      METH_VARARGS,   getvolume__doc__},
        {"get_volume",  (PyCFunction)pyalsamixerelement_getvolume,      METH_VARARGS,   getvolume__doc__},
        {"get_volume_tuple", (PyCFunction)pyalsamixerelement_getvolumetuple, METH_VARARGS,getvolumetuple__doc__},
        {"get_volume_array", (PyCFunction)pyalsamixerelement_getvolumearray, METH_VARARGS,getvolumearray__doc__},
index 4c4f664bb91cc1300bb286658e7463551cb4504b..1618a44278df4f7a17b4362b11abf8126e56639b 100755 (executable)
@@ -26,6 +26,14 @@ def print_elem(e):
                        print '  get_%s_volume_range_dB: %s' % (direction[capture], e.get_volume_range_dB(capture))
                        print '  get_%s_volume_tuple: %s' % (direction[capture], e.get_volume_tuple(capture)) 
                        print '  get_%s_volume_array: %s' % (direction[capture], e.get_volume_array(capture)) 
+                       vrange = e.get_volume_range(capture)
+                       if vrange:
+                               for vol in range(vrange[0], vrange[1]+1):
+                                       print '    vol %i == %idB' % (vol, e.ask_volume_dB(vol, capture))
+                       dbrange = e.get_volume_range_dB(capture)
+                       if dbrange:
+                               for vol in range(dbrange[0], dbrange[1]+1):
+                                       print '    dBvol %i == %i' % (vol, e.ask_dB_volume(vol, -1, capture))
                print '  has_%s_switch: %s' % (direction[capture], e.has_switch(capture))
                if e.has_switch(capture):
                        print '  get_%s_switch_tuple: %s' % (direction[capture], e.get_switch_tuple(capture))