Freezes probablement liés au périphérique de son occupé

Salut,

J’ai un problème assez pénible et difficile à diagnostiquer.

Cas général:
Je lis des videos, j’écoute mes mp3, je lance un jeu, … parfois tout va bien, mais régulièrement, l’une des applications ne s’ouvre qu’a moitié car elle ne parvient pas à initialiser le son, et plutôt que d’abandonner tout de suite en me laissant un message d’erreur, elle ne répond plus à mes clicks, n’abandonne pas le lancement, et ne peut être fermée sans un kill. De plus, je ne sais pas bien si c’est lié mais en listant mes processus après ces plantages j’ai remarqué qu’une paire d’entre eux finissaient en zombie ().

Mon environnement:
J’utilise XFCE comme environnement (j’ai changé il y a peu).
Je suis sous Debian Testing.
Je me suis laissé séduire par mpd (music player daemon) avec Sonata pour GUI, et il est assez probable qu’il soit à l’origine de mes soucis.
Noyau compilé moi même.

[quote]00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC’97 Audio Controller (rev 01)
Je n’ai ni esd, ni artsd. Juste Alsa en version récente qui est censée avoir dmix configuré et activé.
[/quote]

Cas concret:
Je laisse souvent mpd en pause, et puis je veux lire une video et mplayer me lance un message d’erreur (désolé je l’ai pas copié mais je pense qu’il importe peu), puis je tente avec VLC, et il me lit la video mais sans le son et la GUI ne répond pas. Je retourne voir Sonata, et je vois qu’il ne veut pas reprendre en cours la lecture qui était en pause et il me semble qu’il me déconnecte de mpd.
Ce qui est étrange, c’est que j’ai beau tuer mpd et toutes les applications sonores que je trouve, le problème ne se résoud pas pour autant, et le plus efficace reste un redémarrage (argh). D’ailleurs, pendant la phase de redémarrage, il libère la ressource sonore et mpd se remet à jouer le temps qu’init le kill aussi ! Et au prochain redémarrage de la machine, mpd se lance avant X et j’ai le son pdt le démarrage … ce qui m’ennuie car j’ai aucun contrôle dessus.
Aussi, je crois que mon mpd se lance 3 fois … normal d’avoir 3 processus ?.
Désolé d’être un peu approximatif parfois, je pense avoir dit l’essentiel et s’il y a besoin d’être un peu plus rigoureux dans ma manière de résoudre le problème je pourrai décrire ça un peu mieux :wink:

Donc mes questions, en gros, sont :

  • mpd, c’est ça qui fout la merde, hein ? xmms2 ça va mieux ? (note: ma config de mpd n’a rien de spécial)
  • utilisez vous esd ou autre chose ? avez-vous également ces problèmes de son ou suis-je un cas isolé ? y-a-t-il une solution élégante ?

Je voulais pas abandonner mpd car après qq temps d’essai ça me plaisait, mais au fur et à mesure que j’écris le post je me rend compte que ça a l’air d’être lui qui m’embête :slightly_smiling:

Voilà, ayè :slightly_smiling:

Mpd fonctionne très bien chez moi.

poiuy@debian:~$ apt-cache policy mpd mpd: Installé : 0.13.0-5 Candidat : 0.13.0-5 Table de version : *** 0.13.0-5 0 500 http://ftp.fr.debian.org sid/main Packages 100 /var/lib/dpkg/status
(Je suis sous SID).
Poste le contenu de /etc/init.d/mpd, /etc/mpd.conf et ~/.mpdconf pour voir s’il y a un quelconque problème de configuration.
Et aussi:

ls /etc/ | grep -i mpd ls ~ | grep -i mpd

@debian:~$ apt-cache policy mpd mpd: Installé : 0.13.0-2 Candidat : 0.13.0-2 Table de version : *** 0.13.0-2 0 500 http://ftp2.fr.debian.org testing/main Packages 100 /var/lib/dpkg/status

[code]@debian:~$ cat /etc/init.d/mpd
#!/bin/sh -e

if [ -n “$MPD_DEBUG” ]; then
set -x
MPD_OPTS=–verbose
fi

umask 0022

PATH=/sbin:/bin:/usr/sbin:/usr/bin
NAME=mpd
DESC="Music Player Daemon"
DAEMON=/usr/bin/mpd
MPDCONF=/etc/mpd.conf
START_MPD=true

Exit if the package is not installed

[ -x “$DAEMON” ] || exit 0

Read configuration variable file if it is present

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

