You are not logged in.

#1 2014-02-18 08:58:10

forkenbrock
Member
Registered: 2011-12-06
Posts: 43

[Solved] Getting MPD working with JACK

Actually I have JACK2 installed.  The JACK Wiki seems to indicate that both versions of JACK are interchangeable, however, I can't find confirmation anywhere about whether JACK2 will work with MPD.

For now I'm just trying to get MPD working with ALSA, before I focus on JACK.  I've installed the packages, created the Log and Database files and configured MPD.conf. 

Then I followed the instructions at the link below to create an mpd.desktop file with the given code to autostart with LXDE.  This setup doesn't seem to be working.  I try to enable MPD with sysctl and I get an access denied message.  I can enable with Sudo, but that seems to enable the global service, but I'm trying to just enable it locally with my username.

https://wiki.archlinux.org/index.php/Mu … start_in_X


Here's my MPD.conf code:

# Read the user manual for documentation: http://www.musicpd.org/doc/user/


# Files and directories #######################################################
#
# This setting controls the top directory which MPD will search to discover the
# available audio files and add them to the daemon's online database. This
# setting defaults to the XDG directory, otherwise the music directory will be
# be disabled and audio files will only be accepted over ipc socket (using
# file:// protocol) or streaming files over an accepted protocol.
#
music_directory         "~/Jaguar_Music_Library"
#
# This setting sets the MPD internal playlist directory. The purpose of this
# directory is storage for playlists created by MPD. The server will use
# playlist files not created by the server but only if they are in the MPD
# format. This setting defaults to playlist saving being disabled.
#
#playlist_directory             "~/.mpd/playlists"
#
# This setting sets the location of the MPD database. This file is used to
# load the database at server start up and store the database while the
# server is not up. This setting defaults to disabled which will allow
# MPD to accept files over ipc socket (using file:// protocol) or streaming
# files over an accepted protocol.
#
db_file                 "~/.config/mpd/mpd.db"
#
# These settings are the locations for the daemon log files for the daemon.
# These logs are great for troubleshooting, depending on your log_level
# settings.
#
# The special value "syslog" makes MPD use the local syslog daemon. This
# setting defaults to logging to syslog, otherwise logging is disabled.
#
log_file                        "~/.config/mpd/mpd.log"
#
# This setting sets the location of the file which stores the process ID
# for use of mpd --kill and some init scripts. This setting is disabled by
# default and the pid file will not be stored.
#
#pid_file                       "~/.mpd/pid"
#
# This setting sets the location of the file which contains information about
# most variables to get MPD back into the same general shape it was in before
# it was brought down. This setting is disabled by default and the server
# state will be reset on server start up.
#
#state_file                     "~/.mpd/state"
#
# The location of the sticker database.  This is a database which
# manages dynamic information attached to songs.
#
#sticker_file                   "~/.mpd/sticker.sql"
#
###############################################################################


# General music daemon options ################################################
#
# This setting specifies the user that MPD will run as. MPD should never run as
# root and you may use this setting to make MPD change its user ID after
# initialization. This setting is disabled by default and MPD is run as the
# current user.
#
user                            "jaguar"
#
# This setting specifies the group that MPD will run as. If not specified
# primary group of user specified with "user" setting will be used (if set).
# This is useful if MPD needs to be a member of group such as "audio" to
# have permission to use sound card.
#
#group                          "nogroup"
#
# This setting sets the address for the daemon to listen on. Careful attention
# should be paid if this is assigned to anything other then the default, any.
# This setting can deny access to control of the daemon.
#
# For network
bind_to_address         "any"
#
# And for Unix Socket
#bind_to_address                "~/.mpd/socket"
#
# This setting is the TCP port that is desired for the daemon to get assigned
# to.
#
#
port                            "6600"
#
# This setting controls the type of information which is logged. Available
# setting arguments are "default", "secure" or "verbose". The "verbose" setting
# argument is recommended for troubleshooting, though can quickly stretch
# available resources on limited hardware storage.
#
#log_level                      "default"
#
# If you have a problem with your MP3s ending abruptly it is recommended that
# you set this argument to "no" to attempt to fix the problem. If this solves
# the problem, it is highly recommended to fix the MP3 files with vbrfix
# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
# point gapless MP3 playback can be enabled.
#
#gapless_mp3_playback                   "yes"
#
# Setting "restore_paused" to "yes" puts MPD into pause mode instead
# of starting playback after startup.
#
#restore_paused "no"
#
# This setting enables MPD to create playlists in a format usable by other
# music players.
#
#save_absolute_paths_in_playlists       "no"
#
# This setting defines a list of tag types that will be extracted during the
# audio file discovery process. The complete list of possible values can be
# found in the mpd.conf man page.
metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
#
# This setting enables automatic update of MPD's database when files in
# music_directory are changed.
#
auto_update     "yes"
#
# Limit the depth of the directories being watched, 0 means only watch
# the music directory itself.  There is no limit by default.
#
#auto_update_depth "3"
#
###############################################################################


