diff --git a/alsa-git.patch b/alsa-git.patch new file mode 100644 index 0000000000000000000000000000000000000000..e89c6b2fb40e0d51f3cd66f8a584159a7c039897 --- /dev/null +++ b/alsa-git.patch @@ -0,0 +1,231 @@ +From da4d5bd53a1a57d1b39318b83d3280fbcd78e9f6 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 15 May 2018 22:17:01 +0200 +Subject: [PATCH 1/6] aplay: Fix invalid file size check for non-regular files + +aplay tries to check the file size via fstat() at parsing the format +headers and avoids parsing when the size is shorter than the given +size. This works fine for regular files, but when a special file like +pipe is passed, it fails, eventually leading to the fallback mode +wrongly. + +A proper fix is to do this sanity check only for a regular file. + +Reported-by: Jay Foster +Signed-off-by: Takashi Iwai +--- + aplay/aplay.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index bbd7fff..63ec9ef 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -2821,7 +2821,8 @@ static int read_header(int *loaded, int header_size) + + /* don't be adventurous, get out if file size is smaller than + * requested header size */ +- if (buf.st_size < header_size) ++ if ((buf.st_mode & S_IFMT) == S_IFREG && ++ buf.st_size < header_size) + return -1; + + if (*loaded < header_size) { +-- +2.13.6 + + +From 0e2703cef90a2c53d49a49d5e9233aeb6db8960b Mon Sep 17 00:00:00 2001 +From: Julian Scheel +Date: Wed, 23 May 2018 15:42:20 +0200 +Subject: [PATCH 2/6] speaker-test: Support S24_3LE sample format + +Implement support signed 24 bit samples, packed in 3 bytes. + +Signed-off-by: Julian Scheel +Signed-off-by: Takashi Iwai +--- + speaker-test/speaker-test.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c +index 65ab523..4804bcf 100644 +--- a/speaker-test/speaker-test.c ++++ b/speaker-test/speaker-test.c +@@ -283,6 +283,8 @@ static const int supported_formats[] = { + SND_PCM_FORMAT_S16_LE, + SND_PCM_FORMAT_S16_BE, + SND_PCM_FORMAT_FLOAT_LE, ++ SND_PCM_FORMAT_S24_3LE, ++ SND_PCM_FORMAT_S24_3BE, + SND_PCM_FORMAT_S32_LE, + SND_PCM_FORMAT_S32_BE, + -1 +@@ -325,6 +327,18 @@ static void do_generate(uint8_t *frames, int channel, int count, + case SND_PCM_FORMAT_FLOAT_LE: + *samp_f++ = res.f; + break; ++ case SND_PCM_FORMAT_S24_3LE: ++ res.i >>= 8; ++ *samp8++ = LE_INT(res.i); ++ *samp8++ = LE_INT(res.i) >> 8; ++ *samp8++ = LE_INT(res.i) >> 16; ++ break; ++ case SND_PCM_FORMAT_S24_3BE: ++ res.i >>= 8; ++ *samp8++ = BE_INT(res.i); ++ *samp8++ = BE_INT(res.i) >> 8; ++ *samp8++ = BE_INT(res.i) >> 16; ++ break; + case SND_PCM_FORMAT_S32_LE: + *samp32++ = LE_INT(res.i); + break; +-- +2.13.6 + + +From 98ff61743188101920cbf0b1b2e3cd6d015e3c83 Mon Sep 17 00:00:00 2001 +From: Julian Scheel +Date: Wed, 23 May 2018 15:42:21 +0200 +Subject: [PATCH 3/6] speaker-test: Remove unused variable + +Signed-off-by: Julian Scheel +Signed-off-by: Takashi Iwai +--- + speaker-test/speaker-test.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c +index 4804bcf..0cdecb3 100644 +--- a/speaker-test/speaker-test.c ++++ b/speaker-test/speaker-test.c +@@ -300,7 +300,6 @@ static void do_generate(uint8_t *frames, int channel, int count, + { + value_t res; + int chn; +- int32_t ires; + int8_t *samp8 = (int8_t*) frames; + int16_t *samp16 = (int16_t*) frames; + int32_t *samp32 = (int32_t*) frames; +-- +2.13.6 + + +From a3d81b6beab1ad33ea02f7d3c19f894490a661b9 Mon Sep 17 00:00:00 2001 +From: Julian Scheel +Date: Thu, 7 Jun 2018 11:10:55 +0200 +Subject: [PATCH 4/6] speaker-test: Allow sampling rates up to 768000 + +There are audio devices around that support up to 768kHz playback, allow +testing them by increasing the maximum supported sampling rate. + +Signed-off-by: Julian Scheel +Signed-off-by: Takashi Iwai +--- + speaker-test/speaker-test.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c +index 0cdecb3..773af0a 100644 +--- a/speaker-test/speaker-test.c ++++ b/speaker-test/speaker-test.c +@@ -1034,7 +1034,7 @@ int main(int argc, char *argv[]) { + case 'r': + rate = atoi(optarg); + rate = rate < 4000 ? 4000 : rate; +- rate = rate > 384000 ? 384000 : rate; ++ rate = rate > 768000 ? 768000 : rate; + break; + case 'c': + channels = atoi(optarg); +-- +2.13.6 + + +From f6b59282f7c3bddc6aa4aca93e8e19163955675b Mon Sep 17 00:00:00 2001 +From: Jonathan Liu +Date: Sun, 5 Aug 2018 13:59:35 +1000 +Subject: [PATCH 5/6] alsabat: Allow custom sample format for round trip + latency test + +Setting the format to BAT_PCM_FORMAT_S16_LE in the round trip latency +test initialization is redundant as it is already set by default to +BAT_PCM_FORMAT_S16_LE unless a sample format is specified on the command +line. + +Signed-off-by: Jonathan Liu +Signed-off-by: Takashi Iwai +--- + bat/latencytest.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/bat/latencytest.c b/bat/latencytest.c +index fae191c..ec3abe2 100644 +--- a/bat/latencytest.c ++++ b/bat/latencytest.c +@@ -178,7 +178,6 @@ void roundtrip_latency_init(struct bat *bat) + bat->latency.is_playing = false; + bat->latency.error = 0; + bat->latency.xrun_error = false; +- bat->format = BAT_PCM_FORMAT_S16_LE; + bat->frames = LATENCY_TEST_TIME_LIMIT * bat->rate; + bat->periods_played = 0; + } +-- +2.13.6 + + +From 25bea6baf7097dc0a701b27587be88b0b54a529c Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 7 Sep 2018 10:53:19 +0200 +Subject: [PATCH 6/6] alsaucm: add alsa-ucm udev rules for PAZ00 (Toshiba + AC100/Dynabook AZ). + +Signed-off-by: Jaroslav Kysela +--- + .gitignore | 1 + + alsaucm/89-alsa-ucm.rules.in | 8 ++++++++ + alsaucm/Makefile.am | 15 ++++++++++++++- + 3 files changed, 23 insertions(+), 1 deletion(-) + create mode 100644 alsaucm/89-alsa-ucm.rules.in + +diff --git a/alsaucm/89-alsa-ucm.rules.in b/alsaucm/89-alsa-ucm.rules.in +new file mode 100644 +index 0000000..52a7616 +--- /dev/null ++++ b/alsaucm/89-alsa-ucm.rules.in +@@ -0,0 +1,8 @@ ++SUBSYSTEM!="sound", GOTO="ucm_end" ++ACTION!="change", GOTO="ucm_end" ++KERNEL!="card*", GOTO="ucm_end" ++ ++ATTRS{id}=="PAZ00", RUN+="@bindir@/alsaucm -c PAZ00 set _verb HiFi" ++ATTRS{id}=="PAZ00", RUN+="@bindir@/alsaucm -c PAZ00 set _verb Record" ++ ++LABEL="ucm_end" +diff --git a/alsaucm/Makefile.am b/alsaucm/Makefile.am +index ee0391e..651f678 100644 +--- a/alsaucm/Makefile.am ++++ b/alsaucm/Makefile.am +@@ -15,4 +15,17 @@ alsaucm_LDADD = -lasound + %.1: %.rst + rst2man $< > $@ + +-EXTRA_DIST = alsaucm.rst ++udevrules_DATA = \ ++ 89-alsa-ucm.rules ++ ++edit = \ ++ $(SED) -r -e 's,@bindir\@,$(bindir),g' \ ++ -e 's,@mydatadir\@,$(mydatadir),g' \ ++ < $< > $@ || rm $@ ++ ++89-alsa-ucm.rules: 89-alsa-ucm.rules.in ++ $(edit) ++ ++EXTRA_DIST = alsaucm.rst 89-alsa-ucm.rules.in ++ ++CLEANFILES = 89-alsa-ucm.rules +-- +2.13.6 + diff --git a/alsa-restore.service b/alsa-restore.service new file mode 100644 index 0000000000000000000000000000000000000000..4a32e11891481e9d67092dd06fb90d1fe55edd32 --- /dev/null +++ b/alsa-restore.service @@ -0,0 +1,15 @@ +# +# Note that two different ALSA card state management schemes exist and they +# can be switched using a file exist check - /etc/alsa/state-daemon.conf . +# + +[Unit] +Description=Save/Restore Sound Card State +ConditionPathExists=!/etc/alsa/state-daemon.conf + +[Service] +Type=oneshot +RemainAfterExit=true +ExecStart=-/sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main restore +ExecStop=/sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf store +StandardOutput=syslog diff --git a/alsa-state.service b/alsa-state.service new file mode 100644 index 0000000000000000000000000000000000000000..6dd312bb2e0c6778ed1608f5548a1127fa1dd1cc --- /dev/null +++ b/alsa-state.service @@ -0,0 +1,13 @@ +# +# Note that two different ALSA card state management schemes exist and they +# can be switched using a file exist check - /etc/alsa/state-daemon.conf . +# + +[Unit] +Description=Manage Sound Card State (restore and store) +ConditionPathExists=/etc/alsa/state-daemon.conf + +[Service] +Type=simple +ExecStart=-/usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main rdaemon +ExecStop=-/usr/sbin/alsactl -s kill save_and_quit diff --git a/alsa-utils-1.1.6.tar.bz2 b/alsa-utils-1.1.6.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..53c231bdf9fb43d1f9bb0ffc7f0922d39af9caa2 Binary files /dev/null and b/alsa-utils-1.1.6.tar.bz2 differ diff --git a/alsa-utils.spec b/alsa-utils.spec new file mode 100644 index 0000000000000000000000000000000000000000..38b2f681aa28adbd0291717389071adc5f32188f --- /dev/null +++ b/alsa-utils.spec @@ -0,0 +1,117 @@ +Name: alsa-utils +Version: 1.1.6 +Release: 8 +Summary: Advanced linux sound architecture (ALSA) utility to the Linux operating system. +License: GPLv2+ +URL: http://www.alsa-project.org/ +Source: ftp://ftp.alsa-project.org/pub/utils/alsa-utils-%{version}.tar.bz2 +Patch0000: alsa-git.patch +Source1: alsaunmute +Source2: alsa.rules +Source3: alsactl.conf +Source4: alsa-restore.service +Source5: alsa-state.service + +BuildRequires: alsa-lib-devel >= 1.1.6 libsamplerate-devel +BuildRequires: ncurses-devel gettext-devel xmlto python3-docutils systemd +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +Requires: alsa-lib >= 1.1.6 + +%description +This package provides command line utilities for audio and MIDI functionality +to the Linux operating system. + +%package devel +Summary: ALSA Basic Audio Tester +BuildRequires: fftw-devel +Provides: %{name}-alsabat = %{version}-%{release} +Obsoletes: %{name}-alsabat < %{version}-%{release} + +%description devel +This package contains tool for basic audio testing using ALSA framework +and Fast Fourier Transform library. + +%package help +Summary: ALSA help + +%description help +This package contains help documentation for alsa-utils. + +%prep +%autosetup -n %{name}-%{version} -p1 + +%build +%configure CFLAGS="$RPM_OPT_FLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" --disable-alsaconf \ + --with-udev-rules-dir=%{_prefix}/lib/udev/rules.d --with-systemdsystemunitdir=%{_unitdir} +%make_build +cp %{SOURCE1} . + +%install +%make_install +%find_lang %{name} + +install -d %{buildroot}/%{_prefix}/lib/udev/rules.d +install -pm 644 %{SOURCE2} %{buildroot}/%{_prefix}/lib/udev/rules.d/90-alsa-restore.rules +sed -e 's,@bindir@,%{_bindir},g' alsaucm/89-alsa-ucm.rules.in > alsaucm/89-alsa-ucm.rules +install -pm 644 alsaucm/89-alsa-ucm.rules %{buildroot}/%{_prefix}/lib/udev/rules.d/89-alsa-ucm.rules +install -d %{buildroot}/%{_unitdir} +install -pm 644 %{SOURCE4} %{buildroot}/%{_unitdir}/alsa-restore.service +install -pm 644 %{SOURCE5} %{buildroot}/%{_unitdir}/alsa-state.service + +install -d -m 755 %{buildroot}/%{_bindir} +install -p -m 755 %{SOURCE1} %{buildroot}/%{_bindir} +install -d -m 755 %{buildroot}/%{_mandir}/man1 + +install -d -m 755 %{buildroot}/%{_prefix}/lib/alsa +mv %{buildroot}%{_datadir}/alsa/init %{buildroot}/%{_prefix}/lib/alsa + +ln -s ../../lib/alsa/init %{buildroot}%{_datadir}/alsa/init + +install -d -m 755 %{buildroot}/etc/alsa +install -pm 644 %{SOURCE3} %{buildroot}/etc/alsa +install -d -m 755 %{buildroot}/var/lib/alsa + +%pre +if [ ! -r %{_unitdir}/alsa-state.service ]; then + [ -d /etc/alsa ] || mkdir -m 0755 /etc/alsa + echo "# Remove this file to disable the alsactl daemon mode" > \ + /etc/alsa/state-daemon.conf +fi + +%post +%systemd_post alsa-state.service + +%preun +%systemd_preun alsa-state.service + +%postun +%systemd_postun_with_restart alsa-state.service + +%files -f %{name}.lang +%doc COPYING ChangeLog +%config %{_sysconfdir}/alsa/* +%{_prefix}/lib/udev/rules.d/* +%{_unitdir}/* +%{_unitdir}/sound.target.wants/* +%{_prefix}/lib/alsa/init/* +%{_bindir}/* +%exclude %{_bindir}/alsabat +%{_sbindir}/* +%{_datadir}/alsa/ +%{_datadir}/sounds/* +%dir %{_sysconfdir}/alsa/ +%dir %{_prefix}/lib/alsa/ +%dir %{_prefix}/lib/alsa/init/ +%dir %{_sharedstatedir}/alsa/ +%files devel +%{_bindir}/alsabat + +%files help +%{_mandir}/*/* +%doc README TODO + +%changelog +* Fri Feb 14 2020 gulining - 1.1.6-8 +- Package init diff --git a/alsa.rules b/alsa.rules new file mode 100644 index 0000000000000000000000000000000000000000..01a10c651802e12b97ff312149e70a4c36795d51 --- /dev/null +++ b/alsa.rules @@ -0,0 +1,12 @@ +ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", GOTO="alsa_restore_go" +GOTO="alsa_restore_end" + +LABEL="alsa_restore_go" +TEST!="/etc/alsa/state-daemon.conf", RUN+="/sbin/alsactl -E \ + ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf \ + --initfile=/lib/alsa/init/00main restore /dev/$name" +TEST=="/etc/alsa/state-daemon.conf", RUN+="/sbin/alsactl -E \ + ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf \ + --initfile=/lib/alsa/init/00main nrestore /dev/$name" + +LABEL="alsa_restore_end" diff --git a/alsactl.conf b/alsactl.conf new file mode 100644 index 0000000000000000000000000000000000000000..71f0d8085e3f8302d788c557910e5e755c8d767b --- /dev/null +++ b/alsactl.conf @@ -0,0 +1,14 @@ +# +# ALSA library configuration file for alsactl tool +# (/usr/share/alsa tree is not necessary for alsactl) +# + +ctl.hw { + @args [ CARD ] + @args.CARD { + type string + default "0" + } + type hw + card $CARD +} diff --git a/alsaunmute b/alsaunmute new file mode 100755 index 0000000000000000000000000000000000000000..78096e83b5fac9864d4fdc14ddd6ad52f2f2777a --- /dev/null +++ b/alsaunmute @@ -0,0 +1,3 @@ +#!/bin/sh + +exec /sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main init