1 (edytowany przez wabikboy 2012-02-03 23:12:28)

Temat: Przeglądarka plików MP3

Na początek duże podziękowania dla Cezarego za pomoc, i cierpliwość smile


Za pewne są osoby które wykorzystują pilota do obsługi  routera w celu np: odtwarzania plików mp3 lub radia internetowego i do tego podłączyli LCD do wyświetlania wyników  „jak ja smile”. myślę że przydało by się coś takiego jak możliwość przeglądania plików MP3 na LCD bez konieczności używania komputera.
Wyobraźmy sobie że kolega przyszedł i chciał pochwalić się jakie ma fajne kawałki MP3 na pendrive, teraz trzeba odpalać komputer czekać …. czekać w końcu się odpalił smile wpinamy pendrive wchodzimy na niego szukamy plików… uff …. . Albo wpinamy pendrive w wolne gniazdo USB routera i od razu mamy liste plików na LCD smile a że router chodzi raczej 24/h nie musimy czekać i możemy od razu przeglądać  a potem odtworzyć wybrany plik w MPD.
Prawda że dużo szybciej smile


A wiec jak to zrobić??


Zakładam że mamy:
- Pilot 
- LCD – obsługa sterownika LCD2USB
- Zainstalowany program do obsługi LCD - Lcd4linux
- Zainstalowany odtwarzacz muzyki  - MPD z MPC 
- wolne gniazdo USB


Pliki konfiguracyjne:

Auto uruchamianie skryptu przy włożeniu USB
Dodajemy do /etc/config/fstab coś takiego:

 config mount
    option target    /mnt/USBB
    option device    /dev/sdb1
    option options    rw
    option enabled    1
    option enabled_fsck 1
       list 'service' 'kopia'        #    <--  uruchamia skrypt o nazwie kopia

w katalogu /mnt musimy utworzyć katalog USBB oczywiście, I tam będzie automatycznie montowany każdy pierwszy wpięty pendrive.

Teraz tworzymy w /etc/init.d/  plik o nazwie kopia który po zamontowaniu pendrive wywoła  kolejne polecenia potrzebne do obsługi  a do niego wrzucamy taką zawartość:

 #!/bin/sh /etc/rc.common

start() {
killall lcd4linux ; cp /dodatki/Ekrany/lcd4linuxKOPIA.conf /etc/lcd4linux.conf ; 
cp /dodatki/pilot/lirccopy /etc/lircrc && /etc/init.d/lircd restart && lcd4linux ;
echo 0  > /dodatki/log.txt ; echo Pliki MP3 > /dodatki/lcdmenu.txt ; 
echo ">" >> /dodatki/lcdmenu.txt ; echo " " > /dodatki/lcd.txt ; 
/dodatki/skrypty/up.sh ; /dodatki/skrypty/licznik.sh ; mpd
}

Teraz musimy utworzyć katalog np. /dodatki  i w nim będziemy trzymali potrzebne pliki do obsługi.


Kopiujemy zawartość pliku /etc/lcd4linux.conf i zapisujemy w pliku /dodatki/Ekrany/lcd4linuxdefault.conf
Kopiujemy zawartość pliku /etc/lircrc i zapisujemy w pliku /dodatki/pilot/lircdefault

Powyższe czynności pozwolą powrócić do poprzednich ustawień


Aby móc wyświetlić pliki na LCD
w katalogu /dodatki/Ekrany  tworzymy  plik lcd4linuxKOPIA.conf z takim wpisem :

 Display LCD2USB {
    Driver 'LCD2USB'
    Size '20x4'
    Brightness 255
    Contrast 255
    Icons 1
}
Widget pozycja {
    class 'Text'
    expression file::readline('/dodatki/log.txt', 1)
    postfix '/'
    align 'R'
    width 5
    update 100
}
Widget licznik {
    class 'Text'
    expression file::readline('/dodatki/lcdmenu.txt', 3)
    width 4
    update 100
}
Widget dmes1 {
    class 'Text'
    expression file::readline('/dodatki/lcdmenu.txt', 1)
    width 20
    update 100
}
Widget dmes12 {
    class 'Text'
    expression file::readline('/dodatki/lcdmenu.txt', 2)
    width 1
    update 100
}
Widget dmes2 {
    class 'Text'
    expression file::readline('/dodatki/lcd.txt', 1)
    width 20
    update 100
}

Widget dmes3 {
    class 'Text'
    expression file::readline('/dodatki/lcd.txt', 2)
    width 20
    update 100
}

Widget dmes4 {
    class 'Text'
    expression file::readline('/dodatki/lcd.txt', 3)
    width 20
    update 100
}