# Symbolic link behavior ######################################################
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links outside of the configured music_directory.
#
follow_outside_symlinks "yes"
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links inside of the configured music_directory.
#
follow_inside_symlinks          "yes"
#
###############################################################################

# Zeroconf / Avahi Service Discovery ##########################################
#
# If this setting is set to "yes", service information will be published with
# Zeroconf / Avahi.
#
zeroconf_enabled                "yes"
#
# The argument to this setting will be the Zeroconf / Avahi unique name for
# this MPD server on the network.
#
zeroconf_name                   "Music Player Daemon"
#
###############################################################################


# Permissions #################################################################
#
# If this setting is set, MPD will require password authorization. The password
# can setting can be specified multiple times for different password profiles.
#
#password                        "password@read,add,control,admin"
#
# This setting specifies the permissions a user has who has not yet logged in.
#
#default_permissions             "read,add,control,admin"
#
###############################################################################


# Database #######################################################################
database {
       plugin "proxy"
       host "other.mpd.host"
       port "6600"
}

# Input #######################################################################
#

input {
        plugin "curl"
#       proxy "proxy.isp.com:8080"
#       proxy_user "user"
#       proxy_password "password"
}

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

# Audio Output ################################################################
#
# MPD supports various audio output types, as well as playing through multiple
# audio outputs at the same time, through multiple audio_output settings
# blocks. Setting this block is optional, though the server will only attempt
# autodetection for one sound card.
#
# An example of an ALSA output:
#
audio_output {
        type            "alsa"
        name            "MPD JACK output"
        device          "hw:1,0"        # optional
##      mixer_type      "hardware"      # optional
##      mixer_device    "default"       # optional
##      mixer_control   "PCM"           # optional
##      mixer_index     "0"             # optional
}
#
# An example of an OSS output:
#
#audio_output {
#       type            "oss"
#       name            "My OSS Device"
##      device          "/dev/dsp"      # optional
##      mixer_type      "hardware"      # optional
##      mixer_device    "/dev/mixer"    # optional
##      mixer_control   "PCM"           # optional
#}
#
# An example of a shout output (for streaming to Icecast):
#
#audio_output {
#       type            "shout"
#       encoding        "ogg"                   # optional
#       name            "My Shout Stream"
#       host            "localhost"
#       port            "8000"
#       mount           "/mpd.ogg"
        name            "MPD JACK output"
        device          "hw:1,0"        # optional
