From 6a1c24f88f2909599e1a2b87f4c0f15f984045b3 Mon Sep 17 00:00:00 2001 From: Joey Date: Sun, 15 Nov 2020 16:21:54 -0500 Subject: [PATCH] New package: pcaudiolib-1.1 --- common/shlibs | 1 + srcpkgs/pcaudiolib-devel | 1 + .../upstream-fix-alsa-sample-size.patch | 19 +++++ .../patches/upstream-fix-snappiness.patch | 76 +++++++++++++++++++ srcpkgs/pcaudiolib/template | 27 +++++++ 5 files changed, 124 insertions(+) create mode 120000 srcpkgs/pcaudiolib-devel create mode 100644 srcpkgs/pcaudiolib/patches/upstream-fix-alsa-sample-size.patch create mode 100644 srcpkgs/pcaudiolib/patches/upstream-fix-snappiness.patch create mode 100644 srcpkgs/pcaudiolib/template diff --git a/common/shlibs b/common/shlibs index 622c7e8d56..77563c8574 100644 --- a/common/shlibs +++ b/common/shlibs @@ -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 diff --git a/srcpkgs/pcaudiolib-devel b/srcpkgs/pcaudiolib-devel new file mode 120000 index 0000000000..e1bc88225c --- /dev/null +++ b/srcpkgs/pcaudiolib-devel @@ -0,0 +1 @@ +pcaudiolib \ No newline at end of file diff --git a/srcpkgs/pcaudiolib/patches/upstream-fix-alsa-sample-size.patch b/srcpkgs/pcaudiolib/patches/upstream-fix-alsa-sample-size.patch new file mode 100644 index 0000000000..8fe6879457 --- /dev/null +++ b/srcpkgs/pcaudiolib/patches/upstream-fix-alsa-sample-size.patch @@ -0,0 +1,19 @@ +commit d6a6b00aa4334b461c1a09c27b6c681eaac8da8a +Author: Martin Schreiber +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) diff --git a/srcpkgs/pcaudiolib/patches/upstream-fix-snappiness.patch b/srcpkgs/pcaudiolib/patches/upstream-fix-snappiness.patch new file mode 100644 index 0000000000..4ea1a613b3 --- /dev/null +++ b/srcpkgs/pcaudiolib/patches/upstream-fix-snappiness.patch @@ -0,0 +1,76 @@ +commit a41d46e816d2cbcd93564c42b65a87af547bcb2d +Author: Samuel Thibault +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(¶ms); ++ 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 +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; + } diff --git a/srcpkgs/pcaudiolib/template b/srcpkgs/pcaudiolib/template new file mode 100644 index 0000000000..7f40e0388e --- /dev/null +++ b/srcpkgs/pcaudiolib/template @@ -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 " +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" + } +}