MPD en conflit avec d'autres applications - prendre le contrôle du pouls?

8

Explication simple

Si mpd est en cours de lecture et que le son tente de jouer via une autre application, x , le son de x ne sera pas émis.

Si le son d'une autre application, x , est en cours de lecture et que mpd tente de jouer, aucun son ne sera émis par mpd pendant que le son de x continue à jouer.

Détails

J'ai d'abord remarqué ce problème avec Flash, et cela continue d'être le scénario le plus courant. J'ai posté une question à ce sujet avant de réaliser que ce n'était pas strictement lié à Flash, mais plutôt à quelque chose à voir avec mpd.

Ma plus grande frustration vient d'essayer de faire fonctionner à nouveau mpd, car je n'arrive pas à définir une méthode. pulseaudio -kSemble parfois aider, d'autres fois sudo /etc/init.d/mpd restart, d'autres tuent le chrome (à cause de Flash) avec SIGTERM. La plupart du temps, c'est une combinaison de ce qui précède.

Je pense que cela pourrait être parce que je lance mpd en tant qu'autre utilisateur et que j'utilise pulseaudio. Il n'est pas exécuté en tant qu'utilisateur root ou actuel. De plus, mpd est compilé avec le support d'impulsions.

J'ai essayé de nombreuses choses, mais honnêtement, je ne pouvais pas réciter quoi, car cela fait longtemps. Je préfère ne pas fouiner sans direction, mais je serais vraiment heureux de résoudre ce problème une fois pour toutes.

mpd.conf

Simplifié en supprimant les commentaires / lignes vides.

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"
pid_file            "/var/run/mpd/pid"
state_file          "/var/lib/mpd/state"

user                "mpd"
bind_to_address     "wilson"

input {
        plugin "curl"
}

audio_output {
    type        "pulse"
    name        "My Pulse Output"

}

filesystem_charset      "UTF-8"
id3v1_encoding          "UTF-8"

Question

Pour que cela reste une question: est-ce que quelqu'un sait ce qui est à l'origine de cela ou comment y remédier sans exécuter mpd en tant qu'utilisateur actuel?

Jamie Schembri
la source
1
Lors de la lecture de quelque chose via mpd (et le son qui en résulte) charge la fenêtre des propriétés du son, cliquez sur l'onglet applications et cela vous dira avec certitude si mpd utilise PA ou non.
Oli
L'exécution de mpd en tant qu'utilisateur actuel, conformément aux instructions d'Alibara Iduas, contourne le problème. Je suis toujours intéressé par la raison pour laquelle cela ne fonctionnera pas correctement en tant qu'utilisateur "mpd".
Jamie Schembri

Réponses:

5

J'ai eu ce problème lorsque j'ai commencé à utiliser mpd, mais c'était il y a un certain temps, donc je ne me souviens pas exactement de ce que j'ai fait pour le réparer!

Avez-vous installé les préférences PulseAudio? J'ai trouvé cette astuce sur un forum: sudo apt-get install paprefs

Ensuite, ouvrez les préférences PulseAudio dans le menu: Système-> Préférences-> Préférences PulseAudio Cliquez sur l'onglet Serveur réseau, puis cochez la case "Activer l'accès réseau aux périphériques audio locaux" et enfin cochez la case "Ne nécessite pas d'authentification". Après cela, redémarrez mpd:sudo /etc/init.d/mpd restart

Cependant ... Je viens de réaliser que mpd fonctionne bien pour moi et je n'ai pas activé "l'accès réseau aux périphériques audio locaux".

Je pense que vous pourriez avoir raison d'exécuter mpd en tant qu'utilisateur actuel, ce que je fais. (Je n'ai aucune idée de pourquoi c'est le cas!)

Un guide simple pour configurer mpd à exécuter en tant qu'utilisateur peut être trouvé ici: http://gmpc.wikia.com/wiki/MPD_INSTALL_USER_SERVICE_UBUNTU

Pour résumer, puisque vous avez déjà installé mpd:

1.) Arrêtez-le: sudo update-rc.d mpd disable

2.) Copiez votre mpdconf dans votre répertoire personnel (au format .mpdconf) et modifiez les entrées suivantes aux endroits où votre utilisateur peut accéder et écrire:

music_directory
playlist_directory
db_file
log_file
error_file
pid_file
state_file 

La page à partir de laquelle je prends cela suggère simplement de créer un dossier .mpd dans votre répertoire personnel pour ce genre de choses, à sauvegarder pour votre répertoire musical réel.

3.) Mettez en commentaire la ligne utilisateur en .mpdconf: #user "mpd"

4.) Vous pouvez maintenant exécuter mpd et mettre à jour la base de données.

5.) Pour que mpd démarre automatiquement en tant qu'utilisateur lors de la connexion, accédez à Démarrage des applications et ajoutez une entrée pour mpd, puis créez un fichier de démarrage automatique dans ~ / .config / autostart /.

[Desktop Entry]
Type=Application
Exec=mpd
Hidden=false
NoDisplay=false
Terminal=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Music Player Daemon
Name=Music Player Daemon
Comment[en_US]=plays the music
Comment=plays the music

