foobar2000.pl - polskie forum: [Tutorial] Formatting Strings - foobar2000.pl - polskie forum

Skocz do zawartości

Strona 1 z 1
  • Nie możesz napisać tematu
  • Temat jest zamknięty

[Tutorial] Formatting Strings

#1 Użytkownik nie jest zalogowany   mixcherry Ikona

  • 50% ekstraktu z foo
  • Ikona
  • Rejestracja 20-listopad 04

Napisano 10 kwiecień 2006 - 15:04


Wyższa Szkoła Kodów Formatujących

im. Jurija Kowala
v0.3.4


Witam wszystkich młodych padawanów w mojej małej Wyższej Szkole (-:

W zasadzie, całą treść tego tutorialo-poradniko-traktatu-filozoficznego można by było zmieścić na co najmniej 20-krotnie mniejszej powierzchni. Być może kiedyś przygotuję taki mini-tutek, gdzie głównie byłyby przykłady, bez rozwklekłych tłumaczeń zasad ich działania. Dla niektórych (np. dla mnie) jest to z pewnością sposób bardziej przemawiający do wyobraźni, no i szybciej jest znaleźć jakieś interesujące, konkretne zagadnienia.
Jednakże, ten tutorial jest pomyślany w ten sposób, by każdy, czytając go od początku do końca, mógł - krok po kroku, i raczej bez pośpiechu - poznawać coraz bardziej zaawansowane techniki, sztuczki i triki stosowane podczas pisania kodów formatujących. Na koniec zapewne niejeden czytelnik zdziwi się, jakich to ciekawych rzeczy można dokonać za pomocą kilku niezbyt skomplikowanych poleceń (-:
Z pewnością będzie komuś łatwiej wystartować, jeśli kiedykolwiek pisał już coś w jakimś języku programowania - znane mu są takie pojęcia jak funkcje czy zmienne. Jeśli ktoś nie miał z tym styczności - nie ma bólu, wszystko wyjaśnię.

Staram się pisać dość łatwym językiem, jednak jeśli dla kogoś jakiś kawałek jest szczególnie zagmatwany, to wszelką krytykę i inne uwagi przyjmę z prawdziwą wdzięcznością (-:


    :!:
    Ten kurs będę prowadził korzystając z Default UI, ponieważ tak będzie łatwiej. Jeśli ktoś zrozumie podstawy, to przerzucenie się na Columns UI nie będzie dla niego problemem. Wiedza, którą tu pozyskacie, przyda się również w przypadku wtyczek: Masstagger, Track Info, OSD, i wszędzie tam, gdzie można w jakikolwiek sposób wykorzystywać tagi z pliku dźwiękowego w połączeniu z kodami formatującymi.
Cóż to jest ten Formatting string? Otóż Formatting string to po prostu kawałek "kodu", który korzystając z informacji umieszczonych w pliku dźwiękowym, przetwarza je w odpowiedni sposób i wyświetla je na playliście. Gdzie go wkleić? O tutaj:

Dołączona grafika
Rys. 1: Domyślne ustawienia Playlist Formatting


Jak widać, kod formatujący wygląda w tym wypadku tak:
%list_index%. [%album artist% - ]['['%album%[ CD%discnumber%][ #%tracknumber%]']' ]%title%[ '//' %track artist%]
$tab()
%length%

Na razie nie będziemy się zbytnio wgłębiać w szczegóły i co oznacza każdy znaczek. Oto efekt jego działania:

Dołączona grafika
Rys. 2: Domyślny wygląd playlisty
    :!:
    Miejsce z pierwszego obrazka (Preferences -> Display -> Title formatting -> Playlist) będę w dalszej części kursu nazywał po prostu zakładką Playlist Formatting. Radzę zapamiętać jego położenie, ponieważ często będziemy tam zaglądać (-:
Na początek trochę słownictwa. Zamiennie będę tu używał tych pojęć:
  • tag = field = pole
  • formatting string = kod formatujący
    Jako, że po polsku nazwa "stringi formatujące" może zasadniczo wzbudzać kontrowersje związane z niezdrowymi skojarzeniami z pewnym rodzajem bielizny, natomiast dosłowne tłumaczenie na "ciągi formatujące" nie brzmi zbyt zachęcająco (dla niektórych słowo "ciąg" też może mieć poniekąd niejednoznaczny wydźwięk), to będę tu używał po prostu określenia "kod formatujący". Brzmi całkiem profesjonalnie a zarazem dość tajemniczo, i spokojnie można wymigać się od nauki czy sprzątania stwierdzając, że przecież siedzi się nad kodami formatującymi!!! (-;
Zasadniczo, do Playlist Formatting można wkleić dowolny tekst, jakiego tylko dusza zapragnie. W ramach eksperymentu, zróbcie co następuje: usuńcie wszystko, co jest domyślnie w Playlist Formatting (zawsze można wrócić do domyślnych ustawień naciskając przycisk Reset Page -- uwaga, nie pomylić go z Reset All!!). Zamiast tego, wklejcie tam jakiś tekst, np.
Jerzy w jeżyn wierzył moc

Teraz kliknijcie na Apply i spójrzcie na swoją playlistę (-: Jak się łatwo domyśleć, to co wpiszemy w Playlist Formatting, jest tym, co się pokaże w każdej pojedyńczej linijce naszej playlisty. Tylko że w takiej postaci nie ma to zbyt wielkiego sensu - co więc zrobić, by w każdej linijce wyświetlał się inny tekst, zależny od piosenki, którą owa linijka reprezentuje?... Tym właśnie zajmie się ten tutorial (-:


  • O TAGach słów kilka
    foobar2000 korzysta z informacji umieszczonych w samym pliku dźwiękowym przy pomocy tzw. tagów (inaczej zwanym z angielska fields, czyli polami).
    Przejdź na swoją playlistę w foobarze, a następnie kliknij na jakimś pliku prawym klawiszem i wybierz Properties. Wyświetlą ci się wszystkie tagi zapisane w danym pliku, może to wyglądać np. tak:
    ARTIST = Nirvana
    TITLE = Come As You Are
    ALBUM = Nevermind
    TRACKNUMBER = 3
    

    Same nazwy pól są dość opisowe: ARTIST to artysta, TITLE to tytuł utworu, ALBUM to nazwa albumu, na której znajduje się utwór, TRACKNUMBER to numer piosenki na płycie. Jak widać, każde pole ma swoją unikalną nazwę oraz przypisaną doń wartość. Np. tu: ARTIST = Nirvana, pole nazywa się ARTIST i ma ono wartość Nirvana. Jeśli obejrzysz sobie kilka swoich plików, to z pewnością zauważysz, że nazwy pól się powtarzają - pole opisujące artystę zawsze nazywa się ARTIST, a pole, w którym trzymany jest tytuł piosenki, zawsze nazywa się TITLE. Itd. Nie ma się co dalej rozwodzić, chyba każdy wie co to są tagi.



  • Jak w foobarze skorzystać z tagów?
    Jak teraz skorzystać z tych informacji? Chcesz na przykład wyświetlić informacje o swoich plikach na playliście w ten sposób:
    Artysta / Tytuł alubumu: Numer ścieżki - Tytuł ścieżki
    

    tak, że kilka piosenek ułoży się w coś takiego:
    Nirvana / Nevermind: 1 - Smells Like Teen Spirit
    Nirvana / Nevermind: 2 - In Bloom
    Nirvana / Nevermind: 3 - Come As You Are
    Nirvana / Nevermind: 4 - Breed
    Nirvana / Nevermind: 5 - Lithium
    

    itd. Na razie nie wygląda to zbyt pięknie, ale to dopiero początek kursu (-:

    Jak teraz dostać się do tych czterech pól, potrzebnych nam do wyświetlenia na playliście informacji o plikach? Żadna specjalna filozofia, po prostu zamykamy nazwę pola w znaczkach % (czyli procenta). Np. jeśli chcesz wyświetlić zawartość pola ARTIST, to w zakładce Playlist Formatting wpisz:
    %artist%
    

    (wielkość liter w tym przypadku nie ma tak naprawdę znaczenia). Znów - Apply - i spójrz na playlistę. Ha! O to chodziło (-:
      :?:
      No dobrze, ale przecież napisałem, że do Playlist Formatting można wpisać dowolny tekst, i on się wtedy wyświetla na playliście? Dlaczego teraz po prostu nie wyświetlił się w kożdej linijce napis "%artist%"???
    Dobre pytanie (-: Otóż klucz tkwi właśnie w znaczku % (procenta). Gdy wpisujemy coś do Playlist Formatting, to foobar, literka po literce, wyświetla to dosłownie na naszej playliście - do czasu napotkania na specjalny znak, jakim właśnie jest nasz %. Od tego momentu, pobiera to, co znajduje się między procentami (u nas jest to "artist"), a następnie szuka w pliku odpowiedniego TAGa (pola), które nazywa się tak, jak nasz tekst między procentami. Spróbujcie wstawić między procentami jakiś tekst od czapki, np. %srudup%, a następnie spójrzcie co się wyświetla na playliście. Otóż wyświetla się znak zapytania! A to dlatego, że foobar nie znalazł w pliku żadnego taga, który nazywałby się SRUDUP.
    To właśnie dlatego, jeśli w pliku nie ma taga ARTIST (bo nikt go nie ustawił), to wyświetla nam się znak zapytania. W dalszej części kursu pokażę, jak tego uniknąć.

    No, ale wracając do naszego przykładu. Myślę, że teraz nikomu nie powinno sprawić problemu takie ułożenie kodu formatującego, żeby pokazał nam ścieżki tak jak sobie zechcieliśmy na początku (Artysta / Tytuł alubumu: Numer ścieżki - Tytuł ścieżki). Na wszelki wypadek, nie umieszczę tu żadnego gotowca (-:



  • Eee... i to wszystko??
    Oczywiście, że nie! (-: Możliwości formatowania tekstu nie ograniczają się do prostego wklejenia zawartości jakiegoś taga. To dopiero początek wielkiej przygody!! [-:

    Otóż, jako rzekłem, jednym ze znaków specjalnych jest %. Nie koniec na tym! Jest więcej tego typu znaczków, które zamiast wkleić jakiś tekst, cośtam ciekawego robią. Takimi specjalnymi znaczkami są: % (procent), $ (dolarek), ( ) (nawiasy okrągłe), [ ] (nawiasy kwadratowe), ' (pojedyńczy cudzysłów), // (dwa slashe). Wpisując te znaczki gdzieś w naszym kodzie formatującym, foobar zacznie nas podejrzewać, że chcemy zrobić coś podejrzanego, i od tego momentu przestanie cokolwiek wyświetlać (w najlepszym wypadku, w najgorszym wyświetli się jakiś ciekawy komunikat błędu w rodzaju np. [UNKNOWN FUNCTION]). Oczywiście, o ile nie wiemy, jak z nich korzystać (-: A zaraz się dowiemy. Oto znaczenie poszczególnych znaczków specjalnych:
    • $ (dolarek)
      Od tego znaczka zaczynają się wszystkie nazwy funkcji.
      Co to są funkcje? Jeśli ktoś nie spał na lekcjach matematyki, to już wie (-: Dla innych krótkie objaśnienie:
      Funkcje są to pewne podprogramy, które przyjmują jakieś argumenty, wykonują na nich określone operacje (coś liczą, przekształcają tekst, itp.), a następnie zwracają wynik tych działań.
      Weźmy np. funkcję $upper(tekst). Nazwą funkcji jest tutaj $upper(), natomiast argumentem - "tekst". Funkcja $upper() ma za zadanie zwrócić tekst, który jest wpisany jako argument, tyle że cały pisany WIELKIMI LITERAMI. Tak więc tutaj, $upper(tekst) zwróci nam w wyniku: TEKST. $upper(bLaBlAbLa) wypisze nam: BLABLABLA, itd. Żeby się przekonać, że nie kłamię, proponuję wpisać powyższy przykład do swojego kodu formatującego, i obejrzeć wynik na playliście.
      Jak już zapewne wszyscy zdążyli zauważyć, argumenty wpisuje się pomiędzy nawiasami okrągłymi. Różne funkcje mogą operować na różnych ilościach argumentów. Jeśli funkcja przyjmuje więcej argumentów niż jeden, to te argumenty oddziela się przecinkami. Np. $num(X,Y) przyjmuje dwa argumenty: X oraz Y. Funkcja $replace(A,B,C) przyjmuje jak widać trzy argumenty. Mogą się zdarzyć funkcje, które przyjmują dowolną ilość argumentów, np. funkcja $longest(A,B,C,....) zwracająca najdłuższy tekst ze wszystkich wpisanych w argumentach. Dla odmiany, funkcja $rand() w ogóle nie przyjmuje żadnego argumentu.
    • ( ) (nawiasy okrągłe)
      Jak już napisałem, w okrągłych nawiasach podaje się argumenty dla funkcji.
    • % (procent)
      Jak już było wielokrotnie wałkowane, pomiędzy znaczkami procentów wpisuje się nazwę tagu (pola), którego wartość chcemy wyciągnąć. Otóż jest to wierutne kłamstwo (-: Tak naprawdę, wpisanie czegoś takiego: %jakis_tag% oznacza ni mniej ni więcej, tylko "skrót" do funkcji $meta(jakis_tag). Jest to pewne uproszczenie wprowadzone dla wygody, pozwala na szybsze pisanie prostych kodów, nie zajmują one wtedy tyle miejsca.
      Otóż procent wykorzystywany jest w foobarze do wyciągnięcia kilku innych informacji, niekoniecznie związanych z tagami znajdującymi się w pliku. Np. %list_index% wyświetli nam pozycję pliku na playliście, %list_total% pokaże nam łączną ilość plików na playliście, %isplaying% jest wykorzystywane do sprawdzenie, czy dany plik jest aktualnie odtwarzany. Przykładów jest sporo więcej, ale nie ma co tutaj marnować na nie miejsca. Szczegóły opiszę w dalszej części kursu.
    • // (dwa slashe)
      Dwoma slashami oznacza się komentarz w naszym kodzie formatującym. Każda linia rozpoczynająca się od // nie wyświetli się, choćby nie wiadomo co.
      Komentarze są pomocne, gdy pisze się naprawdę wypasione kody, wtedy przydatne jest opisanie, co robi dany fragment kodu itd.
      UWAGA: Komentarze można umieszczać tylko na początku nowej linii! (inaczej zostaną wyświetlone)
    • [ ] (nawiasy kwadratowe)
      Bardzo przydatna rzecz: powoduje, iż wszelkie nieistniejące w danym pliku tagi wpisane pomiędzy nawiasy kwadratowe, zostaną zignorowane.
      Np. można wpisać [%album%]. W wypadku, gdy w pliku jest obecny tag ALBUM - zostanie wyświetlona jego zawartość (np. Nevermind). Jeśli taki tag nie istnieje - nic się nie wyświetli (bez zastosowania nawiasów kwadratowych, wyświetliłby się znak zapytania). Można też bardziej pokombinować: [%album% [ - %tracknumber%]]. Jeśli nie istnieje tag ALBUM, nic się nie wyświetli. Jeśli istnieje tag ALBUM, to dopiero wtedy jest sprawdzane, czy istnieje tag TRACKNUMBER itd. Równie dobrze możnaby do tego wykorzystać funkcję $if(), ale ten sposób szybszy (choć chyba mniej przejrzysty).
    • ' (pojedyńczy cudzysłów)
      Ano właśnie. A co, jeśli chcemy po prostu wyświetlić na playliście np. znaczek dolarka?? Przecież foobar potraktuje go jako "znak specjalny", i będzie oczekiwał że dalej podamy nazwę jakiejś funkcji!
      Rozwiązanie jest proste niczym trzonek młotka: wszystkie znaki specjalne wstawiamy po prostu pomiędzy pojedyńcze cudzysłowy, np. '%', '$', '[' itd. Jest to również przydatne, gdy w środku jakiejś funkcji chcemy wstawić nawias okrągły (który normalnie byłby potraktowany jako np. zamknięcie funkcji), np.: $replace(tekst,t,')') - zamienia wszystkie literki t w danym tekście na nawiasy.
      Jeśli chcemy wstawić sam pojedyńczy cudzysłów, musimy napisać '' (dwa pojedyńcze cudzysłowy).
    • (znak końca linii)
      Znaki końca linii są ignorowane. Niezależnie od tego, ile enterów byśmy naklepali, wszystko wyświetli się w jednej linii.
    • $tab() (znak tabulatora)
      Znak tabulatora służy do różnych zabaw położeniem tekstu w linijce - można go używać do "imitacji" kolumn lub "wyjustowywania" tekstu do obu stron, np. jeśli nasz kod wyglądałby tak: %title%$tab()%length%, to wszystkie tytuły byłyby wyrównane do lewej, natomiast długości utworów - do prawej strony.
      :!:
      Generalnie prosta zasada: jeśli coś wyświetla się nam na playliście niezupełnie tak, jak byśmy tego oczekiwali, najpierw sprawdźmy, czy w naszym kodzie nie występują "luzem" żadne znaki specjalne. Być może w jakiejś nazwie funkcji popełniliśmy literówkę, może zamknęliśmy za mało nawiasów, itd. itp.



  • O funkcjach - po ludzku
    Wiemy już, co to są funkcje, jak wyglądają, że jest ich całkiem sporo, ale tak w zasadzie - to jak z nich korzystać?... Co foobar tak właściwie z nimi robi?...
    Do Playlist Formatting wpiszmy dla przykładu taki zwykły tekst:
    malutenieńkie litereczki
    

    Co się wyświetla na playliście? Nawet nie trzeba na nią patrzeć, żeby zgadnąć (-:
    A teraz dodajmy do tekstu jakąś funkcję. Niech to będzie wspomniana już funkcja zamieniająca nam tekst na duże literki. Nazywa się $upper().
    malutenieńkie litereczki $upper(wielgachne litersony)
    

    Spójrzmy na playlistę. Niespodzianka - tak jak w przypadku %artist% - wyświetliło się niezupełnie to, co wpisaliśmy! Co się stało? Otóż! Słuchajcie uważnie, bo nie będę powtarzał (-:
    foobar spokojnie, jak gdyby nigdy nic, wypisywał sobie na playlistę nasz tekst ("malutenieńkie litereczki "), aż tu nagle - BUMS! - natrafił na dolarek! ($) - znaczy, szykuje się jakaś funkcja. W tym momencie wziął, kurde, i wyciął całą tą funkcję wraz z jej zawartością - czyli wyciął cały tekst "$upper(wielgachne litersony)".
    I teraz - moi drodzy - clue programu. foobar bierze nazwę funkcji - czyli u nas $upper - i myśli sobie: "Acha... czyli że muszę zamienić wszystko na wielkie litery!" -- Co "wszystko"? Otóż to wszystko, co jest pomiędzy nawiasami! Czyli napis "wielgachne litersony". No to bierze i zamienia, i wychodzi mu z tego napis: "WIELGACHNE LITERSONY". I co robi teraz z tym napisem? Wkleja w to miejsce, gdzie kiedyś była nasza funkcja!!
    malutenieńkie litereczki WIELGACHNE LITERSONY
    


    Żeby sobie jeszcze zobrazować ten mechanizm, można spojrzeć na następujący przykład. Użyjemy w nim odwrotnej w działaniu funkcji: zamieniającej wszystkie duże literki na małe - nazywa się $lower().
    DUŻE ZNAKI - $lower(MAŁE ZNACZKI) - ZNOWU DUŻE ZNAKI
    
    • Lecimy po całym kodzie i szukamy funkcji.
    • Znaleźliśmy funkcję: $lower(MAŁE ZNACZKI).
    • Wycinamy znalezioną funkcję.
    • Wykonujemy sobie "w głowie" tą funkcję. "$lower(MAŁE ZNACZKI)" ----zamienia-się-w---> "małe znaczki".
    • Wklejamy nowy napis na miejsce wyciętej funkcji.
    Efekt:
    DUŻE ZNAKI - małe znaczki - ZNOWU DUŻE ZNAKI
    

    Wszyscy załapali? Mam nadzieję, że tak - bo już bardziej łopatologicznie chyba nie potrafię wytłumaczyć. Jeśli jednak coś jest niejasne - pytać, pytać i jeszcze raz pytać!

    :idea:

    OK. A teraz spójrzmy na takiego dziwoląga:
    $lower(MONK-$upper(zonk))
    

    Na pierwszy rzut oka - coś totalnie odjechanego (-; A konkretnie - funkcja w środku funkcji. Jeszcze konkretniej - funkcja $upper() w środku funkcji $lower(). Cóż to zmienia? Otóż - uwaga, uwaga - nic (-: To znaczy, dzieje się to samo co poprzednio. Tak samo - foobar przelatuje po kodzie, szuka funkcji, wycina je, cośtam z nimi robi, a następnie wkleja wynik ich działań. Dodajmy do tego jeszcze jeden szczegół: zaczyna od tych funkcji, które są najbardziej "wewnątrz". "Wewnątrz", czyli w środku jakiejś innej funkcji. Czyli krok po kroku, co się u nas dzieje:
    • Mamy sobie ot taki kodzik:
      $lower(MONK-$upper(zonk))
      

    • Znaleziono funkcję! Ta najbardziej wewnętrzna to $upper(zonk). Jak już wiemy, zamienia nam ona tekst na wielkie litery. A więc, po tej zmianie, nasz kod wygląda następująco (my tego nie widzimy, ale tak - mniej więcej - w środku przerabia to sobie foobar):
      $lower(MONK-ZONK)
      

    • To nie koniec! Po "przerobieniu" wewnętrznej funkcji - pozostaje nam teraz jeszcze ta "zewnętrzna", czyli u nas $lower. Po jej zastosowaniu, napis pomiędzy nawiasami zostanie przerobiony w ten sposób:
      monk-zonk
      

    I jeszcze tylko jeden przykład - bez opisu, krok po kroku. Skorzystamy w nim z nowej funkcji $add(X,Y) - dodającej do siebie dwie liczby. Np. $add(2,7) zamieni się na 9. Kolorem żółtym oznaczyłem funkcje, natomiast czerwonym: wynik ich działania. A więc:
    $upper(Już liczę: $lower(DWA plus SIEDEM = $add(2,7)))
    
    • $upper(Już liczę: $lower(DWA plus SIEDEM = $add(2,7)))
    • $upper(Już liczę: $lower(DWA plus SIEDEM = $add(2,7)))
    • $upper(Już liczę: $lower(DWA plus SIEDEM = 9))
    • $upper(Już liczę: $lower(DWA plus SIEDEM = 9))
    • $upper(Już liczę: dwa plus siedem = 9)
    • $upper(Już liczę: dwa plus siedem = 9)
    • JUŻ LICZĘ: DWA PLUS SIEDEM = 9
    JUŻ LICZĘ: DWA PLUS SIEDEM = 9
    

    Tak oto sprowadziliśmy foobara do roli liczydła (-:



  • Do dzieła, młodzieży!!
    Ok, dosyć już tego pitolenia trzy po trzy. Zajmijmy się lepiej konkretnymi przykładami, albowiem nic tak nie przemawia do człowieka tak jak kawałek porządnego kodu (-:

    :idea:
    CEL: Oznaczenie aktualnie odtwarzanej piosenki
      Dołączona grafika
      Mamy za zadanie wyświetlić jakiś znaczek, załóżmy "<<<" po nazwie utworu, który aktualnie nam przygrywa. Jak na razie, do wyświetlenia listy utworów użyjemy tylko prostego schemaciku %artist% - %title%. Żeby nie zaciemniać sytuacji. Po dotychczasowej lekturze, raczej każdy wie, co on wyświetla (a jak nie wie, to wystarczy że go wklei gdzie trzeba - i już wie).

      Pola oraz funkcje, których użyjemy:
      • %isplaying%
        Tzw. context-specific field, czyli pole (tag), które w danym pliku "pojawia się" tylko na specjalną okoliczność. W tym wypadku - gdy ten plik jest akurat odtwarzany. Oczywiście, tag nie pojawia się fizycznie w pliku, nie jest w nim zapisywany ani nic - tylko tak jakby udaje że tam jest, informując nas (i foobara), że z danym plikiem coś się dzieje.
        Tak więc, %isplaying% pojawia się tylko wtedy, gdy plik jest odtwarzany (uwaga - odtwarzany, ale nie zapauzowany - od tego jest inny tag).
      • $if()
        Dosyć podstawowa funkcja - "jeżeli". Jej podstawowa składnia to:
        $if(X,Y,Z)
        i oznacza ona:
        JEŻELI występuje tag "X" TO wypisz na ekranie "Y", W PRZECIWNYM WYPADKU wypisz na ekranie "Z"
        Jest też wersja skrócona:
        $if(X,Y)
        JEŻELI występuje tag "X" TO wypisz na ekranie "Y"
      Jeżeli dla kogoś jest coś w tym punkcie niejasnego, to niech pisze. Myślę, że na tym etapie są dość proste rzeczy i nie trzeba dłużej tego tłumaczyć (no ale może się mylę). W każdym razie, każdy pilny uczeń z pewnością już wie, co u nas jest X-em, co Y-grekiem, a co Z-tem (-: Ale dla porządku:
      Co sprawdzamy? Czy piosnka gra. Czym sprawdzamy? Tagiem %isplaying%. OK. Tak więc nasz X to %isplaying%.
      Co robimy, jeśli tag jest obecny? Wypisujemy ">>>". Czyli, że nasze Y to po prostu >>>.
      Co robimy, jeśli tag jest nieobecny? Nic, szefie. Dobrze, moje dzieci. Nie robimy nic, co oznacza, iż nasze Z jest puste, a więc nic tam nie wpisujemy.
      Reasumując, na chwilę obecną nasz kodzik wygląda następująco:
      $if(%isplaying%,<<<,)
      

      Niecierpliwi mogą go sobie wkleić do Playlist Formatting. Ich oczom powinien się ukazać straszny widok - na playliście nic nie ma (-: Oczywiście, to tylko złudzenie optyczne. Na playliście są piosenki, tylko po prostu nie wyświetlają się ich nazwy. Kliknijcie na którąś linijkę playlisty, tak żeby piosenka zaczęła grać. Powinien się ukazać nasz wspaniały znaczek "<<<". Sukces!
      Co teraz zrobić, żeby wyświetlały się tytuły piosenek? Po prostu dokleić nasz mały kodzik tuż po schemacie wyświetlania tytułów piosenek:
      %artist% - %title% $if(%isplaying%,<<<,)
      
        :?:
        Wszystko super, tylko że ja wolę najpierw mieć znaczek, że muzyczka gra, a dopiero potem artystę - tytuł??
      Nic prostszego. Wystarczy tylko zmienić kolejność, w jakiej będą się wypisywać nasze rzeczy (znaczek zmieniłem na "odwrotny", żeby bardziej pasował):
      $if(%isplaying%,>>> ,)%artist% - %title%
      
      :!:
      Właśnie o to chodzi w tych całych kodach formatujących. Wystarczy tylko złapać zasadę, iż nie są one niczym więcej, jak tylko zwykłym tekstem!! Zwykłym tekstem, który wypisze się nam na ekranie, tak jak my go sobie wpiszemy!! Ewentualnie, gdzieś po drodze foobar zamieni nam znaczki % czy funkcje z czegoś na coś, tak jakbyśmy w edytorze tekstu zrobili Wyszukaj -> Znajdź i zamień. Proste? Proste!

    :idea:
    CEL: Czas trwania i czas odtwarzania utworu
      Dołączona grafika
      Mamy już taki podstawowy kod, który wyświetli nam artystę - tytuł, a do tego zaznaczy piosenkę, która nam akurat gra znaczkiem "<<<".
      %artist% - %title% $if(%isplaying%,<<<,)
      

      Przydałaby się jeszcze informacja na temat tego, ile trwają utwory na playliście (proste) oraz - jeśli akurat grana jest jakaś muzyczka - wyświetlanie aktualnego czasu odtwarzania (też proste, ale deko trudniejsze). Całość sformatujemy tak, żeby artysta -tytuł równały się do lewej strony, natomiast czas - do prawej (takie "wyjustowanie").

      Pola oraz funkcje, których użyjemy:
      • %isplaying%
        Pole kontekstowe (context-specific field) - pojawia się przy aktualnie odtwarzanym pliku.
      • %length%
        Pierwsza nowość na dzisiaj. Z tego tagu jest odczytywana długość trwania utworu, w formacie [GG:]MM:SS.
      • %playback_time%
        Pole kontekstowe (context-specific field). Odczytać z niego możemy aktualny czas odtwarzania. Jak wiemy, pole kontekstowe pojawia się tylko w określonych sytuacjach (nie jest dostępne we wszystkich plikach na playliście, a tylko w tym, z którym coś się dzieje). Tutaj: tylko wtedy, gdy plik jest grany (albo zapauzowany).
      • $if()
        Tą funkcję już znamy - "jeżeli".
      • $tab()
        Jak się łatwo domyśleć - funkcja ta wstawia nam tabulator. Działanie tabulatora w foobarze jest trochę odmienne od tego, które mamy np. w Wordzie. Najłatwiej to zrozumieć wpisując w kodzie coś takiego:
        LEWO$tab()PRAWO
        

        Dołączona grafika

        Ale tak naprawdę, za pomocą $tab() można stworzyć tak jakby "kolumny", po prostu wpisując w kodzie kilka tabulatorów. Tabulatory oddzielają od siebie kolejne kolumny, np.:
        KOL1 $tab() KOL2 $tab() KOL3
        

        Dołączona grafika

        I tu uwaga na pewną "pułapkę". Otóż ostatnia "kolumna" jest po prostu tak jakby częścią przed-ostatniej kolumny. Tak jakbyśmy wzięli dwie ostatnie "kolumny", wepchnęli je do jednej wspólnej, a następnie wyjustowali ich zawartość:
        Dołączona grafika
      • [ ] (nawiasy kwadratowe)
        Znaczenie nawiasów wyjaśniłem w jednym z poprzednich rozdziałów, więc powtarzał się nie będę. Nawiasy przydają się właśnie (m.in.) w przypadku pól kontekstowych, które pojawiają się tylko na niektórych trackach - np. właśnie odtwarzanych, zapauzowanych itd. Jeśli wkleimy w nasz kod jakieś pole kontekstowe, załóżmy %playback_time% - to, jeśli track nie jest akurat grany, pojawi nam się brzydki znak zapytania. Zaradzić temu możemy właśnie przez wstawienie pola kontekstowego między nawiasy kwadratowe, o tak: [%playback_time%]. Wtedy foobar normalnie wyświetli jego zawartość jeśli to pole jest aktywne (istnieje), natomiast w przeciwnym wypadku - nic nie wyświetli.
      Ok, znamy już wszystkie potrzebne pola i funkcje, tak więc - do dzieła (-: W zasadzie, nie ma tu zbyt dużo do tłumaczenia, wstawmy sobie do Playlist Formatting taki kod:
      %artist% - %title% $if(%isplaying%,<<<,)$tab()%length%
      

      Jego pierwszą część (przed funkcją $tab()) już znamy - przerabialiśmy ją w poprzednim przykładzie. To, co jest dalej, też nie wymaga zbyt okazałego komentarza. Wstawiamy tabulator, który nam wyrówna dalszą część do prawej strony, a następnie wypisujemy czas trwania utworu. Wklejamy kod i sprawdzamy jak wygląda playlista. Pięknie? Pięknie (-:
      Teraz klikamy na jakąś muzyczkę, żeby nam przygrywało podczas dalszych zmagań z kodami. Fajnie, już gra... tylko, że... no właśnie. Pokazuje się znaczek "<<<", ale skąd mamy wiedzieć, ile już utworu poleciało?? Załóżmy, że nasz ulubiony moment jest na 2:33 - skąd mamy się dowiedzieć, ile jeszcze mamy na niego czekać, a może już przeleciał? Dosyć gadania, wklejamy kodzik i już!!
      %artist% - %title% $if(%isplaying%,<<<,)$tab()%playback_time% / %length%
      

      Dokleiliśmy kawałek "%playback_time% / ". Spoglądamy na playlistę... o fuuuj!! Co prawda, przy granej piosence wyświetla się spoko, ale na reszcie playlisty jakieś znaki zapytania!! Ha!!!! Tak się właśnie dzieje, jak się nie doczyta mojego tutoriala do końca (-;
      Teraz zrobimy magiczną sztuczkę, która nam ten problem wyeliminuje, czyniąc świat znacznie lepszym i piękniejszym:
      %artist% - %title% $if(%isplaying%,<<<,)$tab()[%playback_time% / ]%length%
      

      Ha! Nawiasy kwadratowe w akcji (-: Cóż my byśmy bez nich zroblili. Jak wiemy, jeśli cokolwiek w środku nawiasów kwadratowych sprawia jakieś problemy - po prostu nie jest wyświetlane. Jeśli wsio okiej - zawartość nawiasów jest wyrzucana na ekran. Dokładnie to samiusieńko osiągnęlibyśmy wpisując zamiast nawiasów kod:
      $if(%playback_time%,%playback_time% / ,)
      
      Ale korzystając z nawiasów kwadratowych nie trzeba się tak rozpisywać.
        :?:
        Ej, a ja wolę, żeby mi się pokazał czas, jaki został do końca piosenki (a nie jaki minął od jej początku)!!
      Macie ludzie zachcianki (-: Rozwiązanie jest już gotowe: zamiast pola %playback_time% trzeba tylko użyć pola %playback_time_remaining%. Wrzucimy przed niego minusik, żeby nie było wątpliwości, w którą stronę płynie czas.
      %artist% - %title% $if(%isplaying%,<<<,)$tab()[-%playback_time_remaining% / ]%length%
      
        :?:
        Super (-: Ale w tym wypadku, wyświetlanie czasu całkowitego piosenki jest trochę bez sensu. Chciałbym, żeby normalnie na playliście wyświetlała długość każdej piosenki, a dopiero gdy piosenka jest grana - w tym samym miejscu - pozostały do jej końca czas!
      Spełniamy marzenia użytkowników (-: Najłatwiej będzie zaprząc do pracy nasz znajomy tag %playback_time_remaining% w komitywie z równie dobrze znaną funkcją $if(). Jak wyglądałby taki kawałek kodu?
      $if(%playback_time_remaining%,-%playback_time_remaining%,%length%)
      

      Ktoś dociekliwy mógłby spytać, czemu nie użyliśmy tutaj pola %isplaying% do sprawdzenia, czy kawałek nie jest grany? Odpowiem pytaniem: a co, gdy piosenka byłaby zapauzowana?? Byłoby kiepsko. Trzeba by było sprawdzać dwa warunki: CZY piosenka jest grana LUB piosenka jest zapauzowana. No ale po co sprawdzać dwa warunki, skoro można po prostu sprawdzić, czy tag %playback_time_remaining% jest obecny?


    :idea:
    Nuda, paaanie!! Chcę, żeby mi coś mrugało!!!
      Nieco "podrasujemy" poprzednio uzyskany efekt (-: Otóż, z prawej strony aktualnie granego kawałka pojawia się nam "<<<", ale każdy przyzna, że nie wygląda to zbyt efektownie. Przerobimy te znaczki na... MRUGAJĄCE!! Wow (-8
      Pola oraz funkcje, których użyjemy:
      • %isplaying%
        Chyba już wiadomo (-:
      • %playback_time_seconds%
        Pole kontekstowe - aktualny czas odtwarzania pliku (to samo co %playback_time%), tyle że w sekundach.
      • $mod()
        Znowu nowość. Funkcja matematyczna - zwraca resztę z dzielenia (modulo). Dla przykładu: 2 mod 3 = 1 (ponieważ 2 / 3 = 0 reszta 1), 4 mod 2 = 0 (ponieważ 4 / 2 = 2 reszta 0), itd. Kłania się trzecia klasa podstawówki, tak więc matematyczno-teoretycznego aspektu tego zagadnienia nie będę tu dalej objaśniał (-:
        Ok. Składnia tej funkcji, to - jak łatwo się domyśleć:
        $mod(X,Y)
        PODAJ RESZTĘ Z DZIELENIA liczby "X" PRZEZ liczbę "Y"
        Czyli gdy w kodzie wpiszemy np.:
        $mod(3,2)
        

        to na playliście zamiast tego wypisze nam się liczba 1. Jak się już wkrótce przekonamy, jest to bardzo przydatna funkcja.
          :?:
          Ja chcę nutki a nie jakieśtam głupie <<< !!!!
        Się robi, szefuńciu (-:

To już z mojej strony wszystko i zapraszam do kolejnej części kursu, która ukaże się o ile ktokolwiek wyrazi zainteresowanie tym tutorialem (-:

Pozdrawiam, mixcherry
0

Strona 1 z 1
  • Nie możesz napisać tematu
  • Temat jest zamknięty

Użytkownicy przeglądający ten temat: 3
0 użytkowników, 3 gości, 0 anonimowych


Oferujemy miejsce na reklame. Kontakt: m.szafranski@foobar2000.pl