New package: pcaudiolib-1.1

This commit is contained in:
Joey 2020-11-15 16:21:54 -05:00 committed by Érico Nogueira Rolim
parent bc24118fa4
commit 6a1c24f88f
5 changed files with 124 additions and 0 deletions

View File

@ -4002,3 +4002,4 @@ libnotcurses++.so.2 notcurses-2.0.4_1
libevemu.so.3 evemu-2.7.0_1
libantilib.so.1 libantimicrox-3.1.2_1
libinih.so.0 inih-52_1
libpcaudio.so.0 pcaudiolib-1.1_1

1
srcpkgs/pcaudiolib-devel Symbolic link
View File

@ -0,0 +1 @@
pcaudiolib

View File

@ -0,0 +1,19 @@
commit d6a6b00aa4334b461c1a09c27b6c681eaac8da8a
Author: Martin Schreiber <mse00000@gmail.com>
Date: Sat Mar 10 06:55:58 2018 +0100
* Alsa: fixed sample_size calculation, multiply with channel count.
diff --git src/alsa.c src/alsa.c
index 34e39be..6af1941 100644
--- src/alsa.c
+++ src/alsa.c
@@ -53,7 +53,7 @@ alsa_object_open(struct audio_object *object,
return -EEXIST;
snd_pcm_format_t pcm_format;
-#define FORMAT(srcfmt, dstfmt, size) case srcfmt: pcm_format = dstfmt; self->sample_size = size; break;
+#define FORMAT(srcfmt, dstfmt, size) case srcfmt: pcm_format = dstfmt; self->sample_size = size*channels; break;
switch (format)
{
FORMAT(AUDIO_OBJECT_FORMAT_ALAW, SND_PCM_FORMAT_A_LAW, 1)

View File

@ -0,0 +1,76 @@
commit a41d46e816d2cbcd93564c42b65a87af547bcb2d
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Sun Oct 11 17:34:57 2020 +0200
Fix cancellation snappiness
Screen reader users report getting late cancellation, or even mixtures
of speech. This is because the default buffering parameters of alsa or
pulseaudio are relatively large.
This change sets alsa and pulseaudio buffer sizes to 10ms worth of audio,
which is the human snappiness perception limit.
diff --git src/alsa.c src/alsa.c
index 64d5a90..c856788 100644
--- src/alsa.c
+++ src/alsa.c
@@ -99,6 +99,7 @@ alsa_object_open(struct audio_object *object,
snd_pcm_hw_params_t *params = NULL;
snd_pcm_hw_params_malloc(&params);
+ snd_pcm_uframes_t bufsize = (rate * channels * LATENCY) / 1000;
int err = 0;
if ((err = snd_pcm_open(&self->handle, self->device ? self->device : "default", SND_PCM_STREAM_PLAYBACK, 0)) < 0)
@@ -113,6 +114,8 @@ alsa_object_open(struct audio_object *object,
goto error;
if ((err = snd_pcm_hw_params_set_channels(self->handle, params, channels)) < 0)
goto error;
+ if ((err = snd_pcm_hw_params_set_buffer_size_near(self->handle, params, &bufsize)) < 0)
+ goto error;
if ((err = snd_pcm_hw_params(self->handle, params)) < 0)
goto error;
if ((err = snd_pcm_prepare(self->handle)) < 0)
diff --git src/audio_priv.h src/audio_priv.h
index 9526138..669a037 100644
--- src/audio_priv.h
+++ src/audio_priv.h
@@ -52,6 +52,10 @@ struct audio_object
int error);
};
+/* We try to aim for 10ms cancelation latency, which will be perceived as
+ * "snappy" by users */
+#define LATENCY 10
+
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
diff --git src/pulseaudio.c src/pulseaudio.c
index d23366d..2f80c62 100644
--- src/pulseaudio.c
+++ src/pulseaudio.c
@@ -74,6 +74,13 @@ pulseaudio_object_open(struct audio_object *object,
}
int error = 0;
+ pa_buffer_attr battr;
+
+ battr.fragsize = (uint32_t) -1;
+ battr.maxlength = (uint32_t) -1;
+ battr.minreq = (uint32_t) -1;
+ battr.prebuf = (uint32_t) -1;
+ battr.tlength = pa_bytes_per_second(&self->ss) * LATENCY / 1000;
self->s = pa_simple_new(NULL,
self->application_name,
PA_STREAM_PLAYBACK,
@@ -81,7 +88,7 @@ pulseaudio_object_open(struct audio_object *object,
self->description,
&self->ss,
NULL,
- NULL,
+ &battr,
&error);
return error;
}

View File

@ -0,0 +1,27 @@
# Template file for 'pcaudiolib'
pkgname=pcaudiolib
version=1.1
revision=1
build_style=gnu-configure
hostmakedepends="automake libtool which pkg-config"
makedepends="alsa-lib-devel pulseaudio-devel"
short_desc="Portable C Audio Library"
maintainer="Joey <joey@imap.cc>"
license="GPL-3.0-or-later"
homepage="https://github.com/espeak-ng/pcaudiolib"
distfiles="https://github.com/espeak-ng/pcaudiolib/archive/${version}.tar.gz"
checksum=699a5a347b1e12dc5b122e192e19f4db01621826bf41b9ebefb1cbc63ae2180b
pre_configure() {
./autogen.sh
}
pcaudiolib-devel_package() {
depends="${sourcepkg}>=${version}_${revision}"
short_desc+=" - development files"
pkg_install() {
vmove usr/include
vmove "usr/lib/*.so"
vmove "usr/lib/*.a"
}
}