summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-02-01 15:23:38 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2013-02-01 15:23:38 +0100
commitd41f67c2b9cf3f915b12d113bd5952ce90062c8a (patch)
treee030910cc51e30bb57fd7f57e9ad5d7056be6962
parent0b268440b9d557f64cba6f7db644a6536fa2b158 (diff)
audio: fix delay control, increase default buffer delay to 40ms
just doing a single sleep isnt enougth, as we get woken up for every block!
-rw-r--r--sys/src/9/pc/audioac97.c3
-rw-r--r--sys/src/9/pc/audiohda.c3
-rw-r--r--sys/src/9/pc/audiosb16.c3
-rw-r--r--sys/src/9/port/devaudio.c2
-rw-r--r--sys/src/cmd/nusb/audio/audio.c2
5 files changed, 8 insertions, 5 deletions
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;