##      mixer_type      "hardware"      # optional
##      mixer_device    "default"       # optional
##      mixer_control   "PCM"           # optional
##      mixer_index     "0"             # optional
}
#
# An example of an OSS output:
#
#audio_output {
#       type            "oss"
#       name            "My OSS Device"
##      device          "/dev/dsp"      # optional
##      mixer_type      "hardware"      # optional
##      mixer_device    "/dev/mixer"    # optional
##      mixer_control   "PCM"           # optional
#}
#
# An example of a shout output (for streaming to Icecast):
#
#audio_output {
#       type            "shout"
#       encoding        "ogg"                   # optional
#       name            "My Shout Stream"
#       host            "localhost"
#       port            "8000"
#       mount           "/mpd.ogg"
#       password        "hackme"
#       quality         "5.0"
#       bitrate         "128"
#       format          "44100:16:1"
##      protocol        "icecast2"              # optional
##      user            "source"                # optional
##      description     "My Stream Description" # optional
##      url             "http://example.com"    # optional
##      genre           "jazz"                  # optional
##      public          "no"                    # optional
##      timeout         "2"                     # optional
##      mixer_type      "software"              # optional
#}
#
# An example of a recorder output:
#
#audio_output {
#       type            "recorder"
#       name            "My recorder"
#       encoder         "vorbis"                # optional, vorbis or lame
#       path            "/var/lib/mpd/recorder/mpd.ogg"
##      quality         "5.0"                   # do not define if bitrate is defined
#       bitrate         "128"                   # do not define if quality is defined
#       format          "44100:16:1"
#}
#
# An example of a httpd output (built-in HTTP streaming server):
#
#audio_output {
#       type            "httpd"
#       port            "8000"
#       bind_to_address "0.0.0.0"               # optional, IPv4 or IPv6
##      quality         "5.0"                   # do not define if bitrate is defined
#       bitrate         "128"                   # do not define if quality is defined
#       format          "44100:16:1"
#       max_clients     "0"                     # optional 0=no limit
#}
#
# An example of a pulseaudio output (streaming to a remote pulseaudio server)
#
#audio_output {
#       type            "pulse"
#       name            "My Pulse Output"
##      server          "remote_server"         # optional
##      sink            "remote_server_sink"    # optional
#}
#
# An example of a winmm output (Windows multimedia API).
#
#audio_output {
#       type            "winmm"
#       name            "My WinMM output"
##      device          "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#               or
##      device          "0"             # optional
##      mixer_type      "hardware"      # optional
#}
#
# An example of an openal output.
#
#audio_output {
#       type            "openal"
#       name            "My OpenAL output"
##      device          "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#}
#
## Example "pipe" output:
#
#audio_output {
#       type            "pipe"
#       name            "my pipe"
#       command         "aplay -f cd 2>/dev/null"
## Or if you're want to use AudioCompress
#       command         "AudioCompress -m | aplay -f cd 2>/dev/null"
## Or to send raw PCM stream through PCM:
#       command         "nc example.org 8765"
#       format          "44100:16:2"
#}
#
## An example of a null output (for no audio output):
#
#audio_output {
#       type            "null"
#       name            "My Null Output"
#       mixer_type      "none"                  # optional
#}
#
# If MPD has been compiled with libsamplerate support, this setting specifies
# setting is disabled.
#
#samplerate_converter           "Fastest Sinc Interpolator"
#
###############################################################################


# Normalization automatic volume adjustments ##################################
#
# This setting specifies the type of ReplayGain to use. This setting can have
# the argument "off", "album", "track" or "auto". "auto" is a special mode that
# chooses between "track" and "album" depending on the current state of
# random playback. If random playback is enabled then "track" mode is used.
# See <http://www.replaygain.org> for more details about ReplayGain.
# This setting is off by default.
#
#replaygain                     "album"
#
# This setting sets the pre-amp used for files that have ReplayGain tags. By
# default this setting is disabled.
#
#replaygain_preamp              "0"
#
# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
# By default this setting is disabled.
#
#replaygain_missing_preamp      "0"
#
# This setting enables or disables ReplayGain limiting.
# MPD calculates actual amplification based on the ReplayGain tags
# and replaygain_preamp / replaygain_missing_preamp setting.
# If replaygain_limit is enabled MPD will never amplify audio signal
# above its original level. If replaygain_limit is disabled such amplification
# might occur. By default this setting is enabled.
#
#replaygain_limit               "yes"
#
# This setting enables on-the-fly normalization volume adjustment. This will
# result in the volume of all playing audio to be adjusted so the output has
# equal "loudness". This setting is disabled by default.
#
#volume_normalization           "no"
#
###############################################################################


