parent
6092c08762
commit
5e89bf3f6a
@ -0,0 +1,114 @@ |
|||||||
|
# Unofficial ALSA API documentation |
||||||
|
ALSA has to be the **worst** documented API in the whole FOSS world, so since I |
||||||
|
had to go trough the pain of reverse-engineering other programs I thought to save |
||||||
|
you form the same pain. So I present to you the most half-hassed description of |
||||||
|
the ALSA API on the interweb. |
||||||
|
|
||||||
|
## Functions |
||||||
|
|
||||||
|
### Interfaces |
||||||
|
TODO |
||||||
|
|
||||||
|
### Hints |
||||||
|
Hints are names, descriptions and other information about sound cards, interfaces |
||||||
|
and others. To get access to those hints there is a family of functions. |
||||||
|
|
||||||
|
#### `snd_device_name_hint` |
||||||
|
Get hints from a specified card of specified interface |
||||||
|
|
||||||
|
```c |
||||||
|
int snd_device_name_hint (int card, const char *iface, void ***hints); |
||||||
|
``` |
||||||
|
|
||||||
|
ARGS: |
||||||
|
|
||||||
|
* `(int)card`: specifies the card index number, -1 means all cards |
||||||
|
* `(char *)iface`: interface identification (like "pcm", "rawmidi", "timer", "seq") |
||||||
|
|
||||||
|
RESULT: |
||||||
|
|
||||||
|
* `(void ***)hints`: hints will receive a NULL-terminated array of device name |
||||||
|
hints, which can be passed to `snd_device_name_get_hint()` to extract usable values. |
||||||
|
When no longer needed, hints should be passed to `snd_device_name_free_hint()` to |
||||||
|
release resources. |
||||||
|
|
||||||
|
RETURN: `(int)` 0 on success or negative error code |
||||||
|
|
||||||
|
#### `snd_device_name_get_hint` |
||||||
|
Extract selected hint form hints array |
||||||
|
|
||||||
|
```c |
||||||
|
char* snd_device_name_get_hint (const void *hint, const char *id); |
||||||
|
``` |
||||||
|
|
||||||
|
ARGS: |
||||||
|
|
||||||
|
* `(const void *)hint`: a pointer to a hint which can be gotten by referencing |
||||||
|
`hints[i]` from `snd_device_name_hint()`, where `i` is the card index |
||||||
|
* `(const char *)id`: hint value to extract, valid IDs are |
||||||
|
- NAME: name of device |
||||||
|
- DESC: description of device |
||||||
|
- IOID: input / output identification ("Input" or "Output"), NULL means both |
||||||
|
|
||||||
|
RESULT: RETURN: `(char *)` gives a pointer to a string containing the requested |
||||||
|
hint or NULL on error, the result should be freed when done. |
||||||
|
|
||||||
|
#### `snd_device_name_free_hint` |
||||||
|
Free hints array |
||||||
|
|
||||||
|
```c |
||||||
|
int snd_device_name_free_hint (void **hints); |
||||||
|
``` |
||||||
|
|
||||||
|
ARGS: |
||||||
|
|
||||||
|
* `(void **)hints`: hints array gotten from `snd_device_name_hint` |
||||||
|
|
||||||
|
RETURN: `(int)` 0 on success or negative code on error |
||||||
|
|
||||||
|
#### Example |
||||||
|
Get hints from all pcms of all cards and print them out |
||||||
|
|
||||||
|
```c |
||||||
|
#define _POSIX_C_SOURCE 200809L |
||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
|
||||||
|
#include <alsa/asoundlib.h> |
||||||
|
|
||||||
|
int main (int argc, char *argv[]) |
||||||
|
{ |
||||||
|
void **hints, **n; |
||||||
|
char *name, *descr, *descr1, *io; |
||||||
|
|
||||||
|
if (snd_device_name_hint(-1, "pcm", &hints) < 0) |
||||||
|
return -1; |
||||||
|
n = hints; |
||||||
|
while (*n != NULL) { |
||||||
|
name = snd_device_name_get_hint(*n, "NAME"); |
||||||
|
descr = snd_device_name_get_hint(*n, "DESC"); |
||||||
|
io = snd_device_name_get_hint(*n, "IOID"); |
||||||
|
printf("%s\n", name); |
||||||
|
if ((descr1 = descr) != NULL) { |
||||||
|
printf(" "); |
||||||
|
while (*descr1) { |
||||||
|
if (*descr1 == '\n') |
||||||
|
printf("\n "); |
||||||
|
else |
||||||
|
putchar(*descr1); |
||||||
|
descr1++; |
||||||
|
} |
||||||
|
putchar('\n'); |
||||||
|
} |
||||||
|
if (name != NULL) |
||||||
|
free(name); |
||||||
|
if (descr != NULL) |
||||||
|
free(descr); |
||||||
|
if (io != NULL) |
||||||
|
free(io); |
||||||
|
n++; |
||||||
|
} |
||||||
|
snd_device_name_free_hint(hints); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
``` |
Loading…
Reference in new issue