mirror of
https://github.com/larsimmisch/pyalsaaudio.git
synced 2026-06-01 19:07:02 +00:00
Add functions for listing cards and their names
The cards() method does not guarantee that the index in its return value is the same as the actual card index. Provide a way to get this information in the form of a card_indexes() function, returning a list of available card indexes. Add another method, card_name(), which, given a card index, returns the short and long names of that card.
This commit is contained in:
+72
@@ -171,6 +171,76 @@ PyDoc_STRVAR(cards_doc,
|
||||
\n\
|
||||
List the available card ids.");
|
||||
|
||||
|
||||
static PyObject *
|
||||
alsacard_list_indexes(PyObject *self, PyObject *args)
|
||||
{
|
||||
int rc;
|
||||
int card = -1;
|
||||
PyObject *result = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple(args,":card_indexes"))
|
||||
return NULL;
|
||||
|
||||
result = PyList_New(0);
|
||||
|
||||
for (rc = snd_card_next(&card); !rc && (card >= 0);
|
||||
rc = snd_card_next(&card))
|
||||
{
|
||||
PyObject *item = PyInt_FromLong(card);
|
||||
|
||||
PyList_Append(result, item);
|
||||
Py_DECREF(item);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(card_indexes_doc,
|
||||
"card_indexes()\n\
|
||||
\n\
|
||||
List the available card indexes.");
|
||||
|
||||
|
||||
static PyObject *
|
||||
alsacard_name(PyObject *self, PyObject *args)
|
||||
{
|
||||
int err, card;
|
||||
PyObject *result = NULL;
|
||||
char *name = NULL, *longname = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple(args,"i:card_name", &card))
|
||||
return NULL;
|
||||
|
||||
err = snd_card_get_name(card, &name);
|
||||
if (err < 0) {
|
||||
PyErr_Format(ALSAAudioError, "%s [%d]", snd_strerror(err), card);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err = snd_card_get_longname(card, &longname);
|
||||
if (err < 0) {
|
||||
PyErr_Format(ALSAAudioError, "%s [%d]", snd_strerror(err), card);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = PyTuple_New(2);
|
||||
PyTuple_SetItem(result, 0, PyUnicode_FromString(name));
|
||||
PyTuple_SetItem(result, 1, PyUnicode_FromString(longname));
|
||||
|
||||
exit:
|
||||
free(name);
|
||||
free(longname);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(card_name_doc,
|
||||
"card_name(card_index) -> Tuple of (name, longname)\n\
|
||||
\n\
|
||||
Return the card name and long name for card 'card_index'.");
|
||||
|
||||
|
||||
static PyObject *
|
||||
alsapcm_list(PyObject *self, PyObject *args)
|
||||
{
|
||||
@@ -2291,6 +2361,8 @@ static PyTypeObject ALSAMixerType = {
|
||||
/******************************************/
|
||||
|
||||
static PyMethodDef alsaaudio_methods[] = {
|
||||
{ "card_indexes", (PyCFunction)alsacard_list_indexes, METH_VARARGS, card_indexes_doc},
|
||||
{ "card_name", (PyCFunction)alsacard_name, METH_VARARGS, card_name_doc},
|
||||
{ "cards", (PyCFunction)alsacard_list, METH_VARARGS, cards_doc},
|
||||
{ "pcms", (PyCFunction)alsapcm_list, METH_VARARGS, pcms_doc},
|
||||
{ "mixers", (PyCFunction)alsamixer_list, METH_VARARGS|METH_KEYWORDS, mixers_doc},
|
||||
|
||||
@@ -23,6 +23,12 @@ import sys
|
||||
import getopt
|
||||
import alsaaudio
|
||||
|
||||
def list_cards():
|
||||
print("Available sound cards:")
|
||||
for i in alsaaudio.card_indexes():
|
||||
(name, longname) = alsaaudio.card_name(i)
|
||||
print(" %d: %s (%s)" % (i, name, longname))
|
||||
|
||||
def list_mixers(kwargs):
|
||||
print("Available mixer controls:")
|
||||
for m in alsaaudio.mixers(**kwargs):
|
||||
@@ -113,6 +119,8 @@ if __name__ == '__main__':
|
||||
else:
|
||||
usage()
|
||||
|
||||
list_cards()
|
||||
|
||||
if not len(args):
|
||||
list_mixers(kwargs)
|
||||
elif len(args) == 1:
|
||||
|
||||
Reference in New Issue
Block a user