aboutsummaryrefslogtreecommitdiff
path: root/pd/src/s_audio_alsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'pd/src/s_audio_alsa.c')
-rw-r--r--pd/src/s_audio_alsa.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/pd/src/s_audio_alsa.c b/pd/src/s_audio_alsa.c
index b94a4e04..89c2d9de 100644
--- a/pd/src/s_audio_alsa.c
+++ b/pd/src/s_audio_alsa.c
@@ -663,6 +663,7 @@ void alsa_putzeros(int n)
post("result %d", result);
#endif
}
+ /* post ("putzeros %d", n); */
}
void alsa_getzeros(int n)
@@ -676,6 +677,7 @@ void alsa_getzeros(int n)
post("result %d", result);
#endif
}
+ /* post ("getzeros %d", n); */
}
/* call this only if both input and output are open */
@@ -713,7 +715,7 @@ static void alsa_checkiosync( void)
return;
}
defect = indelay + outdelay - alsa_buf_samps;
- if (defect < -DEFDACBLKSIZE)
+ if (defect < -(3 * DEFDACBLKSIZE / 2) )
{
checkit = 1;
alsa_putzeros(1);
@@ -727,13 +729,40 @@ static void alsa_checkiosync( void)
if (!alreadylogged)
sys_log_error(ERR_RESYNC), alreadylogged = 1;
}
+ /* if (alreadylogged)
+ post("in %d out %d defect %d", indelay, outdelay, defect); */
}
}
}
-void alsa_listdevs( void)
+static int alsa_nnames = 0;
+static char **alsa_names = 0;
+
+void alsa_adddev(char *name)
+{
+ if (alsa_nnames)
+ alsa_names = (char **)t_resizebytes(alsa_names,
+ alsa_nnames * sizeof(char *),
+ (alsa_nnames+1) * sizeof(char *));
+ else alsa_names = (char **)t_getbytes(sizeof(char *));
+ alsa_names[alsa_nnames] = gensym(name)->s_name;
+ alsa_nnames++;
+}
+
+static void alsa_numbertoname(int devno, char *devname, int nchar)
{
- post("device listing not implemented in ALSA yet\n");
+ int ndev = 0, cardno = -1;
+ while (!snd_card_next(&cardno) && cardno >= 0)
+ ndev++;
+ if (devno < 2*ndev)
+ {
+ if (devno & 1)
+ snprintf(devname, nchar, "plughw:%d", devno/2);
+ else snprintf(devname, nchar, "hw:%d", devno/2);
+ }
+ else if (devno <2*ndev + alsa_nnames)
+ snprintf(devname, nchar, "%s", alsa_names[devno - 2*ndev]);
+ else snprintf(devname, nchar, "???");
}
/* For each hardware card found, we list two devices, the "hard" and