# MPD Internal Buffering ######################################################
#
# This setting adjusts the size of internal decoded audio buffering. Changing
# this may have undesired effects. Don't change this if you don't know what you
# are doing.
#
#audio_buffer_size              "4096"
#
# This setting controls the percentage of the buffer which is filled before
# beginning to play. Increasing this reduces the chance of audio file skipping,
# at the cost of increased time prior to audio playback.
#
###############################################################################


# Resource Limitations ########################################################
#
# These settings are various limitations to prevent MPD from using too many
# resources. Generally, these settings should be minimized to prevent security
# risks, depending on the operating resources.
#
#connection_timeout             "60"
#max_connections                "10"
#max_playlist_length            "16384"
#max_command_list_size          "2048"
#max_output_buffer_size         "8192"
#
###############################################################################

# Character Encoding ##########################################################
#
# If file or directory names do not display correctly for your locale then you
# may need to modify this setting.
#
#filesystem_charset             "UTF-8"
#
# This setting controls the encoding that ID3v1 tags should be converted from.
#
#id3v1_encoding                 "ISO-8859-1"
#
###############################################################################


# SIDPlay decoder #############################################################
#
# songlength_database:
#  Location of your songlengths file, as distributed with the HVSC.
#  The sidplay plugin checks this for matching MD5 fingerprints.
#  See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
#
# default_songlength:
#  This is the default playing time in seconds for songs not in the
#  songlength database, or in case you're not using a database.
#  A value of 0 means play indefinitely.
#
# filter:
#  Turns the SID filter emulation on or off.
#
#decoder {
#       plugin                  "sidplay"
#       songlength_database     "/media/C64Music/DOCUMENTS/Songlengths.txt"
#       default_songlength      "120"
#       filter "true"
#}
#
###############################################################################

Last edited by forkenbrock (2014-02-20 20:29:16)

Offline

#2 2014-02-18 14:30:16

ondoho
Member
Registered: 2013-04-30
Posts: 692
Website

Re: [Solved] Getting MPD working with JACK

i guess you should use jack2.

if jack is running, mpd can't connect via alsa because jack is "occupying" alsa.

if you want mpd to start for $USER only, there's no need to use sysctl.

have you tried executing mpd from a terminal, to get hold of helpful error messages?

Offline

#3 2014-02-18 18:24:07

emeres
Member
Registered: 2013-10-08
Posts: 1,570

Re: [Solved] Getting MPD working with JACK

        name            "MPD JACK output"
        device          "hw:1,0"  

would occupy your alsa device. So create a virtual device in your ~./asoundrc for jack like:

##MPD - Jack Audio Connection Kit
pcm.jackplugmpd {	type plug
			slave {	pcm "jackmpd"	}	}

pcm.jackmpd {	type jack
        playback_ports {	0 system:playback_1
				1 system:playback_2	}	}

Of course change your mpds configuration to:

        name            "MPD JACK output"
        device          "jackplugmpd"  

If jack starts up and runs this should work. If you are struggling with jack use some gui like qjackctl. One of important differences between versions is SMP in jack2.

Offline

#4 2014-02-18 22:31:38

forkenbrock
Member
Registered: 2011-12-06
Posts: 43

Re: [Solved] Getting MPD working with JACK

Thank you for the responses.  I have JACK2 set up with Rhythmbox/Gstreamer and it's working.  I will use your suggestions when I try to get jack working, but for now I went back to the original ALSA Output commands in mpd.conf and I do not have JACK running.

Since the Autostart in X instruction from the Wiki didn't seem to be working I went back and followed the Autostart with systemd instructions at this link, which caused me to install the packages and follow the instructions at the 2nd link for Systemd User Session.

https://wiki.archlinux.org/index.php/Mu … th_systemd
https://wiki.archlinux.org/index.php/Sy … ur_Session


Now I seem to be able to enable and start MPD as a user service with commands such as "sysctl --user start mpd".

However, it's not connecting.  This error comes up when I open Ario from the Terminal:
[jaguar@jaguar mpd]$ ario
[ERROR](servers/ario-mpd2.c:437) ario_mpd_connect_to : Connection refused


When I type "sysctl --user status" the following MPD errors show up at the bottom of the string:

mpd.service - Music Player Daemon
   Loaded: loaded (/home/jaguar/.config/systemd/user/mpd.service; enabled)
   Active: failed (Result: exit-code) since Tue 2014-02-18 14:13:43 PST; 25s ago
  Process: 397 ExecStart=/usr/bin/mpd --no-daemon (code=exited, status=1/FAILURE)
Main PID: 397 (code=exited, status=1/FAILURE)

Feb 18 14:13:43 jaguar systemd[230]: Starting Music Player Daemon...
Feb 18 14:13:43 jaguar systemd[230]: Started Music Player Daemon.
Feb 18 14:13:43 jaguar systemd[230]: mpd.service: main process exited, code=exited, status=1/FAILURE
Feb 18 14:13:43 jaguar systemd[230]: Unit mpd.service entered failed state.

Last edited by forkenbrock (2014-02-18 22:32:42)

Offline

#5 2014-02-18 22:58:04

emeres
Member
Registered: 2013-10-08
Posts: 1,570

Re: [Solved] Getting MPD working with JACK

Your mpd configuration is corrupted.

grep -v \# mpdconf | grep .

shows it quite clearly. Correct that, and do change your audio output device. If you do not know what addressing hw in alsa means, do not use it, because eventually you will run into trouble, it is just a matter of time. Change to "default" or use mine suggestion with jack. Also your methodology is not optimal. Run the program first with basic settings, then use advanced settings, then use services, not the other way around.

Last edited by emeres (2014-02-18 23:00:52)

Offline

#6 2014-02-19 08:31:29

forkenbrock
Member
Registered: 2011-12-06
Posts: 43

Re: [Solved] Getting MPD working with JACK

Ok, it took me about 3 hours, but I finally got the config settings working.  I'll try to get JACK working next.  For anyone who needs help, here are the settings I ended up with.


[jaguar@jaguar mpd]$ grep -v \# mpd.conf | grep .

music_directory        "~/Jaguar_Music_Library"
db_file            "~/.config/mpd/database"
log_file            "~/.config/mpd/log"
user                "jaguar"
bind_to_address        "any"
port                "6600"
auto_update    "yes"
follow_outside_symlinks    "yes"
follow_inside_symlinks        "yes"
zeroconf_enabled        "yes"
zeroconf_name            "Music Player Deamon"
input {
        plugin "curl"
}
audio_output {
    type        "alsa"
    name        "My ALSA Device"
}

Offline

#7 2014-02-20 04:30:23

forkenbrock
Member
Registered: 2011-12-06
Posts: 43

Re: [Solved] Getting MPD working with JACK

I tried to get JACK working, but no luck so far.  I created this folder ~/.asoundrc and added a file called jackplugmpd with the content from the post by emeres, then followed the instructions to change the device and name in mpd.conf.  I left the type config as "ALSA"; I did try changing type to "jack", but found that it still didn't play and would not connect to the database. 

I found this below from another post.  I installed MPD with Pacman and I don't know if it has JACK support by default.  I don't know what kind of format conversion is referred to in the 2nd method, but it sounds inefficient, so I assumed I wouldn't even try to pursue that route.

ngoonee wrote:

do you connect directly to JACK or via alsa? The former requries you to recompile mpd with jack support. The latter requires you to have a 'plug' somewhere for format conversion between mpd and jack.

Last edited by forkenbrock (2014-02-20 04:34:40)

Offline

#8 2014-02-20 13:12:57

emeres
Member
Registered: 2013-10-08
Posts: 1,570

Re: [Solved] Getting MPD working with JACK

I created this folder ~/.asoundrc and added a file called jackplugmpd

The first one (.asoundrc) is supposed be a file with content that I posted. Read Alsa wiki and JACK. So when you use

$ cat ~/.asoundrc

you should get

##MPD - Jack Audio Connection Kit
pcm.jackplugmpd {	type plug
			slave {	pcm "jackmpd"	}	}

pcm.jackmpd {	type jack
        playback_ports {	0 system:playback_1
				1 system:playback_2	}	}

Edit:
This is still for alsa output in mpd. If you choose jack the whole thing with ~/.asoundrc is irrelevant. For directly using jack you have to let jack server know where mpd has to make an connection. That is the reason I suggested using Qjackctl as gui, since it has a nice patchbay. Also it is important to note that jacks and mpds formats must match.