PIDFILE=$(sed -n ‘s/^[[:space:]]pid_file[[:space:]]"?([^"])"?/\1/p’ $MPDCONF)
DBFILE=$(sed -n 's/^[[:space:]]db_file[[:space:]]"?([^"]
)"?/\1/p’ $MPDCONF)

mpd_start () {
if [ “$START_MPD” != “true” ]; then
echo "Not starting MPD: disabled by /etc/default/mpd."
exit 0
fi
echo -n "Starting $DESC: "

if ! (grep -q db_file $MPDCONF && grep -q pid_file $MPDCONF); then
    echo "$MPDCONF must have db_file and pid_file set; not starting."
    exit 0
fi

PIDDIR=$(dirname "$PIDFILE")
if [ ! -d "$PIDDIR" ]; then
    mkdir -m 0755 $PIDDIR
    chown mpd:audio $PIDDIR
fi

if [ "$FORCE_CREATE_DB" -o ! -f "$DBFILE" ]; then
    echo -n "creating $DBFILE... "
    $DAEMON --create-db "$MPDCONF" > /dev/null 2>&1
fi

if start-stop-daemon --start --quiet --pidfile $PIDFILE \
        --exec $DAEMON $MPD_OPTS "$MPDCONF"; then
    echo "$NAME."
else
    echo "failed."
fi

}

mpd_stop () {
echo -n "Stopping $DESC: "
if start-stop-daemon --stop --quiet --retry 5 --pidfile $PIDFILE
–exec $DAEMON; then
echo "$NAME."
else
echo "not running or no pid_file set."
fi
}

note to self: don’t call the non-standard args for this in

{post,pre}{inst,rm} scripts since users are not forced to upgrade

/etc/init.d/mpd when mpd is updated

case “$1” in
start)
mpd_start
;;
stop)
mpd_stop
;;
restart|reload)
mpd_stop
mpd_start
;;
force-start|start-create-db)
FORCE_CREATE_DB=1
mpd_start
;;
force-restart|force-reload)
FORCE_CREATE_DB=1
mpd_stop
mpd_start
;;
*)
echo "Usage: $0 {start|start-create-db|stop|restart|reload}"
exit 1
;;
esac
[/code]

@debian:~$ ls /etc | grep -i mpd mpd.conf

[code]debian:~$ cat /etc/mpd.conf

An example configuration file for MPD

See the mpd.conf man page for a more detailed description of each parameter.

######################## REQUIRED PATHS ########################

You can put symlinks in here, if you like. Make sure that

the user that mpd runs as (see the ‘user’ config parameter)

can read the files in this directory.

music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/tag_cache"
log_file "/var/log/mpd/mpd.log"
error_file "/var/log/mpd/errors.log"
pid_file “/var/run/mpd/pid”
################################################################

######################## OPTIONAL PATHS ########################

If specified, MPD will save its current state (playlist,

current song, playing/paused, etc.) at exit. This will be

used to restore the session the next time it is run.

state_file “/var/lib/mpd/state”

################################################################

######################## DAEMON OPTIONS ########################

If started as root, MPD will drop root privileges and run as

this user instead. Otherwise, MPD will run as the user it was

started by. If left unspecified, MPD will not drop root

privileges at all (not recommended).

user “mpd”

The address and port to listen on.

bind_to_address “localhost”
#port “6600”

Controls the amount of information that is logged. Can be

“default”, “secure”, or “verbose”.

#log_level “default”

################################################################

########################## PERMISSIONS #########################

MPD can require that users specify a password before using it.

You may specify one ore more here, along with what users who

log in with that password are allowed to do.

#password “password@read,add,control,admin”

Specifies what permissions a user who has not logged in with a

password has. By default, all users have full access to MPD

if no password is specified above, or no access if one or

more passwords are specified.

#default_permissions “read,add,control,admin”

################################################################

########################## AUDIO OUTPUT ########################

MPD supports many audio output types, as well as playing

through multiple audio outputs at the same time. You can

specify one or more here. If you don’t specify any, MPD will

automatically scan for a usable audio output.

See http://mpd.wikia.com/wiki/Configuration#Audio_Outputs

for examples of other audio outputs.

An example of an ALSA output:

#audio_output {

type “alsa”

name “My ALSA Device”

device “hw:0,0” # optional

format “44100:16:2” # optional

#}

An example of an OSS output:

#audio_output {

type “oss”

name “My OSS Device”

device “/dev/dsp” # optional

format “44100:16:2” # optional

#}

An example of a shout output (for streaming to Icecast):

