Restaurer alsa lors d'un plantage d'application (xbmc)

Avatar de l’utilisateur
neowdj1
Messages : 262
Inscription : 25 octobre 2009, 23:30
Localisation : Lille

Restaurer alsa lors d'un plantage d'application (xbmc)

Message par neowdj1 » 27 février 2013, 10:39

Bonjour,

je souhaiterai savoir comment restaurer une carte son avec alsa sans redémarrer l'ordinateur

car j'ai un pc qui me sert poste multimédia avec XBMC et celui si plante souvent et me fait planter ma carte son j'ai du enlevé pulsaudio à cause du spdif (5.1) qui n'était pas pris en compte.

j'ai trouvé ce script sur internet mais il a pas l'air de fonctionner sous centOS

Code : Tout sélectionner

#!/bin/bash
#
# alsasound     This shell script takes care of starting and stopping
#               the ALSA sound driver.
#
# This script requires /usr/sbin/alsactl and /usr/bin/aconnect
# programs from the alsa-utils package.
#
# Copyright (c) by Jaroslav Kysela <perex@suse.cz>
#
#
#  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 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
#
# For RedHat 5.0+:
# chkconfig: 2345 87 14
# description: ALSA driver
#
# modified to visually fit into SuSE 6.0+ by Philipp Thomas <pthomas@suse.de>
# modified to start only drivers that are not already loaded and to visually
# fit into RedHat 7.2+  by Fernando Lopez-Lezcano <nando@ccrma.stanford.edu>
# further improvements by Bernd Kaindl, Olaf Hering and Takashi Iwai.
#
### BEGIN INIT INFO
# Provides:       alsasound
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Loading ALSA drivers and store/restore the current setting
### END INIT INFO

if [ -e /etc/rc.d/init.d/functions ] ; then
  # redhat function library
  redhat=1
  . /etc/rc.d/init.d/functions
fi

if [ -r /etc/rc.config ]; then
  . /etc/rc.config
  rc_warning="\033[33m\033[1m"
else
  rc_done="done"
  rc_warning=""
  rc_reset=""
fi

if [ x$START_ALSA != xno ]; then
  START_ALSA=yes
fi
if [ x$START_ALSA_SEQ != xno ]; then
  START_ALSA_SEQ=yes
fi

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

# Force execution if not called by a runlevel directory.
test $link = $base && START_ALSA=yes
test "$START_ALSA" = yes || exit 0

alsactl=/usr/sbin/alsactl
asoundcfg=/etc/asound.state
aconnect=/usr/bin/aconnect
alsascrdir=/etc/alsa.d
if [ -x /sbin/lsmod ]; then
  lsmod=/sbin/lsmod
else
  lsmod=lsmod
fi

# modprobe returns 255 when failed..
function probe_module () {
   /sbin/modprobe $*
   test $? = 0 && return 0
   return 1
}

