52 const char **whitelist,
53 size_t whitelist_size)
56 snd_device_name_hint(-1,
"pcm", &hints);
58 size_t device_count = 0;
59 for (
void **it = hints; *it != NULL; it++) device_count++;
61 *available_devices = calloc(device_count + 1 ,
sizeof(
struct device_info));
62 strcpy((*available_devices)[0].dev,
"");
63 strcpy((*available_devices)[0].
name,
"Default Linux audio");
66 for(
void **it = hints; *it != NULL; it++){
67 char *
id = snd_device_name_get_hint(*it,
"NAME");
69 bool whitelisted =
false;
70 for(
size_t i = 0; i < whitelist_size; i++){
71 if(strstr(
id, whitelist[i])){
76 if(!whitelisted && whitelist_size > 0) {
81 strcpy((*available_devices)[*
count].dev,
":");
82 strncat((*available_devices)[*
count].dev,
id,
83 sizeof (*available_devices)[*
count].dev -
84 strlen((*available_devices)[*
count].dev) - 1);
87 char *
name = snd_device_name_get_hint(*it,
"DESC");
90 char *newline = strchr(tok,
'\n');
93 strncat((*available_devices)[*
count].
name, tok,
94 sizeof (*available_devices)[*
count].
name -
95 strlen((*available_devices)[*
count].
name) - 1);
96 strncat((*available_devices)[*
count].
name,
" - ",
97 sizeof (*available_devices)[*
count].
name -
98 strlen((*available_devices)[*
count].
name) - 1);
101 strncat((*available_devices)[*
count].
name, tok,
102 sizeof (*available_devices)[*
count].
name -
103 strlen((*available_devices)[*
count].
name) - 1);
111 snd_device_name_free_hint(hints);
131 [0] = SND_PCM_FORMAT_UNKNOWN,
132 [1] = SND_PCM_FORMAT_U8,
133 [2] = SND_PCM_FORMAT_S16_LE,
134 [3] = SND_PCM_FORMAT_S24_3LE,
135 [4] = SND_PCM_FORMAT_S32_LE,
148 unsigned int rate = approx_val;
150 rc = snd_pcm_hw_params_set_rate_min(handle,
params, &rate, &dir);
154 rc = snd_pcm_hw_params_set_rate_min(handle,
params, &rate, &dir);
159 rc = snd_pcm_hw_params_get_rate_min(
params, &rate, NULL);
166 rc = snd_pcm_hw_params_set_rate_min(handle,
params, &rate, &dir);
172 unsigned int rate = approx_val;
174 unsigned int orig_max;
175 rc = snd_pcm_hw_params_get_rate_max(
params, &orig_max, NULL);
178 rc = snd_pcm_hw_params_set_rate_max(handle,
params, &rate, &dir);
181 rc = snd_pcm_hw_params_set_rate_max(handle,
params, &rate, &dir);
185 rc = snd_pcm_hw_params_get_rate_max(
params, &rate, NULL);
191 rc = snd_pcm_hw_params_set_rate_max(handle,
params, &orig_max, &dir);