#audio_output {

type “shout”

name “My Shout Stream”

host “localhost”

port “8000”

mount “/mpd.ogg”

password “hackme”

quality “5.0”

bitrate “128”

format “44100:16:1”

user “source” # optional

description “My Stream Description” # optional

genre “jazz” # optional

public “no” # optional

#}

Force all decoded audio to be converted to this format before

being passed to the audio outputs.

#audio_output_format “44100:16:2”

################################################################

############################# MIXER ############################

MPD needs to know what mixer settings to change when you

adjust the volume. If you don’t specify one here, MPD will

pick one based on which ones it was compiled with support for.

An example for controlling an ALSA mixer:

mixer_type "alsa"
mixer_device "default"
mixer_control “Master”

An example for controlling an OSS mixer:

#mixer_type “oss”
#mixer_device “/dev/mixer”
#mixer_control “PCM”

If you want MPD to adjust the volume of audio sent to the

audio outputs, you can tell it to use the software mixer:

#mixer_type “software”

################################################################

######################### NORMALIZATION ########################

Specifies the type of ReplayGain to use. Can be “album” or

“track”. ReplayGain will not be used if not specified. See

http://www.replaygain.org for more details.

#replaygain “album”

Sets the pre-amp used for files that have ReplayGain tags.

#replaygain_preamp “0”

Enable on the fly volume normalization. This will cause the

volume of all songs played to be adjusted so that they sound

as though they are of equal loudness.

#volume_normalization “no”

################################################################

########################### BUFFERING ##########################

The size of the buffer containing decoded audio. You probably

shouldn’t change this.

#audio_buffer_size “2048”

How much of the buffer to fill before beginning to play.

#buffer_before_play “0%”

Similar options for the HTTP stream buffer. If you hear

skipping while playing HTTP streams, you may wish to increase

these.

#http_buffer_size “128”
#http_prebuffer_size “25%”

################################################################

########################### HTTP PROXY #########################

Specifies the HTTP proxy to use for playing HTTP streams.

#http_proxy_hostproxy.isp.com
#http_proxy_port “8080”
#http_proxy_user “user”
#http_proxy_password “password”

################################################################

############################# LIMITS ###########################

These are various limits to prevent MPD from using too many

resources. You should only change them if they start

restricting your usage of MPD.

#connection_timeout “60”
#max_connections “5”
#max_playlist_length “16384”
#max_command_list_size “2048”
#max_output_buffer_size “8192”

################################################################

###################### CHARACTER ENCODINGS #####################

If file or directory names do not display correctly, then you

may need to change this. In most cases it should be either

“ISO-8859-1” or “UTF-8”. You must recreate your database

after changing this (use mpd --create-db).

filesystem_charset “UTF-8”

The encoding that ID3v1 tags should be converted from.

id3v1_encoding “UTF-8”

################################################################

######################### OTHER OPTIONS ########################

The metadata types MPD will recognize.

#metadata_to_use “artist,album,title,track,name,genre,date,composer,performer,disc”

Enable this if you wish to use your MPD created playlists in

other music players.

#save_absolute_paths_in_playlists “no”

################################################################
[/code]
C’est la config par défaut, j’ai juste changé le mixer sur Master au lieu de PCM. Et créé des liens symboliques dans le repertoire où mpd va chercher la musique.

Là, j’ai arrêté d’utiliser l’applet MPD pour XFCE, et je n’ai pas constaté de problème de son depuis (le temps nous le dira).
J’avoue avoir omis de dire qu’il m’arrivait d’utiliser 2 clients MPD simultanément :wink: [ce qu’il devrait pouvoir faire, mais si l’applet XFCE est buggeuse …]

Peux-tu confirmer que tu as toi aussi 3 processus mpd qui se lancent ?

@debian:~$ ps ax | grep mpd 2356 ? S 0:00 /usr/bin/mpd /etc/mpd.conf 2941 ? SL 0:06 /usr/bin/mpd /etc/mpd.conf 2942 ? S 0:07 /usr/bin/mpd /etc/mpd.conf 3077 pts/0 R+ 0:00 grep mpd

Tes fichiers de conf sont corrects en tout cas, donc cela ne vient pas de là à priori… Essaie peut-être avec un autre client, mais à mon avis, ça ne vient pas de là. Que donne:

[quote=“Zbf”]Peux-tu confirmer que tu as toi aussi 3 processus mpd qui se lancent ?