As far as quality and sound conversion goes, this is a never ending topic. What does aplay -l output? If you have a Realtek soundchip, I doubt you will have more than mediocre sound quality, no matter what (yes even at today's 24bit@192kHz). Something with an interchangeable operational amplifier like a Prodigy HD2 card with a OPA2107, or even better a pair of OPA637, will get you high fidelity.

Conversion will be done depending on your source (FLAC collection for example) either by mpd or alsa (jackplugin) and anything in between you put. If your source format matches that of mpd and alsa device (which must match jacks), then you will have no conversion. That scenario is very unlikely. Most sources are 44,1 kHz and 48 kHz at 16 bit resolution.

Is this supposed to be a musicbox, where only mpd uses sound hardware? What is the end receiver (Headphones, TV, headunit)? What client are you using for mpd? If I recall correctly one has to run a database update on first run, so assuming you have mpc installed, this should get your database in order:

mpc update

Last edited by emeres (2014-02-20 14:38:27)

Offline

#9 2014-02-20 20:28:02

forkenbrock
Member
Registered: 2011-12-06
Posts: 43

Re: [Solved] Getting MPD working with JACK

OK, it looks like we're about ready to mark this thread as Solved.  Thanks emeres and ondoho for commenting.  I have JACK working now, in what seems to be a direct connection to MPD.

I'm currently using a Wyred4Sound DAC2 with a Juli@ sound card (the digital portion), which is attached to a I2S to HDMI interface.  I plan to eventually upgrade to the new PS Audio Perfectwave DAC (when it's released).  I don't want any compromise in sound quality and I presumed that a direct JACK connection is better (in theory)

I already had a Rhythmbox / Gstreamer / Qjackctl / JACK setup working on my machine, but I decided to try to get an Ario / MPD / JACK setup working, because MPD has some support for DSD file playback, where the Gnome player does not at this point.  This is the reason I turned to MPD.  I'm assuming there's no difference in sound between the two setups with a lossless PCM file, but I will test it when connected to my reference DAC (I'm using a small USB DAC for testing).


Here are my activated MPD settings from a grep command:

[jaguar@jaguar mpd]$ grep -v \# mpd.conf | grep .

music_directory        "~/Jaguar_Music_Library"
db_file            "~/.config/mpd/database"
log_file            "~/.config/mpd/log"
user                "jaguar"
bind_to_address        "any"
port                "6600"
auto_update    "yes"
follow_outside_symlinks    "yes"
follow_inside_symlinks        "yes"
zeroconf_enabled        "yes"
zeroconf_name            "Music Player Deamon"
input {
        plugin "curl"
}
audio_output {
    type        "jack"
    name      "My JACK Device"
    device     "hw:1,0"
}


For those who need help with Patchbay, here's a post I did a while back when struggling with this (almost impossible to find this info anywhere).

http://ubuntuforums.org/showthread.php?t=2115538

Last edited by forkenbrock (2014-02-20 20:30:56)

Offline

#10 2014-02-20 23:26:02

emeres
Member
Registered: 2013-10-08
Posts: 1,570

Re: [Solved] Getting MPD working with JACK

I have JACK working now, in what seems to be a direct connection to MPD.

Yes, but do remember that jack runs on top of alsa (or other kernel driver systems). When your setup is finished, you could try outputting the digital stream by directly addressing hardware through alsa. (I assume you are going for the untouched/direct output to your DAC.)

I'm currently using a Wyred4Sound DAC2 with a Juli@ sound card

Welcome to Autiotrak/ESI club, that is a nice sound card. I would love to try out that balanced output. If there is no conversion and stream remains otherwise untouched, there should not be any difference whatsoever, especially since you are using digital output.
By the way, the device part in audio_output is unnecessary and should appear as 'was not recognized' in mpds log.

PS. Using [ code ] [ \code ] brackets (without spaces) makes reading code easier.

Last edited by emeres (2014-02-20 23:29:05)

Offline

Board footer

Powered by FluxBB