Update Kha/Kinc/Backends/System/Linux/Sources/kinc/backend/sound.c.h
This commit is contained in:
parent
f9d463ca1d
commit
30748390ca
@ -39,14 +39,38 @@ int playback_callback(snd_pcm_sframes_t nframes) {
|
|||||||
int ni = 0;
|
int ni = 0;
|
||||||
while (ni < nframes) {
|
while (ni < nframes) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; ni < nframes && i < 4096 * 2; ++i, ++ni) {
|
for (; ni < nframes && i < 4096; ++i, ++ni) {
|
||||||
copySample(&buf[i * 2]);
|
copySample(&buf[i * 2]);
|
||||||
}
|
}
|
||||||
int err2;
|
int err2 = snd_pcm_writei(playback_handle, buf, i);
|
||||||
if ((err2 = snd_pcm_writei(playback_handle, buf, i)) < 0) {
|
if (err2 < 0) {
|
||||||
fprintf(stderr, "write failed (%s)\n", snd_strerror(err2));
|
fprintf(stderr, "ALSA write failed in playback_callback: %s\n", snd_strerror(err2));
|
||||||
|
return err2;
|
||||||
}
|
}
|
||||||
err += err2;
|
if (err2 < i) {
|
||||||
|
fprintf(stderr, "ALSA short write in playback_callback: wrote %d of %d frames\n", err2, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = nframes;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Write silence data to prevent recovery
|
||||||
|
if (nframes > 4096) {
|
||||||
|
fprintf(stderr, "Warning: ALSA requested %ld frames for silence, exceeding local buffer size %d. Clamping.\n", nframes, 4096);
|
||||||
|
nframes = 4096;
|
||||||
|
}
|
||||||
|
memset(buf, 0, nframes * 4);
|
||||||
|
|
||||||
|
int err2 = snd_pcm_writei(playback_handle, buf, nframes);
|
||||||
|
|
||||||
|
if (err2 < 0) {
|
||||||
|
fprintf(stderr, "ALSA silence write failed in playback_callback: %s\n", snd_strerror(err2));
|
||||||
|
err = err2;
|
||||||
|
} else {
|
||||||
|
if (err2 < nframes) {
|
||||||
|
fprintf(stderr, "ALSA short silence write in playback_callback: wrote %d of %d frames\n", err2, (int)nframes);
|
||||||
|
}
|
||||||
|
err = err2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user