@debian:~$ ps ax | grep mpd 2356 ? S 0:00 /usr/bin/mpd /etc/mpd.conf 2941 ? SL 0:06 /usr/bin/mpd /etc/mpd.conf 2942 ? S 0:07 /usr/bin/mpd /etc/mpd.conf 3077 pts/0 R+ 0:00 grep mpd [/quote]

poiuy@debian:~$ ps ax | grep -i mpd 3919 ? S 0:00 /usr/bin/mpd /etc/mpd.conf 3924 ? S 0:02 /usr/bin/mpd /etc/mpd.conf 3925 ? S 0:06 /usr/bin/mpd /etc/mpd.conf 4144 pts/2 S+ 0:00 grep -i mpd

Bon, là, j’ai justement mon son qui est crashé.
J’ai fermé les processus de mpd …
Quand je lance xmms, il NE me met PAS “le périph son est occupé”, mais il gèle.
Quand je relance mpd (/etc/init.d/mpd restart), il bloque également et je dois faire un CTRL+C

[code]ls -lRh /var/lib/mpd /var/log/mpd/ /var/run/mpd/
/var/lib/mpd:
total 760K
drwxr-xr-x 2 root root 4,0K 2007-12-25 16:02 music
drwxr-xr-x 2 mpd audio 4,0K 2007-01-31 12:37 playlists
-rw-r–r-- 1 mpd audio 958 2008-01-02 15:35 state
-rw-r–r-- 1 mpd audio 742K 2008-01-02 16:10 tag_cache

/var/lib/mpd/music:
total 0
lrwxrwxrwx 1 root root 10 2007-12-25 16:02 e -> /mnt/e/mp3

/var/lib/mpd/playlists:
total 0

/var/log/mpd/:
total 284K
-rw------- 1 mpd audio 2,9K 2008-01-01 21:57 errors.log
-rw------- 1 mpd audio 274K 2007-12-31 10:14 mpd.log

/var/run/mpd/:
total 4,0K
-rw-r–r-- 1 mpd audio 5 2008-01-02 15:35 pid
[/code]

[quote]# /etc/init.d/mpd restart
Stopping Music Player Daemon: not running or no pid_file set.
Starting Music Player Daemon:
[/quote]

# lsof | grep snd xfce-mcs- 2499 fab 5u CHR 116,0 4354 /dev/snd/controlC0 xfce4-mix 2511 fab 8u CHR 116,0 4354 /dev/snd/controlC0

# lsof | grep audio liferea-b 2504 fab mem REG 3,8 138180 556499 /usr/lib/libaudiofile.so.0.0.2 gajim.py 2520 fab mem REG 3,8 138180 556499 /usr/lib/libaudiofile.so.0.0.2 pidgin 2532 fab mem REG 3,8 138180 556499 /usr/lib/libaudiofile.so.0.0.2 update-no 2533 fab mem REG 3,8 138180 556499 /usr/lib/libaudiofile.so.0.0.2 icedove-b 2593 fab mem REG 3,8 138180 556499 /usr/lib/libaudiofile.so.0.0.2 firefox-b 3109 fab mem REG 3,8 138180 556499 /usr/lib/libaudiofile.so.0.0.2

J’ai fermé ces applications, et le périphérique s’est libéré, j’ai pu relancer mpd. Hélas je les ai fermées toutes d’un coup sans vérifier à chaque fois, j’ignore donc pour le moment quelle application serait responsable de ce gel. Je soupçonne un peu firefox (iceweasel).

Je reposterai si j’identifie le problème.

Bon, d’après les quelques cas que j’ai eu :

…ne ferme pas correctement mpd.
Je suis obligé de tuer le processus à la main.
Aussitôt tué, je peux relancer mpd, et sonata parvient alors à s’y connecter.
Le problème, c’est qu’il arrive que le son rebug quelques secondes après…
J’essayerai peut être de voir ça de plus près, ou de passer à xmms2 voir si j’ai le même problème …

j’avais le même type de problème avec mon ancienne config. regarde du coter des module de son qui son charger si en le dé-chargent / chargent a nouveau sa peux donner une piste. tu peux utiliser modconf qui est pratique pour cela.

Me suis déjà amusé à stopper et relancer ALSA, mais ça n’aide pas.
Je listais aussi les modules de son mais ne voyait rien d’anormal.

Par contre, je viens de repérer ça : mail-archive.com/debian-bugs … 25287.html
et c’est ce qui se passe parfois chez moi, même si pas tout le temps.
Je pense que je vais passer à xmms2 plutôt que d’esperer une nouvelle version debuggée de mpd, mais c’est dommage.