function start() {
  #
  # insert sound modules that are not already loaded
  #
  module_loaded=0
  drivers=`/sbin/modprobe -c | \
    grep -E "^[[:space:]]*alias[[:space:]]+snd-card-[[:digit:]]" | \
    awk '{print $3}'`
  loaded=""
  for i in $drivers; do
    if [ "$i" != off ]; then
        is_loaded=`grep -c ^$i /proc/modules`
        if [ "$is_loaded" == "0" ]; then
            if [ $redhat ] ; then
                action "Starting sound driver $i" /sbin/modprobe $i
                if [ "$?" == "0" ]; then loaded="$loaded $i" ; module_loaded=1 ; fi
            else
                echo -n "Starting sound driver: $i "
                probe_module $i
                if [ "$?" == "0" ]; then loaded="$loaded $i" ; module_loaded=1 ; fi
                echo -e "$rc_done"
            fi
        else
            if [ $redhat ] ; then
                echo "Sound driver $i is already loaded"
            fi
        fi
    fi
  done
  test $module_loaded -eq 0 && return
  #
  # insert sequencer modules that are not already loaded
  #
  if [ $redhat ] ; then
      action "Starting sequencer" /sbin/modprobe snd-seq
  else
      echo -n "Starting sequencer"
      /sbin/modprobe snd-seq
      echo -e "$rc_done"
  fi
  if [ x"$START_ALSA_SEQ" = xyes -a -r /proc/asound/seq/drivers ]; then
    seq_drivers=`cut -d , -f 1 /proc/asound/seq/drivers`
    for i in $seq_drivers; do
        is_loaded=`grep -c ^$i /proc/modules`
        if [ "$is_loaded" == "0" ]; then
            if [ $redhat ] ; then
                action "Starting sequencer driver $i" /sbin/modprobe $i
            else
                /sbin/modprobe $i
            fi
        else
            if [ $redhat ] ; then
                echo "Sequencer driver $i is already loaded"
            fi
        fi
    done
  fi
  #
  # restore driver settings
  #
  if [ -d /proc/asound ]; then
    if [ ! -r $asoundcfg ]; then
      echo "No mixer config in $asoundcfg, you have to unmute your card!"
    else
      if [ -x $alsactl ]; then
        if [ $redhat ] ; then
            action "Restoring sound driver settings" $alsactl -f $asoundcfg restore
        else
            $alsactl -f $asoundcfg restore
        fi
      else
        if [ $redhat ] ; then
            echo -n "Sound driver: could not find alsactl"
            failure "Finding alsactl" && echo
        else
            echo -e "${rc_warning}ERROR: alsactl not found${rc_reset}"
        fi
      fi
    fi
  fi
  #
  # run card-dependent scripts only for drivers we loaded
  #
  for i in $loaded; do
    t=${i##snd-}
    if [ -x $alsascrdir/$t ]; then
        if [ $redhat ] ; then
            action "Running $t script" $alsascrdir/$t
        else
            $alsascrdir/$t
        fi
    fi
  done
  #
  # touch lockfile if lockdir exists
  #
  if [ -d /var/lock/subsys ] ; then
    touch /var/lock/subsys/alsasound
  fi
}

function terminate() {
  #
  # Kill processes holding open sound devices
  #
  # DEVS=`find /dev/ -follow -type c -maxdepth 1 -print 2>/dev/null | xargs ls -dils | grep "1*1[46]," | cut -d: -f2 | cut -d" " -f2; echo /proc/asound/dev/*`
  fuser -k /dev/admmidi? /dev/adsp? /dev/amidi? /dev/audio* /dev/dmfm* \
     /dev/dmmidi? /dev/dsp* /dev/dspW* /dev/midi0? /dev/mixer? /dev/music \
     /dev/patmgr? /dev/sequencer* /dev/sndstat >/dev/null 2>&1
  if [ -d /proc/asound/dev ]; then
    fuser -k /proc/asound/dev/* >/dev/null 2>&1
  fi
  if [ -d /dev/snd ]; then
    fuser -k /dev/snd/* >/dev/null 2>&1
  fi
  #
  # remove all sequencer connections if any
  #
  if [ -f /proc/asound/seq/clients -a -x $aconnect ]; then
    $aconnect --removeall
  fi
}

function stop() {
  #
  # store driver settings
  # [nando: we always initialize the driver to the default settings]
  #
  # if [ -x $alsactl ]; then
  #   $alsactl -f $asoundcfg store
  # else
  #   echo -n -e "${rc_warning}!!!alsactl not found!!!${rc_reset} "
  # fi
  #
  # mute master to avoid clicks at unload
  #
  /usr/bin/amixer set Master mute >/dev/null 2>&1
  #
  # remove all sound modules
  #
  $lsmod | grep -E "^snd" | grep -Ev "(snd-page-alloc|snd_page_alloc)" | while read line; do \
     /sbin/rmmod `echo $line | cut -d ' ' -f 1`; \
  done
  # remove the 2.2 soundcore module (if possible)
  /sbin/rmmod soundcore 2> /dev/null
  /sbin/rmmod gameport 2> /dev/null

  #
  # remove lockfile if lockdir exists
  #
  if [ -d /var/lock/subsys ] ; then
    rm -f /var/lock/subsys/alsasound
  fi
}

# See how we were called.
case "$1" in
  start)
        # Start driver
        if [ -d /proc/asound ]; then
            echo "ALSA driver already running"
        fi
        start
        if [ $redhat ] ; then
            if [ -d /proc/asound -a -d /var/lock/subsys ]; then
                touch /var/lock/subsys/alsasound
            fi
        fi
        ;;
  stop)
        # Stop daemons.
        if [ -d /proc/asound ]; then
          echo -n "Shutting down sound driver"
          terminate
          stop
          if [ $redhat ] ; then
            if [ -d /var/lock/subsys ]; then
                rm -f /var/lock/subsys/alsasound
            fi
            success "sound driver stop" && echo
          else
            echo -e "$rc_done"
          fi
        fi
        ;;
  restart|reload)
        $0 stop
        $0 start
        ;;
  status)
        if [ -d /proc/asound ]; then
          echo -n "ALSA sound driver loaded."
        else
          echo -n "ALSA sound driver not loaded."
        fi
        echo
        ;;
  *)
        echo "Usage: alsasound {start|stop|restart|status}"
        exit 1
esac

exit 0
voici mes cartes

Code : Tout sélectionner

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC888 Analog [ALC888 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: ALC888 Digital [ALC888 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Si vous avez une idée, je suis preneur


merci d'avance

MarbolanGos
Messages : 341
Inscription : 26 octobre 2009, 19:03

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par MarbolanGos » 27 février 2013, 11:49

J'ai regardé rapide mais on dirait que le script fait :
* il détecte les modules chargés et les démonte : rmmod
* Puis il les remonte (modprobe)
* Il "touch" le processus du son

Je ne sais pas si alsa a un service mais si nécessaire je l'aurai relancé.
On devrait pouvoir trouver les modules de la carte son avec lsmod | grep snd
http://rarebril.com/blog
http://www.smolts.org/client/show/pub_d44745d4-fc38-4d31-a94c-499e6e1838ea

Avatar de l’utilisateur
neowdj1
Messages : 262
Inscription : 25 octobre 2009, 23:30
Localisation : Lille

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par neowdj1 » 27 février 2013, 19:35

il n'y a pas de service alsa

à part faire un
# alsactl resore 0
mais il me met invalid soundcard

j'ai tenté un modprobe des modules sons mais sans succès


et quand je veux lancer alsamixer j'ai

cannot open mixer: No such file or directory

MarbolanGos
Messages : 341
Inscription : 26 octobre 2009, 19:03

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par MarbolanGos » 28 février 2013, 13:05

[Mode Bourrin] Suffit de débrancher physiquement la carte[/Mode Bourrin]

Quand la carte plante dans le dmesg il n'y a pas un message ?
Il faudrait faire un diff entre les modules avant et après plantage aussi.
Le alsactl init 0 ne fonctionne pas ? Si ça se trouve la carte se voit désactiver carrément ?
http://rarebril.com/blog
http://www.smolts.org/client/show/pub_d44745d4-fc38-4d31-a94c-499e6e1838ea

Avatar de l’utilisateur
neowdj1
Messages : 262
Inscription : 25 octobre 2009, 23:30
Localisation : Lille

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par neowdj1 » 28 février 2013, 14:10

je testerai quand xbmc plante

Avatar de l’utilisateur
neowdj1
Messages : 262
Inscription : 25 octobre 2009, 23:30
Localisation : Lille

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par neowdj1 » 07 mars 2013, 09:31

lors du plantage il y a rien dans dmesg

et j'ai oublié de faire un alsactl init 0 :cry:

MarbolanGos
Messages : 341
Inscription : 26 octobre 2009, 19:03

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par MarbolanGos » 07 mars 2013, 12:57

Il doit bien y avoir un log qui indique que alsa plante... Faudrait voir où il est :ugeek:
http://rarebril.com/blog
http://www.smolts.org/client/show/pub_d44745d4-fc38-4d31-a94c-499e6e1838ea

Avatar de l’utilisateur
neowdj1
Messages : 262
Inscription : 25 octobre 2009, 23:30
Localisation : Lille

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par neowdj1 » 13 mars 2013, 20:23

Impossible de trouver où ils sont

Avatar de l’utilisateur
neowdj1
Messages : 262
Inscription : 25 octobre 2009, 23:30
Localisation : Lille

Re: Restaurer alsa lors d'un plantage d'application (xbmc)

Message par neowdj1 » 11 mai 2013, 10:34

MarbolanGos a écrit :[Mode Bourrin] Suffit de débrancher physiquement la carte[/Mode Bourrin]
Je viens de repensé à ton mode bourrin

j'ai une vieille carte SB 24bit USB (avec spdif) que j'ai branché sur mon pc et le mode bourrin fonctionne

Code : Tout sélectionner

Bus 001 Device 004: ID 041e:3040 Creative Technology, Ltd SoundBlaster Live! 24-bit External SB0490

Merci MarbolanGos

Répondre