Layout L20x4 {
   row1 {
   Col1 'dmes1'
   Col11 'pozycja'
   Col16 'licznik'
   }
   row2 {
   Col1 'dmes12'
   Col3 'dmes2'
   }
   row3 {
   Col1 'dmes3'
   }
   row4 {
   Col1 'dmes4'
   }
}

Display 'LCD2USB'
Layout 'L20x4'

Teraz aby sterować przewijaniem i odtwarzaniem plików
w katalogu /dodatki/pilot/ tworzymy plik lirccopy z takim wpisem:

 begin
        prog = irexec
        button = BACK
        config = mpc prev
end
begin
        prog = irexec
        button = FORWARD
        config = mpc seek +5
        repeat = 1
end
begin
        prog = irexec
        button = REWIND
        config = mpc seek -5
        repeat = 1
end

begin
        prog = irexec
        button = NEXT
        config = mpc next
end

begin
        prog = irexec
        button = PLAY
        config = mpc play
end

begin
        prog = irexec
        button = DOWN
        config = /dodatki/skrypty/up.sh
end

begin
        prog = irexec
        button = UP
        config = /dodatki/skrypty/down.sh
end

begin
        prog = irexec
        button = OK
        config = /dodatki/skrypty/play.sh
end

begin
        prog = irexec
        button = PAUSE
        config = mpc pause
end

begin
        prog = irexec
        button = STOP
        config = mpc stop
end

begin
        prog = irexec
        button = ARROW
        config = mpc repeat
end

begin
        prog = irexec
        button = PREVIEW
        config = mpc single
end

begin
        prog = irexec
        button = DVD
        config = mpd
end

begin
        prog = irexec
        button = VOL-
        config = mpc volume -1
        repeat = 1
end

begin
        prog = irexec
        button = VOL+
        config = mpc volume +1
        repeat = 1
end

begin
        prog = irexec
        button = CH_LIST
        config = mpc clear ; mpd     # w moim przypadku musi tak być gdyż wyłacza mi mpd
end

begin
        prog = irexec
        button = VIDEO_DESKTOP
        config = /dodatki/skrypty/pilotskr/copyexitmenump3.sh
end

!!!! Koniecznie używaj przycisku z tym skryptem /dodatki/skrypty/pilotskr/copyexitmenump3.sh  do odmontowania pendrive przed wyjęciem gdyż sam się nie odmontuje i może być później bałagan smile !!!!

Nazwy przycisków wpisać takie jak mamy przypisane do swojego pilota ( sprawdzić z irw )

Teraz tworzymy pliki skryptów dla przycisków pilota:

/dodatki/skrypty/up.sh

#!/bin/sh


B=$(find /mnt/USB* -name '*.mp3' | wc -l)

A=$(cat /dodatki/log.txt)

if [ ! "$A" == "$B" ]; then 
A=$((A+1))
fi

find /mnt/USB* -name '*.mp3' | sed -n $A,$((A+4))p > /dodatki/wynik.txt
echo $A>/dodatki/log.txt
sed 's|/.*/\(.*mp3\)|\1|g' /dodatki/wynik.txt > /dodatki/lcd.txt

/dodatki/skrypty/down.sh

#!/bin/sh

A=$(cat /dodatki/log.txt)

if [ ! "$A" == "1" ]; then
A=$((A-1))
fi

find /mnt/USB* -name '*.mp3' | sed -n $A,$((A+4))p > /dodatki/wynik.txt
echo $A>/dodatki/log.txt
sed 's|/.*/\(.*mp3\)|\1|g' /dodatki/wynik.txt > /dodatki/lcd.txt

/dodatki/skrypty/play.sh

#!/bin/sh

PLIK=$(head -n1 /dodatki/wynik.txt)
KATALOG=${PLIK%/*.mp3}
MP3=${PLIK##/*/}

ln -s $KATALOG /mnt/hdd1/music; mpc add "$MP3"  # /mnt/hdd1/music zmienić na taki jaki jest w /etc/mpd.conf  bo tam tworza się dowiązania (linki) inaczej nie doda do play listy mpd

Kolejny skrypt pozwoli na powrót do ustawień domyślnych przed uruchomieniem przeglądarki MP3 dla pilota i lcd4linux dlatego wyżej pisałem aby skopiować  pliki konfiguracji pierwotnej.
/dodatki/skrypty/copyexitmenump3.sh:

#!/bin/sh

umount /mnt/USBB; 
cp /dodatki/pilot/lircdefault   /etc/lircrc && 
/etc/init.d/lircd restart ;  
Killall lcd4linux ; cp /dodatki/Ekrany/lcd4linuxdefault.conf  /etc/lcd4linux.conf && lcd4linux ;
echo Odmontowano dysk > /dodatki/lcd.txt ;
echo " " > /dodatki/lcdmenu.txt ;
/dodatki/skrypty/usun.sh

