diff --git a/.alsa-utils.metadata b/.alsa-utils.metadata new file mode 100644 index 0000000..9bf146f --- /dev/null +++ b/.alsa-utils.metadata @@ -0,0 +1 @@ +62d07a089cb702ad93deed570d8dd77f6e6a7aae SOURCES/alsa-utils-1.1.6.tar.bz2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d806072 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/alsa-utils-1.1.6.tar.bz2 diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/alsa-delay b/SOURCES/alsa-delay new file mode 100755 index 0000000..a412188 --- /dev/null +++ b/SOURCES/alsa-delay @@ -0,0 +1,979 @@ +#!/bin/bash + +version=0.1.0 +tmpdir=$TMPDIR +if test -z "$tmpdir"; then + tmpdir="/tmp" +fi +tmpdir=$tmpdir/alsa-delay-script + +delay= +pcard= +pdev= +ccard= +cdev= + +yes= +quiet= +clean= +remove= + +pdevice="default:%s" +pdevice_set= +cdevice="plughw:%s,%s,%s" +pctl= +cctl= +one= +arg= +mix= +pa= + +useprocfs=yes + +fuser_prg=fuser +insmod_prg=insmod +rmmod_prg=rmmod +lsmod_prg=lsmod +modprobe_prg=modprobe +chkconfig_prg=chkconfig +systemctl_prg=systemctl +pidof_prg=pidof +alsaloop_prg=alsaloop +amixer_prg=amixer +test -x /sbin/fuser && fuser_prg=/sbin/fuser +test -x /sbin/insmod && insmod_prg=/sbin/insmod +test -x /sbin/rmmod && rmmod_prg=/sbin/rmmod +test -x /sbin/lsmod && lsmod_prg=/sbin/lsmod +test -x /sbin/modprobe && modprobe_prg=/sbin/modprobe +test -x /sbin/chkconfig && chkconfig_prg=/sbin/chkconfig +test -x /bin/systemctl && systemctl_prg=/bin/systemctl +test -x /sbin/pidof && pidof_prg=/sbin/pidof +test -x /usr/bin/alsaloop && alsaloop_prg=/usr/bin/alsaloop +test -x /usr/local/bin/alsaloop && alsaloop_prg=/usr/local/bin/alsaloop +test -x /usr/bin/amixer && amixer_prg=/usr/bin/amixer + +modprobeconf=/etc/modprobe.d/alsa.conf +test -r /etc/modprobe.conf && modprobeconf=/etc/modprobe.conf && useprocfs="" +alsaloopconf=/etc/alsaloop.conf + +test -r modprobe.work && modprobeconf=modprobe.work +test -r modprobe.work && alsaloopconf=alsaloop.conf + +usage() { + echo "Usage: $0 [OPTION]... [[,]]" + cat < is ALSA card index (number) or string card identifier + is ALSA device number + +Use 'aplay -l' to list available cards and devices. + +Operation modes: + -h, --help print this help, then exit + -q, --quiet quiet mode + -y, --yes do not ask any questions - answer is always yes + -c, --clean clean temporary directory and exit + -r, --remove remove the alsa-delay config modifications and exit + --tmpdir= set temporary directory +Alsaloop options: + --pdevice= force playback device + --cdevice= force capture device + --pctl= force playback ctl device + --cctl= force capture ctl device + --one= pass this argument to last thread + --arg= pass this argument to all threads + --mix= redirect ALSA mixer controls to OSS mixer + (default is Master) + --pa Redirect PA to alsaloop + +Note: For devices, the string %s is replaced with the card index + and second string %s is replaced with the device index + and third string %s is replaced the substream index (0-7). + Example: hw:%s,%s,%s (card, device, substream) +EOF +} + +while : +do + case "$1" in + -h|--help) + usage + exit 0 + ;; + -q|--quiet) + quiet=true ;; + -y|--yes) + yes=true ;; + -c|--clean) + clean="full" ;; + -r|--remove) + remove="full" ;; + --tmpdir*) + case "$#,$1" in + *,*=*) + tmpdir=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + tmpdir="$2" + shift ;; + esac + tmpdir="$tmpdir/alsa-compile-script" + ;; + --pdevice*) + case "$#,$1" in + *,*=*) + pdevice=`expr "z$1" : 'z-[^=]*=\(.*\)'` + pdevice_set=yes ;; + 1,*) + usage ;; + *) + pdevice="$2" + pdevice_set=yes + shift ;; + esac + ;; + --cdevice*) + case "$#,$1" in + *,*=*) + cdevice=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + cdevice="$2" + shift ;; + esac + ;; + --pctl*) + case "$#,$1" in + *,*=*) + pctl=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + pctl="$2" + shift ;; + esac + ;; + --cctl*) + case "$#,$1" in + *,*=*) + cctl=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + cctl="$2" + shift ;; + esac + ;; + --one*) + case "$#,$1" in + *,*=*) + one1=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + one1="$2" + shift ;; + esac + one="$one $one1" + ;; + --arg*) + case "$#,$1" in + *,*=*) + arg1=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + arg1="$2" + shift ;; + esac + arg="$arg $arg1" + ;; + --mix*) + case "$#,$1" in + *,*=*) + mix=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;; + 1,*) + usage ;; + *) + mix="$2" + shift ;; + esac + arg="$arg $arg1" + ;; + --pa) + pa=true + ;; + *) + if test -n "$1"; then + ok= + if test -z "$delay"; then + delay="$1" + if test "$delay" -lt 1000; then + delay=$[$delay * 1000] + fi + ok=true + fi + if test -z "$ok" -a -z "$pcard"; then + pcard="$1" + ok=true + fi + if test -z "$ok"; then + echo "Unknown parameter '$1'" + break + fi + else + break + fi + ;; + esac + shift +done + +test -z "$pdevice_set" -a -n "$pa" && pdevice="plug:dmix:%s" +test -z "$delay" && delay="50000" +test -z "$pcard" && pcard="1" +pdev=$(echo $pcard | cut -s -d , -f 2) +pcard=$(echo $pcard | cut -d , -f 1) +test -z "$pdev" && pdev="0" +test -z "$ccard" && ccard="Loopback,1" +cdev=$(echo $ccard | cut -s -d , -f 2) +ccard=$(echo $ccard | cut -d , -f 1) +test -z "$cdev" && cdev="0" + +# Echo "true" or "false", depending on $yes and user response to prompt +# $1 is prompt message +question_bool() { + if test "$yes" = "yes"; then + echo "true" + else + echo >&2 -n "$1 (Y/ ) " + read i + local i=${i:0:1} + if test "$i" = "Y" -o "$i" = "y"; then + echo "true" + else + echo "false" + fi + fi +} + +# Safe exit +safe_exit() { + if test -r /etc/pulse/client.conf ; then + if grep "# alsa-delay-line-to-be-removed-1234" /etc/pulse/client.conf 2> /dev/null > /dev/null ; then + grep -v alsa-delay-line-to-be-removed-1234 /etc/pulse/client.conf > /etc/pulse/client.conf.new + if test -s /etc/pulse/client.conf.new; then + mv /etc/pulse/client.conf.new /etc/pulse/client.conf + fi + fi + fi + exit $1 +} + +# Log and execute $@ and check success +do_cmd() { + if test -z "$quiet"; then + echo "> $@" + fi + $@ || safe_exit 1 +} + +# Cache or restore $protocol and $url and $package in $tmpdir +check_environment() { + if ! test -d $tmpdir ; then + mkdir -p $tmpdir + if ! test -d $tmpdir; then + echo >&2 "Unable to create directory $tmpdir." + exit 1 + fi + fi + echo "Using temporary tree: $tmpdir" + test -x /bin/depmod && depmodbin=/bin/depmod + test -x /sbin/depmod && depmodbin=/sbin/depmod + if test -z "$depmodbin"; then + echo >&2 "Unable to find depmod utility." + exit 1 + fi + test -x /bin/modinfo && modinfobin=/bin/modinfo + test -x /sbin/modinfo && modinfobin=/sbin/modinfo + if test -z "$modinfobin"; then + echo >&2 "Unable to find modinfo utility." + exit 1 + fi +} + +# Kill processes currently accessing the audio devices +kill_audio_apps() { + local pids0=$($fuser_prg /dev/snd/* 2> /dev/null) + local pids1=$($fuser_prg /dev/mixer* 2> /dev/null) + local pids2=$($fuser_prg /dev/sequencer* 2> /dev/null) + local pids= + for pid in $pids0 $pids1 $pids2; do + local pids="$pids $pid" + done + if ! test -z "$pids"; then + echo + echo "WARNING! An audio application uses ALSA driver:" + echo + for pid in $pids; do + ps --no-headers -p $pids || safe_exit 1 + done + echo + if test $(question_bool "Would you like to kill these apps?") = "true"; then + if test -w /etc/pulse/client.conf ; then + echo "autospawn = no # alsa-delay-line-to-be-removed-1234" >> /etc/pulse/client.conf + fi + for pid in $pids; do + do_cmd kill $pid + done + sleep 2 + local killed= + for pid in $pids; do + local a=$(ps --no-headers -p $pids) + if test -n "$a"; then + do_cmd kill -9 $pid + local killed="true" + fi + done + if test "$killed" = "true"; then + sleep 2 + for pid in $pids; do + local a=$(ps --no-headers -p $pids) + if test -n "$a"; then + echo >&2 "Unable to kill application:" + echo >&2 " $a" + safe_exit 1 + fi + done + fi + else + echo >&2 "Cannot continue with running audio applications." + safe_exit 1 + fi + fi +} + +# Echo the list of configured sound modules +configured_modules() { + if test -z "$useprocfs"; then + cat $modprobeconf | grep -E "^alias snd-card-" | cut -d ' ' -f 3 + else + cat /proc/asound/modules | colrm 1 3 + fi +} + +# Echo the list of loaded sound modules +current_modules() { + $lsmod_prg | cut -d ' ' -f 1 | grep -E "^(snd[_-])" +} + +# The loopback kernel driver detection +aloop_present() { + if test -r /proc/asound/card0/id; then + local id=$(cat /proc/asound/card0/id) + else + local id="" + fi + if test "$id" = "Loopback"; then + echo "yes" + fi +} + +# Remove kernel modules, using two phases +# $@ is module names +my_rmmod() { + local phase2= + while test -n "$1"; do + if ! $rmmod_prg $1 2> /dev/null > /dev/null; then + local phase2="$phase2 $1" + else + echo "> rmmod $1" + fi + shift + done + for mod in $phase2; do + echo "> rmmod $mod" + if ! $rmmod_prg $mod ; then + echo >&2 "Unable to remove kernel module $mod." + safe_exit 1 + fi + done +} + +# Reload kernel modules +kernel_modules() { + kill_audio_apps + if test "$1" = "unload"; then + local present=$(aloop_present) + if test "$present" = "yes"; then + if ! $rmmod_prg snd-aloop; then + echo >&2 "Unable to remove kernel module snd-aloop." + safe_exit 1 + fi + fi + fi + local curmods=$(current_modules) + local usermods=$(configured_modules) + my_rmmod $curmods + $modprobe_prg soundcore || safe_exit 1 + if test "$1" = "load"; then + if ! $modprobe_prg snd-aloop; then + echo >&2 "Unable to install kernel module snd-aloop." + safe_exit 1 + fi + fi + for mod in $usermods; do + if ! $modprobe_prg $mod; then + echo >&2 "Unable to install kernel module $mod." + safe_exit 1 + fi + done + echo "Kernel modules ready:" + cat /proc/asound/cards + sleep 0.5 +} + +# If $package is alsa-driver then remove current modules +kernel_modules_remove() { + local curmods=$(current_modules) + if test -z "$curmods"; then + echo "No ALSA kernel modules to remove." + safe_exit 0 + fi + kill_audio_apps + my_rmmod $curmods + echo "ALSA kernel modules removed." +} + +function clean() { + echo -n "Removing tree $tmpdir:" + if test -d "$tmpdir"; then + if ! rm -rf "$tmpdir"; then + echo " failed" + safe_exit 1 + fi + fi + echo " success" +} + +function reindex_modprobe_conf() { + if test -z "$useprocfs"; then + cat > $tmpdir/run.awk < 1) + printf(",") + printf("%i", c) + } + continue + } + printf(" %s", l[i]) + } + printf("\n") + } else if (l[1] == "remove") { + printf(l[1]) + flag = 0 + for (i = 2; i <= length(l); i++) { + if (l[i] == "/usr/sbin/alsactl" || l[i] == "store") { + flag++; + printf(" %s", l[i]); + continue; + } + if (flag == 2) { + c = int(l[i]) + 1; + printf(" %i", c); + flag = 0; + continue; + } + flag = 0; + printf(" %s", l[i]); + } + printf("\n") + } else { + print line + } +} + +BEGIN { aloop=0; } +/alias snd-card-0 snd-aloop/ { aloop=1; next; } +/options snd-card-0 index=0/ { if (aloop) next; } +/options snd-aloop/ { next; } +/alias snd-card-/ { rewrite_line(\$0); next; } +/options snd-/ { rewrite_line(\$0); next; } +/remove snd-/ { rewrite_line(\$0); next; } + { print \$0; } +EOF + cat $modprobeconf | awk -f $tmpdir/run.awk > $modprobeconf.new + rm $tmpdir/run.awk || safe_exit 1 + else + local index=1 + echo -n "" > $modprobeconf.new + declare -a modules printed + for mod in $(cat /proc/asound/modules | grep -Ev "^2[6789]" | colrm 1 3); do + if test "$mod" != "snd_aloop" -a "$mod" != "snd-aloop"; then + if test -z ${modules[$mod]}; then + modules[$mod]=$index + else + modules[$mod]="${modules[mod]},$index" + fi + echo "alias snd-card-$index $mod" >> $modprobeconf.new + echo "options snd-card-$index index=$index" >> $modprobeconf.new + fi + index=$(expr $index + 1) + done + for mod in $(cat /proc/asound/modules | grep -Ev "^2[6789]" | colrm 1 3); do + if test "$mod" != "snd_aloop" -a "$mod" != "snd-aloop"; then + if test -z ${printed[$mod]}; then + echo "options $mod index=${modules[$mod]}" >> $modprobeconf.new + printed[$mod]=yes + fi + fi + done + fi +cat >> $modprobeconf.new < /dev/null | grep -E "^alias snd-card-0 snd-aloop") + local present=$(aloop_present) + if test -n "$check"; then + echo "Module snd-aloop is already installed." + if ! test "$present" = "yes"; then + kernel_modules load + fi + else + reindex_modprobe_conf + if ! test "$present" = "yes"; then + kernel_modules load + else + kernel_modules + fi + fi +} + +function myprintf() { + local cnt=$(echo "$1" | grep -o "%" | wc -l) + if test $cnt -eq 1; then + printf "$1" "$2" + else if test $cnt -eq 2; then + printf "$1" "$2" "$3" + else + printf "$1" "$2" "$3" "$4" + fi + fi +} + +function check_ctl_name() { + $amixer_prg -D "$1" contents | grep "name='$2'" +} + +function check_oss_mixer() { + grep ": mixer" /proc/asound/oss/devices +} + +function get_card_id() { + $amixer_prg -D "$1" info | head -1 | cut -d '/' -f 1 | cut -d ' ' -f 3- | awk '{ print substr($0, 2, length($0)-2) }' +} + +function generate_alsaloop_line() { + local file="$1" + local idx="$2" + local carg=$(myprintf "$cdevice" $ccard $cdev $idx) + local parg=$(myprintf "$pdevice" $pcard $pdev $idx) + local res="-C $carg -P $parg -T $idx -t $delay" + if test -n "$cctl"; then + local carg=$(myprintf "$cctl" $pcard $cdev $idx) + local res="$res -Y $carg" + fi + if test -n "$pctl"; then + local parg=$(myprintf "$pctl" $pcard $pdev $idx) + local res="$res -X $parg" + fi + if test -n "$arg"; then + local res="$res $arg" + fi + if test $idx -eq 7; then + if test -n "$one"; then + local res="$res $one" + fi + if test -z "$pctl"; then + local res="$res -X hw:$pcard" + fi + local mymix="$mix" + if test -z "$mymix"; then + local mymix="Master" + for mymix in Master "Master Mono" Headphone Headphone2 PCM Speaker \ + "Desktop Speaker" Beep Front Rear Center LFE Side \ + Surround ; do + local check=$(check_ctl_name hw:$pcard "$mymix Playback Switch") + if test -n "$check"; then + local res="$res -m \"name='$mymix Playback Switch'\"" + fi + local check=$(check_ctl_name hw:$pcard "$mymix Playback Volume") + if test -n "$check"; then + local res="$res -m \"name='$mymix Playback Volume'\"" + fi + done + else + local check=$(check_ctl_name hw:$pcard "$mymix Playback Switch") + if test -n "$check"; then + local res="$res -m \"name='$mymix Playback Switch'\"" + fi + local check=$(check_ctl_name hw:$pcard "$mymix Playback Volume") + if test -n "$check"; then + local res="$res -m \"name='$mymix Playback Volume'\"" + fi + fi + local check=$(check_oss_mixer) + if test -n "$check"; then + local res="$res -O \"$mymix@VOLUME\"" + fi + fi + echo $res >> $file +} + +function generate_alsaloop_conf() { + local idx=0 + rm -f $alsaloopconf.new + while test $idx -lt 8; do + generate_alsaloop_line $alsaloopconf.new $idx + idx=$(expr $idx + 1) + done + mv $alsaloopconf.new $alsaloopconf || safe_exit 1 +} + +function kill_alsaloop() { + local pid=$($pidof_prg alsaloop) + if test -n "$pid"; then + echo "Killing alsaloop..." + fi + while test -n "$pid"; do + kill $pid + sleep 0.01 + pid=$($pidof_prg alsaloop) + done +} + +function restart_alsaloop() { + echo "Restarting alsaloop: delay $delay us." + if test -d /etc/systemd/system; then + systemctl start alsaloop.service + else + /etc/init.d/alsaloop start + fi + sleep 0.4 + local pid=$($pidof_prg alsaloop) + if test -z "$pid"; then + echo "ERROR: Not started, check /var/log/messages for details" + else + if test -d /etc/systemd/system; then + systemctl status alsaloop.service + else + ps -p $pid + fi + fi +} + +function create_systemd_service() { + if test -r /etc/systemd/system/alsaloop.service; then + echo "/etc/systemd/system/alsaloop.service exists" + else + cat >> /etc/systemd/system/alsaloop.service <> /etc/init.d/alsaloop < + +# For RedHat and cousins: +# chkconfig: 2345 99 01 +# description: Start alsaloop daemon +# processname: alsaloop + +### BEGIN INIT INFO +# Provides: alsaloop +# Required-Start: \$local_fs +# Required-Stop: \$local_fs +# Should-Start: +# Short-Description: ALSALOOP +# Description: ALSALOOP +### END INIT INFO + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# You should have received a copy of the GNU General Public License (for +# example COPYING); if not, write to the Free Software Foundation, Inc., 675 +# Mass Ave, Cambridge, MA 02139, USA. +# This code was originally developed as a Senior Thesis by Michael Cornwell +# at the Concurrent Systems Laboratory (now part of the Storage Systems +# Research Center), Jack Baskin School of Engineering, University of +# California, Santa Cruz. http://ssrc.soe.ucsc.edu/. + +alsaloop_opts="--daemonize --workaround serialopen --config $alsaloopconf" + +ALSALOOP_BIN=/usr/bin/alsaloop +test -x /usr/local/bin/alsaloop && ALSALOOP_BIN=/usr/local/bin/alsaloop + +# Source function library +. /etc/rc.d/init.d/functions + +RETVAL=0 +prog=alsaloop +pidfile=/var/lock/subsys/alsaloop + +start() +{ + modprobe snd-aloop + echo -n \$"Starting \$prog: " + daemon \$ALSALOOP_BIN \$alsaloop_opts + RETVAL=\$? + echo + [ \$RETVAL = 0 ] && touch \$pidfile + return \$RETVAL +} + +stop() +{ + echo -n \$"Shutting down \$prog: " + killproc \$ALSALOOP_BIN + RETVAL=\$? + echo + rm -f \$pidfile + return \$RETVAL +} + +case "\$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + try-restart) + if [ -f \$pidfile ]; then + stop + start + fi + ;; + status) + status $prog + RETVAL=$? + ;; + *) + echo \$"Usage: \$0 {start|stop|restart|try-restart}" + RETVAL=3 +esac + +exit \$RETVAL +EOF + chmod 755 /etc/init.d/alsaloop || safe_exit 1 + $chkconfig_prg --add alsaloop + $chkconfig_prg alsaloop on + fi +} + +function modify_pa_conf() { + + if grep Loopback /etc/pulse/default.pa > /dev/null; then + echo "/etc/pulse/default.pa already modified" + else + if test -f /etc/pulse/default.pa; then + local pcardid=$(get_card_id "hw:$pcard") + if ! test -f /etc/pulse/default.pa.alsa-delay.save ; then + cp /etc/pulse/default.pa /etc/pulse/default.pa.alsa-delay.save + fi + cat /etc/pulse/default.pa | \ + sed -e 's/^load-module module-udev-detect/#load-module module-udev-detect # commented by alsa-delay/' \ + -e 's/^load-module module-detect/#load-module module-detect # commented by alsa-delay/' \ + -e "s/^### Automatically load driver modules for Bluetooth hardware/load-module module-alsa-card device_id=Loopback\nload-module module-alsa-card device_id=$pcardid\n\n### Automatically load driver modules for Bluetooth hardware/" > /etc/pulse/default.pa.new + if test -s /etc/pulse/default.pa.new; then + mv /etc/pulse/default.pa.new /etc/pulse/default.pa + echo "/etc/pulse/default.pa changed" + fi + fi + fi + + local file= + local asoundconf= + if test -d /etc/alsa -a -f /etc/alsa/pulse-default.conf; then + file=/etc/alsa/alsaloop-default.conf + asoundconf=yes + fi + if test -f /usr/share/alsa/alsa.conf.d/99-pulseaudio-default.conf ; then + file=/usr/share/alsa/alsa.conf.d/A0-alsaloop-default.conf + fi + if test -z "$file"; then + echo "unknown PulseAudio setup (asound.conf)" + elif test -f $file; then + echo "$file exists" + else + cat >> $file < /etc/asound.conf.new + if test -s /etc/asound.conf.new; then + mv /etc/asound.conf.new /etc/asound.conf + fi + fi + fi +} + +function remove() { + if test -f /etc/pulse/default.pa.alsa-delay.save ; then + echo "Restoring /etc/pulse/default.pa" + mv /etc/pulse/default.pa.alsa-delay.save /etc/pulse/default.pa + fi + if test -f /etc/init.d/alsaloop ; then + echo "Removing /etc/init.d/alsaloop service" + $chkconfig_prg alsaloop off + $chkconfig_prg --del alsaloop + rm /etc/init.d/alsaloop + fi + if test -f /etc/systemd/system/alsaloop.service ; then + echo "Removing /etc/systemd/system/alsaloop.service" + $systemctl_prg disable alsaloop.service + rm /etc/systemd/system/alsaloop.service + fi + if test -f $alsaloopconf ; then + echo "Removing $alsaloopconf" + rm $alsaloopconf + fi + if test -f /etc/alsa/alsaloop-default.conf ; then + echo "Removing /etc/alsa/alsaloop-default.conf" + rm /etc/alsa/alsaloop-default.conf + fi + if test -f /usr/share/alsa/alsa.conf.d/A0-alsaloop-default.conf ; then + echo "Removing /usr/share/alsa/alsa.conf.d/A0-alsaloop-default.conf" + rm /usr/share/alsa/alsa.conf.d/A0-alsaloop-default.conf + fi + if grep "alsaloop-default.conf" /etc/asound.conf > /dev/null 2> /dev/null ; then + echo "Modifying /etc/asound.conf" + cat /etc/asound.conf | sed 's/alsaloop-default.conf/pulse-default.conf/g' > /etc/asound.conf.new + if test -s /etc/asound.conf.new; then + mv /etc/asound.conf.new /etc/asound.conf + fi + fi + if test -f $modprobeconf.alsa-delay.save ; then + echo "Restoring $modprobeconf" + if test -s $modprobeconf.alsa-delay.save ; then + mv $modprobeconf.alsa-delay.save $modprobeconf + else + rm $modprobeconf.alsa-delay.save + rm $modprobeconf + fi + fi + if test $(aloop_present) = "yes"; then + kernel_modules unload + fi +} + +rundir=$(pwd) +export LC_ALL=C +export LANGUAGE=C + +check_environment + +if test -n "$clean"; then + clean + safe_exit 0 +fi + +if test -n "$remove"; then + kill_alsaloop + remove + clean + safe_exit 0 +fi + +kill_alsaloop +if test -d /etc/systemd/system ; then + create_systemd_service +else + create_initd +fi +modify_modprobe_conf +generate_alsaloop_conf +if test -n "$pa"; then + modify_pa_conf +fi +restart_alsaloop + +clean + +safe_exit 0 diff --git a/SOURCES/alsa-delay.1 b/SOURCES/alsa-delay.1 new file mode 100644 index 0000000..eafa81f --- /dev/null +++ b/SOURCES/alsa-delay.1 @@ -0,0 +1,78 @@ +.TH ALSA-DELAY 1 "6 Jane 2016" +.SH NAME +alsadelay \- a command to (re)initialize sound hardware + +.SH SYNOPSIS +\fBalsa-delay\fP \fI[options]\fP \fIrequested_delay_in_ms\fP [\fIoutput_card\fP[,\fIdevice\fP]] + +.SH DESCRIPTION +\fBalsa-delay\fP is a command\-line utility to setup an audio +delay. The snd-aloop ALSA driver is used to send all PCM streams +back to the user space and the alsaloop utility is used to send +this stream to a real hardware. + +The parameter \fIoutput_card\fP is ALSA card index (number) or +string card identifier. The parameter \fIdevice\fP is ALSA device number. + +Use \fIaplay -l\fP to list available cards and devices. + + +.SH OPTIONS +.TP +\fI\-\-h,\-\-help\fP +Print help. +.TP +\fI\-\-q,\-\-quiet\fP +Quiet mode. +.TP +\fI\-\-y,\-\-yes\fP +Do not ask any questions - answer is always yes. +.TP +\fI\-\-c,\-\-clean\fP +Clean temporary directory. +.TP +\fI\-\-r,\-\-remove\fP +Remove the alsa-delay config modifications (modprobe, pulse-audio). +.TP +\fI\-\-tmpdir=\fP +Set temporary directory. + +.SH OPTIONS (for alsaloop daemon) +.TP +\fI\-\-pdevice=\fP +Force playback device. +.TP +\fI\-\-cdevice=\fP +Force capture device. +.TP +\fI\-\-pctl=\fP +Force playback control device. +.TP +\fI\-\-cctl=\fP +Force capture control device. +.TP +\fI\-\-one=\fP +Pass this argument to last thread. +.TP +\fI\-\-arg=\fP +Pass this argument to all threads. +.TP +\fI\-\-mix=\fP +Redirect ALSA mixer controls to OSS mixer (default is Master). +.TP +\fI\-\-pa\fP +Redirect pulse-audio to alsaloop. + +.SH NOTE + +For devices, the string %s is replaced with the card index +and second string %s is replaced with the device index +and third string %s is replaced the substream index (0-7). + +Example: hw:%s,%s,%s (card, device, substream) + +.SH SEE ALSO +\fB +alsaloop(1) +amixer(1) +alsamixer(1) diff --git a/SOURCES/alsa-restore.service b/SOURCES/alsa-restore.service new file mode 100644 index 0000000..3eb1bbd --- /dev/null +++ b/SOURCES/alsa-restore.service @@ -0,0 +1,16 @@ +# +# 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 +ConditionPathExistsGlob=/dev/snd/control* +ConditionPathExists=/var/lib/alsa/asound.state + +[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 diff --git a/SOURCES/alsa-state.service b/SOURCES/alsa-state.service new file mode 100644 index 0000000..6dd312b --- /dev/null +++ b/SOURCES/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/SOURCES/alsa-utils-1.1.6-post.patch b/SOURCES/alsa-utils-1.1.6-post.patch new file mode 100644 index 0000000..949b5df --- /dev/null +++ b/SOURCES/alsa-utils-1.1.6-post.patch @@ -0,0 +1,36 @@ +From da4d5bd53a1a57d1b39318b83d3280fbcd78e9f6 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 15 May 2018 22:17:01 +0200 +Subject: [PATCH] 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 + diff --git a/SOURCES/alsa.rules b/SOURCES/alsa.rules new file mode 100644 index 0000000..6a4a0c3 --- /dev/null +++ b/SOURCES/alsa.rules @@ -0,0 +1,8 @@ +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/SOURCES/alsactl.conf b/SOURCES/alsactl.conf new file mode 100644 index 0000000..71f0d80 --- /dev/null +++ b/SOURCES/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/SOURCES/alsaunmute b/SOURCES/alsaunmute new file mode 100755 index 0000000..3f772ea --- /dev/null +++ b/SOURCES/alsaunmute @@ -0,0 +1,6 @@ +#!/bin/sh + +exec /sbin/alsactl \ + -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf \ + --initfile=/lib/alsa/init/00main \ + init diff --git a/SOURCES/alsaunmute.1 b/SOURCES/alsaunmute.1 new file mode 100644 index 0000000..057ae50 --- /dev/null +++ b/SOURCES/alsaunmute.1 @@ -0,0 +1,28 @@ +.TH ALSAUNMUTE 1 "21 April 2010" +.SH NAME +alsaunmute \- a simple script to initialize ALSA sound devices + +.SH DESCRIPTION +\fBalsaunmute\fP is a shell script which runs the \fBalsactl(1)\fP +utility with \fIinit\fP argument (see the script for details). + +.SH OPTIONS +None + +.SS +Example: +\fBalsaunmute\fR + +.SH SEE ALSO +\fB +alsactl(1), +alsamixer(1), +amixer(1) +\fP + +.SH BUGS +None known. + +.SH AUTHOR +\fBalsaunmute\fP is by Jaroslav Kysela + diff --git a/SPECS/alsa-utils.spec b/SPECS/alsa-utils.spec new file mode 100644 index 0000000..284e543 --- /dev/null +++ b/SPECS/alsa-utils.spec @@ -0,0 +1,523 @@ +%define baseversion 1.1.6 +#define fixversion .1 + +Summary: Advanced Linux Sound Architecture (ALSA) utilities +Name: alsa-utils +Version: %{baseversion}%{?fixversion} +Release: 1%{?dist} +License: GPLv2+ +Group: Applications/Multimedia +URL: http://www.alsa-project.org/ +Source: ftp://ftp.alsa-project.org/pub/utils/alsa-utils-%{version}.tar.bz2 +Source4: alsaunmute +Source5: alsaunmute.1 +Source7: alsa-delay +Source8: alsa-delay.1 +Source10: alsa.rules +Source11: alsactl.conf +Source20: alsa-restore.service +Source22: alsa-state.service +Patch0: alsa-utils-1.1.6-post.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: alsa-lib-devel >= %{baseversion} +BuildRequires: libsamplerate-devel +BuildRequires: ncurses-devel +BuildRequires: gettext-devel +BuildRequires: xmlto python-docutils +BuildRequires: systemd-units >= 39-2 +Conflicts: udev <= 179-2 +# use latest alsa-lib - the executables in this package requires latest API +Requires: alsa-lib%{?_isa} >= %{baseversion}, systemd-units >= 39-2 +Conflicts: filesystem < 3 + +%description +This package contains command line utilities for the Advanced Linux Sound +Architecture (ALSA). + +%prep +%setup -q -n %{name}-%{version} +%patch0 -p1 -b .post + +%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} %{?_smp_mflags} +%{__cp} %{SOURCE4} . + +%install +make install DESTDIR=$RPM_BUILD_ROOT +%find_lang %{name} + +# Install ALSA udev rules +mkdir -p $RPM_BUILD_ROOT/%{_prefix}/lib/udev/rules.d +install -p -m 644 %{SOURCE10} $RPM_BUILD_ROOT/%{_prefix}/lib/udev/rules.d/90-alsa-restore.rules +mkdir -p $RPM_BUILD_ROOT/%{_unitdir} +install -p -m 644 %{SOURCE20} $RPM_BUILD_ROOT/%{_unitdir}/alsa-restore.service +install -p -m 644 %{SOURCE22} $RPM_BUILD_ROOT/%{_unitdir}/alsa-state.service + +# Install support utilities +mkdir -p -m755 $RPM_BUILD_ROOT/%{_bindir} +install -p -m 755 alsaunmute %{buildroot}/%{_bindir} +mkdir -p -m755 $RPM_BUILD_ROOT/%{_mandir}/man1 +install -p -m 644 %{SOURCE5} %{buildroot}/%{_mandir}/man1/alsaunmute.1 + +# Move /usr/share/alsa/init to /usr/lib/alsa/init +mkdir -p -m 755 %{buildroot}/%{_prefix}/lib/alsa +mv %{buildroot}%{_datadir}/alsa/init %{buildroot}/%{_prefix}/lib/alsa + +# Link /usr/lib/alsa/init to /usr/share/alsa/init back +ln -s ../../lib/alsa/init %{buildroot}%{_datadir}/alsa/init + +# Create a place for global configuration +mkdir -p -m 755 %{buildroot}/etc/alsa +install -p -m 644 %{SOURCE11} %{buildroot}/etc/alsa + +# Create /var/lib/alsa tree +mkdir -p -m 755 %{buildroot}/var/lib/alsa + +# Install alsa-info.sh script +rm -f %{buildroot}/usr/sbin/alsa-info.sh +install -p -m 755 $RPM_BUILD_DIR/%{name}-%{version}/alsa-info/alsa-info.sh %{buildroot}/usr/sbin/alsa-info +ln -s alsa-info %{buildroot}/usr/sbin/alsa-info.sh + +# Install alsa-delay script +install -p -m 755 %{SOURCE7} %{buildroot}/usr/bin/alsa-delay +install -p -m 644 %{SOURCE8} %{buildroot}/%{_mandir}/man1/alsa-delay.1 + +%files -f %{name}.lang +%defattr(-,root,root,-) +%doc COPYING ChangeLog README TODO +%config /etc/alsa/* +%{_prefix}/lib/udev/rules.d/* +%{_unitdir}/* +%{_unitdir}/sound.target.wants/* +%{_prefix}/lib/alsa/init/* +%{_bindir}/* +%{_sbindir}/* +%{_datadir}/alsa/ +%{_datadir}/sounds/* +%{_mandir}/man?/* +%dir /etc/alsa/ +%dir %{_prefix}/lib/alsa/ +%dir %{_prefix}/lib/alsa/init/ +%dir /var/lib/alsa/ + +%pre +if [ ! -r /lib/systemd/system/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 +if [ -s /etc/alsa/asound.state -a ! -s /etc/asound.state ] ; then + mv /etc/alsa/asound.state /etc/asound.state +fi +if [ -s /etc/asound.state -a ! -s /var/lib/alsa/asound.state ] ; then + mv /etc/asound.state /var/lib/alsa/asound.state +fi + +%changelog +* Tue May 22 2018 Jaroslav Kysela - 1.1.6-1 +- Updated to 1.1.6 +- Resolves: rhbz#1578685 + +* Fri Mar 24 2017 Jaroslav Kysela - 1.1.3-2 +- Updated to 1.1.3 +- Resolves: rhbz#1399509 + +* Mon Jun 6 2016 Jaroslav Kysela - 1.1.1-1 +- Updated to 1.1.1 +- Add alsa-delay man page +- Resolves: rhbz#1264129 + +* Fri Dec 12 2014 Jaroslav Kysela - 1.0.28-4 +- Fixed aplay -d regression +- Resolves: rhbz#1172189 + +* Wed Sep 24 2014 Jaroslav Kysela - 1.0.28-3 +- alsactl locking fixes, coverity fixes + +* Tue Sep 23 2014 Jaroslav Kysela - 1.0.28-2 +- Fixes for alsa-info.sh + +* Mon Sep 15 2014 Jaroslav Kysela - 1.0.28-1 +- Updated to 1.0.28 +- Resolves: rhbz#1112206 + +* Fri Jan 24 2014 Daniel Mach - 1.0.27.2-5 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 1.0.27.2-4 +- Mass rebuild 2013-12-27 + +* Tue Jul 30 2013 Jaroslav Kysela - 1.0.27.2-3 +- Added an updated alsa-delay script from RHEL 6 + +* Fri Jul 19 2013 Jaroslav Kysela - 1.0.27.2-2 +- Fix alsa-state.service (rkill -> kill) - rhbz#986141 + +* Wed Jul 10 2013 Jaroslav Kysela - 1.0.27.2-1 +- Updated to 1.0.27.2 + +* Tue May 21 2013 Jaroslav Kysela - 1.0.27.1-1 +- Updated to 1.0.27.1 +- Updated alsa-info.sh to 0.4.61 +- Remove dependency on the dialog package (it is optional for alsa-info.sh) + +* Mon Apr 15 2013 Jaroslav Kysela - 1.0.27-2 +- Fix the new udev rules (missing GOTO) - bug#951750 +- Fix the string size in alsactl (underflow) + +* Fri Apr 12 2013 Jaroslav Kysela - 1.0.27-1 +- Updated to 1.0.27, activated the alsactl daemon mode +- Updated alsa-info.sh to 0.4.61 + +* Wed Feb 13 2013 Fedora Release Engineering - 1.0.26-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Sep 6 2012 Jaroslav Kysela - 1.0.26-1 +- Updated to 1.0.26 + +* Wed Jul 18 2012 Fedora Release Engineering - 1.0.25-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Apr 3 2012 Peter Robinson - 1.0.25-8 +- bump Release to be larger than F-16 + +* Tue Jan 31 2012 Jaroslav Kysela 1.0.25-1 +- update to 1.0.25 final + +* Wed Jan 25 2012 Harald Hoyer 1.0.24.1-8 +- install everything in /usr + https://fedoraproject.org/wiki/Features/UsrMove + +* Thu Jan 12 2012 Fedora Release Engineering - 1.0.24.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Jan 6 2012 Lennart Poettering - 1.0.24.1-6 +- Always build with systemd support + +* Fri Jan 6 2012 Lennart Poettering - 1.0.24.1-5 +- When installing the Fedora service files make sure to override the + actual service files with them instead of the symlinks to them +- Drop StandardOutput=syslog since that is the default now and we + don't want to needlessly override the default + +* Mon Oct 31 2011 Bastien Nocera 1.0.24.1-4 +- Add patch to unmute MacBookAir4,1 speakers + +* Mon Feb 07 2011 Fedora Release Engineering - 1.0.24.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Fri Jan 28 2011 Jaroslav Kysela 1.0.24.1-2 +- add missing systemd files, add dependency on systemd-units +- use own udev rule file for /lib/udev/rules.d +- create /var/lib/alsa directory for asound.state + +* Fri Jan 28 2011 Jaroslav Kysela 1.0.24.1-1 +- updated to 1.0.24.1 final (new automake/autoconf) + +* Fri Jan 28 2011 Jaroslav Kysela 1.0.24-1 +- updated to 1.0.24 final +- updated alsa-info.sh script to 0.4.60 + +* Thu Jan 13 2011 Ville Skyttä - 1.0.23-4 +- Fix alsaunmute man page permissions, let rpmbuild compress it. + +* Mon Jun 28 2010 Jaroslav Kysela 1.0.23-3 +- add requires line (bug#526492) for specific alsa-lib package +- add requires line for dialog package (bug#561988) +- added man page for alsaunmute (bug#526174) +- updated alsa-info.sh script to 0.4.59 + +* Mon Jun 28 2010 Jaroslav Kysela 1.0.23-1 +- updated to 1.0.23 final + +* Sun Apr 18 2010 Thomas Spura 1.0.22-2 +- don't own %%{_datadir}/sounds (#569425) + +* Fri Jan 1 2010 Jaroslav Kysela 1.0.22-1 +- updated to 1.0.22 final + +* Thu Sep 3 2009 Jaroslav Kysela 1.0.21-2 +- added missing patch file + +* Thu Sep 3 2009 Jaroslav Kysela 1.0.21-1 +- updated to 1.0.21 final +- updated alsa-info.sh script to 0.4.58 + +* Fri Jul 24 2009 Fedora Release Engineering - 1.0.20-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri May 15 2009 Jaroslav Kysela 1.0.20-3 +- added missing Headphone Volume patch + +* Fri May 15 2009 Jaroslav Kysela 1.0.20-2 +- fixed Headphone Volume issue (bz#500956) + +* Wed May 06 2009 Jaroslav Kysela 1.0.20-1 +- updated to 1.0.20 final +- updated alsa-info.sh script to 0.4.56 + +* Mon Feb 23 2009 Fedora Release Engineering - 1.0.19-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 09 2009 Jaroslav Kysela 1.0.19-3 +- fixed volume initialization for some HDA codecs +- updated alsa-info.sh to 0.4.54 + +* Wed Feb 04 2009 Jaroslav Kysela 1.0.19-2 +- add dir directive for /lib/alsa and /lib/alsa/init directories (bz#483324) + +* Tue Jan 20 2009 Jaroslav Kysela 1.0.19-1 +- updated to 1.0.19 final + +* Tue Nov 04 2008 Jaroslav Kysela 1.0.18-5 +- fixed building + +* Tue Nov 04 2008 Jaroslav Kysela 1.0.18-4 +- updated to 1.0.18 final +- updated alsa-info.sh script + +* Thu Sep 18 2008 Jaroslav Kysela 1.0.18-3.rc3 +- fixed alsa-info.sh link + +* Thu Sep 18 2008 Jaroslav Kysela 1.0.18-2.rc3 +- fixed /lib/alsa/init path for x86_64 (was /lib64/alsa/init) +- added /etc/alsa/asound.state -> /etc/asound.state shift to post section +- fix udev rules (ommited /dev/ prefix for the alsactl utility) +- added --ignore option for alsactl (added also to upstream) + +* Thu Sep 11 2008 Jaroslav Kysela 1.0.18-1.rc3 +- updated to 1.0.18rc3 +- updated alsa-info.sh script to 0.4.51 +- removed alsacard utility +- removed salsa utility +- changed alsaunmute to use 'alsactl init' now +- updated ALSA udevd rules to use alsactl +- moved /etc/alsa/asound.state back to /etc/asound.state + +* Mon Jul 21 2008 Jaroslav Kysela 1.0.17-1 +- updated to 1.0.17 final +- updated alsa-info.sh script to 0.4.48 + +* Mon Apr 28 2008 Martin Stransky 1.0.16-3 +- Added alsa-info.sh script to /usr/bin/alsa-info + +* Tue Feb 19 2008 Fedora Release Engineering - 1.0.16-2 +- Autorebuild for GCC 4.3 + +* Mon Feb 18 2008 Martin Stransky 1.0.16-1 +- updated to 1.0.16 final + +* Tue Jan 15 2008 Mikel Ward +- add salsa man page + +* Mon Oct 29 2007 Martin Stransky 1.0.15-1 +- updated to 1.0.15 final + +* Mon Oct 1 2007 Martin Stransky 1.0.15-0.4.rc1 +- moved saved volume settings back to /etc/alsa + (per discussion at #293301) + +* Mon Sep 24 2007 Martin Stransky 1.0.15-0.3.rc1 +- fixed #303151 - wrong salsa dir in /etc/udev/rules.d/90-alsa.rules + +* Thu Sep 20 2007 Matthias Saou 1.0.15-0.2.rc1 +- Update License field. +- Mark udev rule as config. +- Use find_lang macro again to include translations (why was it removed?). + +* Wed Sep 19 2007 Martin Stransky 1.0.15-0.1.rc1 +- new upstream +- moved saved volume settings to /var/lib (#293301) +- patched alsactl for that (#255421) + +* Thu Aug 16 2007 Martin Stransky 1.0.14-2 +- added an entry to alsaunmute for HP xw4550 (#252171) + +* Wed Jul 25 2007 Martin Stransky 1.0.14-1 +- release bump + +* Thu Jun 7 2007 Martin Stransky 1.0.14-0.8 +- new upstream + +* Wed May 30 2007 Martin Stransky 1.0.14-0.7.rc2 +- updated alsanumute for Siemens Lifebook S7020 (#241639) +- unmute Master Mono for all drivers + +* Wed May 2 2007 Martin Stransky 1.0.14-0.6.rc2 +- added fix for #238442 (unmute Mono channel for w4550, + xw4600, xw6600, and xw8600) + +* Wed Apr 18 2007 Martin Stransky 1.0.14-0.5.rc2 +- added more funcionality to salsa (save/load sound settings), + moved volume settings to /etc/alsa/ + +* Tue Apr 10 2007 Martin Stransky 1.0.14-0.4.rc2 +- added support for large files +- minor fix in alsaunmute +- fixed #209239 - alsaconf: Stale language-dependent files +- fixed #233765 - alsa-utils : unowned directories + +* Fri Jan 19 2007 Martin Stransky 1.0.14-0.3.rc2 +- new upstream + +* Wed Jan 10 2007 Martin Stransky 1.0.14-0.2.rc1 +- added a config line for hda-intel driver + +* Mon Dec 11 2006 Martin Stransky 1.0.14-0.1.rc1 +- new upstream + +* Mon Oct 2 2006 Martin Stransky 1.0.12-3 +- fix for #207384 - Audio test fails during firstboot + +* Fri Aug 25 2006 Martin Stransky 1.0.12-2 +- new upstream + +* Mon Aug 07 2006 Martin Stransky 1.0.12-1.rc2 +- new upstream + +* Thu Jul 20 2006 Martin Stransky 1.0.12-1.rc1 +- new upstream + +* Wed Jul 12 2006 Jesse Keating - sh: line 0: fg: no job control +- rebuild + +* Tue May 30 2006 Martin Stransky 1.0.11-7 +- new upstream + +* Wed May 3 2006 Martin Stransky 1.0.11-6.rc2 +- removed HW specific switch - it should be set by driver + +* Thu Apr 6 2006 Martin Stransky 1.0.11-5.rc2 +- fixed rules file (#186494) +- fixed Audigi mixer switch (#187807) + +* Mon Feb 20 2006 Martin Stransky 1.0.11-3.rc2 +- removed autoreconf + +* Fri Feb 10 2006 Jesse Keating - 1.0.11-2.rc2.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.0.11-2.rc2.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Wed Jan 25 2006 Martin Stransky 1.0.11-2.rc2 +- added volume option to alsaunmute utility (for s-c-s) + +* Thu Jan 12 2006 Martin Stransky 1.0.11-1.rc2 +- new upstream + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Nov 24 2005 Martin Stransky 1.0.10rf-1 +- new upstream version +- added alias for snd-azx + +* Wed Nov 9 2005 Martin Stransky 1.0.10rc1-2 +- fix for #169292 - RHEL4U2 xw4300 IntelHD internal speakers muted by default + +* Tue Sep 27 2005 Martin Stransky 1.0.10rc1-1 +- new upstream version + +* Tue Aug 23 2005 Martin Stransky 1.0.9-5 +- unmute External Amplifier by default (#166153) + +* Wed Jul 13 2005 Bill Nottingham 1.0.9-4 +- migrate the alsa restore program to a udev rule, not a dev.d program +- conflict with appropriate udev +- move alsaunmute, alsacard to /bin + +* Mon Jul 11 2005 Martin Stransky 1.0.9-3 +- New alsaunmute utility +- Add autoconf to BuildRequires (#162483) + +* Thu Jun 16 2005 Martin Stransky 1.0.9-2 +- New upstream version + +* Mon May 30 2005 Martin Stransky 1.0.9-1 +- New upstream version. +- moved alsacard utility from alsa-lib to alsa-tools + +* Mon May 16 2005 Bill Nottingham 1.0.9rc2-2 +- make sure 'Wave' playback channel isn't muted (#157850) + +* Mon Apr 25 2005 Martin Stransky 1.0.9rc2-1 +- New upstream version +- add %%find_lang macro (#155719) + +* Fri Apr 1 2005 Bill Nottingham 1.0.8-4 +- replace the dev.d script with a program that calls alsactl to + restore the volume if there is a saved config, and just unmutes + the playback channels if there isn't one (#132575) + +* Mon Mar 7 2005 Martin Stransky +- rebuilt + +* Wed Feb 16 2005 Martin Stransky 1.0.8-2 +- fix #148011 (add gettext-devel to BuildRequires) +- add $RPM_OPT_FLAGS to CFLAGS + +* Wed Jan 26 2005 Martin Stransky 1.0.8-1 +- update to 1.0.8 +- temporarily removed alsa-lauch.patch + +* Sat Jan 08 2005 Colin Walters 1.0.7-2 +- New patch alsa-utils-1.0.7-alsa-launch.patch, adds the + alsa-launch command. +- New source file xinit-alsa-launch.sh, integrates alsa-launch + into X startup +- BR xorg-x11-devel + +* Thu Jan 06 2005 Colin Walters 1.0.7-1 +- New upstream version + +* Tue Oct 19 2004 Bill Nottingham 1.0.6-3 +- tweak dev.d sound restore script (#133535, revisited) + +* Thu Oct 14 2004 Bill Nottingham 1.0.6-2 +- move alsactl to /sbin +- include a dev.d script for mixer restoring (#133535) + +* Mon Aug 30 2004 Bill Nottingham 1.0.6-1 +- update to 1.0.6 + +* Fri Jul 2 2004 Bill Nottingham 1.0.5-1 +- update to 1.0.5 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Thu Mar 11 2004 Bill Nottingham 1.0.3-1 +- update to 1.0.3 + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Wed Jan 28 2004 Bill Nottingham 1.0.2-1 +- update to 1.0.2 + +* Wed Dec 17 2003 Bill Nottingham 1.0.0-0.rc2 +- import fedora.us RPM, take out save-alsamixer & alsaconf for now + +* Thu Dec 11 2003 Thorsten Leemhuis 1.0.0-0.fdr.0.4.rc2 +- rename alsamixer-saver save-alsamixer + +* Mon Dec 8 2003 Thorsten Leemhuis 1.0.0-0.fdr.0.3.rc2 +- Integrate Michael Schwendt's script alsamixer-saver; Still not quite sure if + this script is the right way -- but mine didn't work... + +* Sat Dec 6 2003 Thorsten Leemhuis 1.0.0-0.fdr.0.2.rc2 +- Update to 1.0.0rc2 +- added alsamixer Script -- stores settings on shutdown, does nothing on startup +- some minor corrections in spec-file style + +* Wed Dec 3 2003 Thorsten Leemhuis 1.0.0-0.fdr.0.1.rc1 +- Update to 1.0.0rc1 + +* Wed Aug 6 2003 Dams 0:utils-0.fdr.1 +- Initial build.