Spis treści
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
flackażdy z odtwarzaczymoode audioma 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 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