Abyśmy widzieli ile plików znalazła przeglądarka MP3 na dysku tworzymy plik /dodatki/skrypty/licznik:

#!/bin/sh

find /mnt/USB* -name '*.mp3' | wc -l >> /dodatki/lcdmenu.txt

Każde dodanie pliku do odtwarzacza mpd wymaga utworzenia  dowiązania w katalogu docelowym mpd jeśli plik się w nim nie znajduje, więc po wyjęciu pendrive zostają w nim puste linki aby za każdym razem nie usuwać ręcznie tych linków tworzymy plik /dodatki/skrypty/usun.sh a w nim:

#!/bin/sh

find /mnt/hdd1/music -type l -exec rm {} \;

Tak więc mamy teraz odtwarzacz MP3 z dodatkową automatyczną obsługą zewnętrznych nośników I możliwością przeglądania plików MP3.
Oczywiście możliwości tego rozwiązania nie kończą się na samych MP3’kach
Mam nadzieję że Tutorial będzie przydatny smile
Pozdrawiam
wabikboy

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

2

Odp: Przeglądarka plików MP3

Cezary mógłbyś troche usprawnić kod który jest odpowiedzialny za przewijanie listy? chodzi o to aby nie przewijało ponizej 1 i do max +3 pozycji całkowitej ilości plików bo w jedną i druga strone mozna jechac w nieskonczonosc

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

3

Odp: Przeglądarka plików MP3

Zwykłe if. Jeżeli jest < 1 to 1 jak > max +3 to max +3

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

4

Odp: Przeglądarka plików MP3

ok poprawiłem kod od przewijania, teraz przewija do max ilości plików i do minimum 1 wcześniejsza wersja przewijała w nieskończoność w obie strony

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

5

Odp: Przeglądarka plików MP3

Cezary mała prośba czy mógłyś poprawić te dwa kody?

#!/bin/sh

A=$(cat /dodatki/log.txt)

if [ "$A" == "1" ]
then echo 1 > "$A"
else A=$((A-1))
fi
#!/bin/sh


B=$(find /mnt/USB* -name '*.mp3' | wc -l)

A=$(cat /dodatki/log.txt)

if [ "$A" == "$B" ]
then echo $B > $A
else A=$((A+1))
fi

chodzi o to że w katalogu /root tworzy pliki 1 i np 8 czyli liczby skrajne listy plików a co zmienic aby ich nie tworzyło ??

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

6

Odp: Przeglądarka plików MP3

Przecież sam tak zrobiłeś

echo 1 > "$A"

to zapis do pliku właśnie jest. A plik nazwya się tak jak ma zmienna A, czyli 1 lub 8

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez wabikboy 2012-02-03 22:43:02)

Odp: Przeglądarka plików MP3

ja tak zrobiłem bo działało jak trzeba ale wlasnie tworzy mi te pliki a czy da sie to zmienic aby działało i zeby ich nie tworzył

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

8

Odp: Przeglądarka plików MP3

No własnie źle jest. Co chciałeś osiągnąć przez to polecenie? echo 1 > "$A"

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: Przeglądarka plików MP3

w if jeżeli dojdzie do 1 to że ma nie iść dalej bo szło : 0 -1 -2 itd i to samo bylo w druga strone i jak tak zrobilem to działa czylizatrzymuje sie na koncu lub na poczatku listy ale tworzy wlasnie pliki wiec co tu wstawic aby działał if tak jak trzeba

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

10

Odp: Przeglądarka plików MP3

ok już mam. zmieniłem poprostu tak:

if [ "$A" == "$B" ]
then $B
else A=$((A+1))
fi

if [ "$A" == "1" ]
then 1
else A=$((A-1))
fi

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

11

Odp: Przeglądarka plików MP3

Chyba

if [ "$A" != "$B" ]; then
A=$((A+1))
fi

Po prostu if

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: Przeglądarka plików MP3

wlasnie miałem wpisac z tym że tak:

if [ ! "$A" == "$B" ]; then
A=$((A+1))
fi

ok ale i tak dzieki smile

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

13

Odp: Przeglądarka plików MP3

tylko zależy co porównujesz, bo dla liczb jest -ne smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

14

Odp: Przeglądarka plików MP3

Skoro dla liczb jest -ne to dlaczego działa to:

if [ ! "$A" == "1" ]
then A=$((A-1))
fi
TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

15

Odp: Przeglądarka plików MP3

Bo porównujesz łańcuchy znakowe jeżeli nie zauważyłeś.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.