diff --git a/sys/src/9/pc/audioac97.c b/sys/src/9/pc/audioac97.c index 477324870..08c0f62f2 100644 --- a/sys/src/9/pc/audioac97.c +++ b/sys/src/9/pc/audioac97.c @@ -381,7 +381,8 @@ ac97write(Audio *adev, void *vp, long n, vlong) } p += n; } - sleep(&ring->r, outrate, ctlr); + while(outrate(ctlr) == 0) + sleep(&ring->r, outrate, ctlr); return p - (uchar*)vp; } diff --git a/sys/src/9/pc/audiohda.c b/sys/src/9/pc/audiohda.c index cce9031fa..a05d9099d 100644 --- a/sys/src/9/pc/audiohda.c +++ b/sys/src/9/pc/audiohda.c @@ -1288,7 +1288,8 @@ hdawrite(Audio *adev, void *vp, long n, vlong) p += n; } hdakick(ctlr); - sleep(&ring->r, outrate, ctlr); + while(outrate(ctlr) == 0) + sleep(&ring->r, outrate, ctlr); return p - (uchar*)vp; } diff --git a/sys/src/9/pc/audiosb16.c b/sys/src/9/pc/audiosb16.c index 564a11821..a38483aed 100644 --- a/sys/src/9/pc/audiosb16.c +++ b/sys/src/9/pc/audiosb16.c @@ -549,7 +549,8 @@ audiowrite(Audio *adev, void *vp, long n, vlong) } p += n; } - sleep(&ctlr->vous, ratebuf, ctlr); + while(ratebuf(ctlr) == 0) + sleep(&ctlr->vous, ratebuf, ctlr); return p - (uchar*)vp; } diff --git a/sys/src/9/port/devaudio.c b/sys/src/9/port/devaudio.c index 5a23a60da..dd089ceed 100644 --- a/sys/src/9/port/devaudio.c +++ b/sys/src/9/port/devaudio.c @@ -146,7 +146,7 @@ audioattach(char *spec) if((attached & i) == 0){ static char *settings[] = { "speed 44100", - "delay 882", /* 20 ms */ + "delay 1764", /* 40 ms */ "master 100", "audio 100", "head 100", diff --git a/sys/src/cmd/nusb/audio/audio.c b/sys/src/cmd/nusb/audio/audio.c index 231216244..a187c8f96 100644 --- a/sys/src/cmd/nusb/audio/audio.c +++ b/sys/src/cmd/nusb/audio/audio.c @@ -14,7 +14,7 @@ struct Audio int maxfreq; }; -int audiodelay = 882; +int audiodelay = 1764; /* 40 ms */ int audiofreq = 44100; int audiochan = 2; int audiores = 16;