====== moode Audio Player ======
===== Dlaczego zamiast odtwarzacza CD? =====
* Mniejsze fizycznie zajmowanie miejsca zamiast nośników CD.
* Jeżeli mamy w domu centralny serwer NAS z plikami ''flac'' każdy z odtwarzaczy ''moode audio'' ma dostęp do zbiorów flac i może je odtwarzać.
* Jeżeli zależmy nam na lepszej jakości zmieniamy tylko moduł DAC.
===== Configure =====
==== Library ====
==== Audio ====
* Output device: **1:HiFiBerry DAC+**
* Volume type: **Fixed (0db)**
* Device ready wait: **1 min (default)**
* Named I2S device: **HiFiBerry DAC+**
* or DT overlay: **None**
* Driver options: **None available**
* Integrated audio: **Kernel mode (default)**
* ReplayGain: **Auto** przy czym warunkiem działania opcji są odpowiednie tagi w plikach audio. Patrz [[fedora:aplikacje:rsgain|rsgain]].
==== Network ====
==== System ====
==== Renderers ====
==== Peripherals ====
==== MPD ====
==== CamillaDSP ====
==== Multiroom Audio ====
==== Clock radio settings ====
==== Input Select ====
==== Inne ====
=== Konwersja i dzielenie pliku .ape lub .flac na pliki .flac ===
Wymogiem jest posiadanie do pliku .ape lub .flac pliku .cue z informacją o poszczególnych ścieżkach płyty.
shnsplit -f Kitaro-Silk_Road_Suite.cue -t "%n %t" -o flac Kitaro-Silk_Road_Suite.ape
shnsplit -f Kitaro-Silk_Road_Suite.cue -t "%n %t" -o flac Kitaro-Silk_Road_Suite.flac
Można też użyć gwiazdek i dodać katalog wyjściowy np ''out'', ale uprzednio taki katalog musi być utworzony.
shnsplit -f *.cue -t "%n %t" -d out -o flac *.flac
Ponieważ w niektórych tytułach utworów pojawiają się niedozwolone znaki dla nazw plików jeszcze lepsze rozwiązanie to:
shnsplit -f *.cue -t "%n" -d out -o flac *.flac && cd out && cuetag.sh ../*.cue *.flac
Pliki są tylko numerowane ścieżką a tagowanie wykonane jest osobno poleceniem ''cuetag.sh''.
Jeżeli ''shnsplit'' tworzy kilkusekundowy plik 00 to można użyć:
shnsplit -f *.cue -t "%n" -d out -o flac *.flac && cd out && rm -f 00.flac && cuetag.sh ../*.cue *.flac
===== Automatyczne odtwarzanie playlisty po uruchomieniu =====
sudo nano /etc/rc.local
dopisać przed ''exit 0'':
# Autoplay playlist after boot (random + consume)
(
sleep 10
mpc clear
mpc load "Muzyczka"
mpc shuffle
mpc random on
mpc consume on
mpc play
) &
==== Uruchomienie odpowiedniej playlisty w zależności od pory dnia ====
#Autoplay playlist after boot (random + consume)
(
sleep 30
HOUR=$(date +%H)
if [ "$HOUR" -lt 12 ]; then
PLAYLIST="Rano"
elif [ "$HOUR" -lt 18 ]; then
PLAYLIST="Popoludnie"
else
PLAYLIST="Wieczor"
fi
mpc clear
echo "$PLAYLIST" > /tmp/current_playlist.txt
# Próba załadowania wybranej playlisty. Jeśli się nie uda, ładuje zapasową "Muzyczka"
if mpc load "$PLAYLIST" > /dev/null 2>&1; then
echo "$PLAYLIST" > /tmp/current_playlist.txt
else
mpc load "Muzyczka"
echo "Muzyczka" > /tmp/current_playlist.txt
fi
chmod 666 /tmp/current_playlist.txt
mpc shuffle
mpc consume on
mpc play
) &
O czym musisz pamiętać?
* Nazwy playlist: Upewnij się, że masz w moOde stworzone i zapisane dokładnie takie playlisty, jakich nazwy wpiszesz w skrypcie (np. Rano, Popoludnie, Wieczor – uważaj na wielkość liter).
* Poprawny czas na Raspberry Pi: Aby ten skrypt działał prawidłowo, malinka musi znać aktualną godzinę. Jeśli jest podłączona do sieci/Internetu, czas ustawi się automatycznie przez NTP po uruchomieniu. Stąd opóźnienie sleep 10 jest bardzo ważne, by pobrać prawidłową godzinę przed wykonaniem skryptu.
===== Odpalenie odbiornika podczerwieni do pilota =====
Wykonane na przykładzie pilota od wzmacniacza Yamaha AX-397. Wykorzystałem przyciski od kontroli magnetofonu którego nie posiadam. Symbol pilota RAX15(WF67620).
Utworzenie urządzenia ''/dev/lirc0''.
sudo nano /boot/firmware/config.txt
Jeżeli używasz nakładkę DAC zgodną z HiFiBerry dodajemy:
# Włączenie odbiornika IR na GPIO 26 w przypadku użycia HiFiBerry
dtoverlay=gpio-ir,gpio_pin=26
Następnie restart maliny:
sudo reboot
Sprawdzamy czy powstało urządzenie ''/dev/lirc0''
ls -l /dev/lirc*
Sprawdzamy czy dioda coś odbiera gdy strzelamy do niej z pilota:
sudo ir-ctl -d /dev/lirc0 -r -1 -v
Jeżeli nie to walczymy z odpowiednim ustawieniem ''gpio_pin=XX''. Jeżeli tak to instalujemy dwa pakiety:
sudo apt install -y v4l-utils ir-keytable
Uruchom polecenie:
sudo ir-keytable -p nec -t
W moim przypadku otrzymałem wynik:
Protocols changed to nec
Testing events. Please, press CTRL-C to abort.
1037.356020: lirc protocol(nec): scancode = 0x7a04
1037.356060: event type EV_MSC(0x04): scancode = 0x7a04
1037.356060: event type EV_KEY(0x01) key_down: KEY_MEDIA(0x00e2)
1037.356060: event type EV_SYN(0x00).
1037.408071: lirc protocol(nec): scancode = 0x7a04 repeat
1037.408107: event type EV_MSC(0x04): scancode = 0x7a04
1037.408107: event type EV_SYN(0x00).
1037.516071: lirc protocol(nec): scancode = 0x7a04 repeat
1037.516244: event type EV_MSC(0x04): scancode = 0x7a04
1037.516244: event type EV_SYN(0x00).
1037.624064: lirc protocol(nec): scancode = 0x7a04 repeat
1037.624102: event type EV_MSC(0x04): scancode = 0x7a04
1037.624102: event type EV_SYN(0x00).
1037.756051: event type EV_KEY(0x01) key_up: KEY_MEDIA(0x00e2)
1037.756051: event type EV_SYN(0x00).
Interesuje nas kod ''0x7a04''. To jest kod mojego przycisku na pilocie. Sprawdzamy wszystkie pozostałe interesujące nas przyciski i wpisujemy do pliku:
sudo nano /etc/rc_keymaps/moj_pilot.toml
Z treścią:
[[protocols]]
name = "moj_pilot"
protocol = "nec"
[protocols.scancodes]
0x7a00 = "KEY_PLAY"
0x7a01 = "KEY_REWIND"
0x7a02 = "KEY_FASTFORWARD"
0x7a03 = "KEY_STOP"
0x7a04 = "KEY_MEDIA"
0x7a06 = "KEY_PAUSE"
0x7a07 = "KEY_PREVIOUSSONG"
0x7a40 = "KEY_NEXTSONG"
Następnie edytujemy plik:
sudo nano /etc/rc_maps.cfg
Na jego końcu dopisujemy:
* * moj_pilot.toml
Po zapisaniu wykonujemy polecenie:
sudo ir-keytable -s rc0 -c -w /etc/rc_keymaps/moj_pilot.toml
Następnie edytujemy plik:
sudo nano /etc/triggerhappy/triggers.d/media.conf
Dopisujemy linie:
KEY_PLAY 1 /usr/bin/mpc play
KEY_REWIND 1 /usr/bin/mpc seek -10
KEY_FASTFORWARD 1 /usr/bin/mpc seek +10
KEY_STOP 1 /usr/bin/mpc stop
KEY_MEDIA 1 /usr/local/bin/next_playlist.sh
KEY_PAUSE 1 /usr/bin/mpc pause
KEY_PREVIOUSSONG 1 /usr/bin/mpc prev
KEY_NEXTSONG 1 /usr/bin/mpc next
Aby zaczęło działać w interfejsie ''moode audio'' w zakładce ''Configure'' --> ''Pherypherials'' zaznaczamy opcję ''Triggerhappy''.
Dla pewności możemy wykonać polecenie:
sudo systemctl restart triggerhappy
Od tego momentu pilot powinien sterować ''mpc''.
===== Przycisk MEDIA =====
W moim przypadku przycisk MEDIA służy do żaglowania playlistami Rano, Poludnie, Wieczor i Muzyczka. Aby to działało tworzymy plik:
sudo nano /usr/local/bin/next_playlist.sh
Wpisujemy zawartość:
#!/bin/bash
if [ -f /tmp/current_playlist.txt ]; then
CURRENT=$(cat /tmp/current_playlist.txt)
else
CURRENT="Muzyczka"
fi
# Określenie następnej playlisty w kolejce
case "$CURRENT" in
"Rano") NEXT="Popoludnie" ;;
"Popoludnie") NEXT="Wieczor" ;;
"Wieczor") NEXT="Muzyczka" ;;
*) NEXT="Rano" ;;
esac
# Sprawdzenie czy nowa playlista istnieje w MPD.
# Jeśli nie istnieje, wraca do zapasowej "Muzyczka".
mpc clear
if mpc load "$NEXT" > /dev/null 2>&1; then
TARGET="$NEXT"
else
mpc load "Muzyczka"
TARGET="Muzyczka"
fi
# Zapisanie faktycznie załadowanej playlisty i uruchomienie
echo "$TARGET" > /tmp/current_playlist.txt
chmod 666 /tmp/current_playlist.txt
mpc shuffle
mpc consume on
mpc play
Nadajemy odpowiednie atrybuty dla pliku:
sudo chmod 755 /usr/local/bin/next_playlist.sh