Il y a probablement des inconvénients à fonctionner en tant qu'utilisateur, alors peut-être que cela ne conviendra pas à vos besoins.

Aibara
la source
Avant de lire ceci, j'ai purgé pulseaudio et mpd. Pulseaudio a fonctionné à peu près après l'installation, mais je n'ai pas pu récupérer le son sur mpd pour une raison quelconque. Quoi qu'il en soit, j'ai fini par suivre le guide et maintenant j'utilise mpd en tant qu'utilisateur actuel et cela fonctionne bien. J'aurais préféré l'exécuter en tant qu'utilisateur "mpd", et puisque c'est plus une solution de contournement qu'une réponse, je ne l'accepterai pas comme une réponse. Je suis toujours intéressé par la raison pour laquelle mpd ne fonctionnera pas en tant qu'utilisateur "mpd" de la manière que j'aimerais (peut-être que pulseaudio devrait fonctionner sous root?). Quoi qu'il en soit, j'espère que vous comprenez et vous avez mes remerciements!
Jamie Schembri
1
Pas de problème, content que ça fonctionne au moins maintenant. La seule autre chose à laquelle je pourrais penser serait de m'assurer, lors de son exécution en tant qu'utilisateur mpd, que "mpd" est répertorié en tant que membre du groupe dans le groupe accès par impulsions (et peut-être aussi impulsions). Mais j'imagine que ce ne serait un problème que si vous n'aviez aucun son, pas ce conflit étrange. Hm, aussi, voir les sections "MPD & Alsa" et "MPD & PulseAudio" dans cette page wiki Archlinux: wiki.archlinux.org/index.php/Music_Player_Daemon
Aibara
Merci encore, Aibara. J'avais précédemment assuré que mpd était dans les bons groupes pour le pouls, ce n'était donc pas le problème dans ce cas. Le lien que vous avez publié est très intéressant, en particulier en ce qu'il décrit mon problème exact dans la section "MPD & Alsa" mentionnée! Serait-ce adaptable à Pulse?
Jamie Schembri
Il est étrange que le même problème ait une solution facile avec Alsa, mais je ne suis vraiment pas sûr si la solution Alsa pourrait être appliquée à Pulse - cela me dépasse vraiment. Tout ce que j'ai lu sur les personnes ayant ce problème avec Pulse finit par exécuter MPD en tant qu'utilisateur, ou les préférences de PulseAudio changent. Désolé!
Aibara
Ce problème m'a aussi causé des problèmes, jusqu'à ce que je l'isole en MPD. Soit dit en passant, la première solution impliquant des paprefs n'a pas fonctionné pour moi, mais la seconde a fonctionné.
Laurence
2

Je ne sais pas si c'est exactement le même problème, mais avec mon ancienne configuration mpd par défaut, je pense que mpd essayait de démarrer sa propre impulsion audio en tant qu'utilisateur différent (l'utilisateur mpd). J'ai trouvé que régler ma sortie d'impulsion dans /etc/mpd.conf pour utiliser une socket pour se connecter est plus simple pour éviter ce genre de problème.

audio_output {
        type            "pulse"
        name            "My Pulse Output"
        server          "localhost"
}

Ensuite , vous pouvez vérifier paprefs que vous acceptez les connexions locales

Bill Robinson
la source
Sur Gentoo, je dois également copier mes utilisateurs .pulse-cookiepour /var/lib/mpdque cela fonctionne, ou le pulseaudio a échoué failed to connect: Access denied, mais je ne suis pas sûr que ce soit la bonne façon.
rebus
0

Lorsqu'il est exécuté en tant que son propre utilisateur conformément aux instructions du wiki, mpd ne pourra pas envoyer de son au serveur pulseaudio d'un autre utilisateur. Plutôt que de configurer pulseaudio en tant que démon à l'échelle du système, une pratique fortement déconseillée en amont, vous pouvez plutôt configurer mpd pour utiliser le module tcp de pulseaudio pour envoyer du son à localhost:

Tout d'abord, décommentez le module tcp dans /etc/pulse/default.pa ou $ XDG_CONFIG_HOME / pulse / default.pa (généralement ~ / .config / pulse / default.pa) et définissez 127.0.0.1 comme adresse IP autorisée; le répertoire personnel a priorité:

### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
#load-module module-zeroconf-publish

Des plages IP supplémentaires en notation cidr peuvent être ajoutées à l'aide de; comme séparateur. Une fois cette opération terminée, redémarrez pulseaudio:

$ pulseaudio --kill
$ pulseaudio --start -or- start-pulseaudio-x11/kde

Ensuite, éditez /etc/mpd.conf et ajoutez une nouvelle sortie d'impulsion pointant vers 127.0.0.1 en tant que serveur "distant":

audio_output {
       type     "pulse"
       name     "Local Music Player Daemon"
       server       "127.0.0.1"
}

depuis https://wiki.archlinux.org/index.php/Music_Player_Daemon/Tips_and_tricks

Pavel1114
la source