Konfiguracja audio

Audio (ALSA + MPD + MPDScribble)

aptitude install mpd mpdscribble ncmpcpp -y

Po spróbowaniu odtworzenia dowolnego utworu pojawił się problem:

mpg321 nazwa_utworu.flac
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front

Naprawa jest banalna, wystarczy otworzyć plik alsa.conf oraz zmienić 1 linijkę:

nano /usr/share/alsa/alsa.conf
pcm.front cards.pcm.front -> pcm.front cards.pcm.default

Również musiałem dodać do pliku asound.conf:

nano /etc/asound.conf

pcm.!default {
  type hw
  card 1
  device 0
}
ctl.!default {
  type hw
  card 1
}

Po wyświetleniu dostępnych kart otrzymałem:

cat /proc/asound/cards

 0 [sunxicodec     ]: sunxi-CODEC - sunxi-CODEC
                      sunxi-CODEC  Audio Codec
 1 [sunxisndspdif  ]: sunxi-sndspdif - sunxi-sndspdif
                      sunxi-sndspdif
 2 [sunxisndi2s    ]: sunxi-sndi2s - sunxi-sndi2s
                      sunxi-sndi2s

Utworzyłem folder .mpd, .mpdscribble oraz .ncmpcpp w katalogu domowym każdego użytkownika oraz pliki konfiguracyjne.

mkdir .mpdscribble && touch .mpdscribble/mpdscribble.conf

mkdir .ncmpcpp && touch .ncmpcpp/config

mkdir -p .mpd/playlists && cd .mpd && touch tag_cache mpd.log pid state sticker.sql mpd.conf

Konfiguracja MPD Kingi:

nano .mpd/mpd.conf

music_directory        "/media/dysk/Muzyka"
playlist_directory        "~/.mpd/playlists"
db_file            "~/.mpd/tag_cache"
log_file            "~/.mpd/mpd.log"
pid_file            "~/.mpd/pid"
state_file            "~/.mpd/state"
sticker_file                   "~/.mpd/sticker.sql"
port                "7777"
bind_to_address "any"

gapless_mp3_playback            "yes"
metadata_to_use    "artist,album,title,track,name,genre,date,composer,performer,disc"
auto_update    "yes"
zeroconf_enabled        "yes"
zeroconf_name            "Music Player"

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

audio_output {
    type        "alsa"
    name        "Analog"
    device        "hw:0,0"    # optional
    mixer_device    "default"    # optional
    mixer_control    "PCM"        # optional
    mixer_index    "0"        # optional
}

mixer_type            "software" #volume etc

Moja konfiguracja:

nano .mpd/mpd.conf

music_directory        "/media/dysk/Muzyka"
playlist_directory        "~/.mpd/playlists"
db_file            "~/.mpd/tag_cache"
log_file            "~/.mpd/mpd.log"
pid_file            "~/.mpd/pid"
state_file            "~/.mpd/state"
sticker_file                   "~/.mpd/sticker.sql"
port                "6666"
bind_to_address "any"

gapless_mp3_playback            "yes"
metadata_to_use    "artist,album,title,track,name,genre,date,composer,performer,disc"
auto_update    "yes"
zeroconf_enabled        "yes"
zeroconf_name            "Music Player"

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

audio_output {
    type        "alsa"
    name        "SPDIF"
    device        "hw:1,0"    # optional
    mixer_device    "default"    # optional
    mixer_control    "PCM"        # optional
    mixer_index    "0"        # optional
}
audio_output {
    type        "alsa"
    name        "I2S"
    device        "hw:2,0"    # optional
    mixer_device    "default"    # optional
    mixer_control    "PCM"        # optional
    mixer_index    "0"        # optional
}
audio_output {
    type        "alsa"
    name        "Bifrost USB"
    device        "hw:3,0"    # optional
    mixer_device    "default"    # optional
    mixer_control    "PCM"        # optional
    mixer_index    "1"        # optional
}

mixer_type            "software" #volume etc

Dzięki rozdzieleniu profili możemy słuchać równocześnie różnej muzyki w dwóch pokojach, siostra wykorzystuje złącze analogowe, a ja podpinam przetwornik cyfrowo-analogowy pod USB albo wyjście S/PDIF. Warto zauważyć, że lecimy na różnych portach, Kinga na 7777, a ja na szatańskim 6666.

Konfiguracja MPDScribble:

nano .mpdscribble/mpdscribble.conf

daemon_user = Kinga
log = syslog
verbose = 1
host = 127.0.0.1
port = 7777
[last.fm]
verbose = 2
url = http://post.audioscrobbler.com/
username = konto_lastfm
password = haslo_do_konta_lastmf
journal = ~/.mpdscribble/lastfm.journal

No i ncmpcpp wraz ze zmienionym wyglądem:

nano .ncmpcpp/config

mpd_music_dir =                     "/media/dysk/Muzyka"
ncmpcpp_directory =                 "~/.ncmpcpp"
mpd_host =                          "127.0.0.1"
mpd_port =                          "6666"

visualizer_in_stereo = "yes
visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "FIFO"
visualizer_sync_interval = "30"
visualizer_type = "spectrum"
message_delay_time = "3"
playlist_shorten_total_times = "yes"
playlist_display_mode = "columns"
browser_display_mode = "columns"
search_engine_display_mode = "columns"
playlist_editor_display_mode = "columns"
autocenter_mode = "yes"
centered_cursor = "yes"
user_interface = "alternative"
follow_now_playing_lyrics = "yes"
locked_screen_width_part = "60"
display_bitrate = "yes"
allow_physical_files_deletion = "yes"
allow_physical_directories_deletion = "yes"
external_editor = "vim"
use_console_editor = "yes"
header_window_color = "cyan"
volume_color = "red"
state_line_color = "yellow"
state_flags_color = "red"
progressbar_color = "yellow"
statusbar_color = "cyan"
visualizer_color = "red"

Aby MPD i scrobbler uruchamiał się automatycznie jako proces konkretnego użytkownika (ważne!) należy dodać 3 linijki:

nano /etc/rc.local

#!/bin/sh -e
sudo -u Kinga mpd
sudo -u Kinga mpdscribble
sudo -u Mariusz mpd
exit 0

Globalna konfiguracja MPD na koniec:

nano /etc/default/mpd

START_MPD=false
MPDCONF=~/.mpd/mpd.conf

Sprawdzenie poprawności działania MPD:

ps aux | grep mpd

Kinga     2684 28.9  0.3  65040  8056 ?        Ssl  11:26   0:08 mpd
Kinga     2690  0.0  0.1  14784  2224 ?        Ss   11:26   0:00 mpdscribble
Mariusz   2693 29.9  0.3  64880  7236 ?        Ssl  11:26   0:08 mpd
root      2732  0.0  0.0   3128   720 pts/0    S+   11:27   0:00 grep mpd

Sprawdzenie poprawności odtwarzania i działania karty (standardowe wyjście analogowe 3,5 mm):

cat /proc/asound/card0/pcm0p/sub0/hw_params

access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 2048
buffer_size: 8192