Coder Social home page Coder Social logo

qamil95 / spiewnik Goto Github PK

View Code? Open in Web Editor NEW

This project forked from rydzekkk/spiewnik

2.0 1.0 2.0 8.46 MB

Spiewnik v2.0 - Repozytorium tekstów i chwytów piosenek w formacie .tex, z możliwością skompilowania ich do PDFa. Ideowo skupia się głównie na piosence turystycznej i poezji śpiewanej, ale jest otwarte na wszelkie utwory nadające się do gry na gitarze.

TeX 94.05% C# 5.87% Batchfile 0.08%
songbook music tex polska guitar

spiewnik's Introduction

Hej ho :)

Śpiewniki - są ich miliony, każdy jakiś ma: czy to na dysku, w internecie, czy w wersji papierowej, wiele różnych. Nie ma jednak żadnej spójnej wersji, a przy starcie każdego kursu przewodnickiego pojawia się dylemat "a co by tu dać kursantom do wydrukowania"? Może czas stworzyć coś bardziej uniwersalnego? Może czas na Śpiewnik v2.0?

Trochę historii

Na początku był Kraków... W maju 2018 ekipa z Krakowa zaczęła tworzyć "Śpiewnik krakowskich śpiewanek okołogórskich", dostępny pod rydzekkk/spiewnik (repo które aktualnie widzisz jest jego forkiem). Pomysł zacny: zamiast trzymać śpiewnik w jednym pliku worda, użyć struktury rozproszonej - pojedynczych plików latexa z jednym utworem na plik, całość wrzucić na githuba i pozwolić projektowi się rozrastać. Projekt żył przez rok, powstała wersja jest całkiem użyteczna, ale jej rozwój się zatrzymał. Kilka poprawek zostało wrzuconych, do rozwoju dołączyłem się również ja oraz Kijek z SKPB Katowice. Powoli zaczyna coś sensownego z tego powstawać :)

W czym to jest lepsze od obecnych śpiewników?

Teraz każdy trzyma w jakimś losowym formacie wybrane teksty piosenek, często muszą one być kombinowane z wielu miejsc, mają niespójną formę zapisu. Idea stojąca za tym śpiewnikiem jest następująca: prosty format bazy piosenek i jej otwartość na wszelkie utwory. Do bazy piosenek możemy wrzucić wszystko, co tylko ma chwyty i może być piosenką zagraną na gitarze. Dzięki temu, cała baza tekstów będzie szeroka, a każdy będzie mógł znaleźć w niej interesujące go utwory i utworzyć własną wersję śpiewnika w PDFie do wydrukowania. Czy też odpalić aplikację na telefon, gdzie wyszuka sobie każdy tekst z pełnej bazy. Jeśli jakiejś piosenki brakuje lub jest błędna, każdy może zaproponować do niej poprawkę, i ta od razu pojawi się we wszystkich nowszych instancjach śpiewnika.

Co mamy dziś?

Mamy bazę piosenek odziedziczonych po Krakowie, mamy też automatyczny generator listy wszystkich piosenek - pierwotnie trzeba było trochę małpiej roboty, żeby po dodaniu nowej piosenki ręcznie dopisać w odpowiednich miejscach nazwy plików, teraz robi to za nas github action. Możemy także w miarę bezboleśnie wygenerować z tej listy piosenek PDFa z wszystkimi utworami, co dzieje się też automatycznie przy każdym pull requeście. Mamy też długą listę rzeczy, które trzeba jeszcze zrobić :)

Struktura repozytorium

.github

Folder zawierający githubowy workflow, który utworzy nam paczkę ze śpiewnikiem.

SonglistGenerator

Program w C# .NET Core, który na podstawie plików master.tex z nazwami zespołów oraz poszczególnymi piosenkami, tworzy nowe pliki master.tex z alfabetycznie posortowaną listą piosenek każdego zespołu, oraz plik main.tex z listą wszystkich zespołów. Program wrapuje też znaki indeksu górnego i dolnego w chwytach (^, _) aby śpiewnik skompilował się poprawnie bez wchodzenia w tryb matematyczny, a także ma możliwość złączenia rozdziałów w jeden, jeśli te zawierają określoną liczbę lub mniej utworów. Wynik jego działania jest dostępny w artefaktach każdego builda, to z nich należy kompilować śpiewnik.

SonglistGeneratorTests

Testy programu z punktu wyżej, założone przy pisaniu wrapera indeksów górnych i dolnych - miało to namiastkę TDD, gdyż najpierw mieliśmy kilka utworów wraz z ich ręcznie poprawionymi wersjami, a później staraliśmy się napisać kod który automatycznie to wygeneruje.

SongChooser

Program w C# .NET Core WPF, który daje możliwość wyboru piosenek do umieszczenia w śpiewniku. Graficzna nakładka na SonglistGenerator, pozwalająca ręcznie wybrać piosenki które nie będą zamieszczone w finalnym śpiewniku, a także ustawić minimalny wymagany rozmiar rozdziału (rozdziały mające mniej piosenek niż wskazana liczba, zostaną połączone w jeden, umieszczony na końcu śpiewnika). Raczej proof of concept, który jako tako działa, jednak nie jest idiotoodporny i trzeba by go stworzyć porządnie od nowa ;)

main

Folder z ręcznie tworzonymi latexowymi plikami, z których należy zbudować śpiewnik. Pierwotnie bezpośrednio z niego tworzyło się śpiewnik, teraz jest to tylko katalog źródłowy do którego wrzucamy teksty piosenek - sam śpiewnik budowany jest z artefaktów builda (dostępne na githubie w zakłdace Actions).

Dodawanie nowych piosenek

Czysto teoretycznie, do dodawania piosenek nie potrzeba nic prócz edytora tekstowego, wystarczy trzymać się schematu z pliku main\template.tex i dodawać każdą piosenkę w osobnym pliku. Najlepszym sposobem na poznanie struktury pliku z piosenką jest otwarcie kilku losowo wybranych, oraz porównanie ich z wygenerowanym PDFem. Struktura śpiewnika jest oparta na zespołach, więc jeżeli chcemy dodać zespół którego nie ma, tworzymy folder o możliwie krótkiej nazwie, używając _ zamiast spacji. W folderze tworzymy plik master.tex o zawartości:

\chapter{Nazwa zespołu}

Poza plikiem master.tex, w folderze zespołu mogą znaleźć się tylko pliki .tex z poszczególnymi piosenkami. Najważniejsze założenia struktury każdego pliku:

  • Po nagłówku \tytul muszą się znaleźć trzy nawiasy klamrowe, zawierające odpowiednio tytuł utworu, autorów słów i muzyki oraz wykonwcę (nazwę folderu/rozdziału)
  • Między \begin{text} i \end{text} musi znaleźć się tekst, z czterema spacjami wcięcia (samo begin i end są pisane bez wcięć)
  • To samo dotyczy sekcji chwytów, między \begin{chord} i \end{chord}
  • Wszystkie chwyty w jednej linii powinny być rozdzielone pojedynczą spacją.

Składanie śpiewnika

Githubowe agenty są w stanie skompilować śpiewnik za nas, wystarczy stworzyć pull request do mastera a github action wygeneruje PDFa z wszystkimi utworami. Poniższa instrukcja jest przeznaczona dla tych, którzy chcą ręcznie zbudować śpiewnik na swoim komputerze (po wygenerowaniu go z tylko wybranymi piosenkami SongChooserem, lub dlatego że mają taki kaprys).

Potrzebujemy co najmniej instalacji LaTeXa, którego można pobrać tu: https://www.latex-project.org/get/ Pod Windowsem ja korzystam z MiKTeX i najlepiej będzie się w tym względzie unifikować, różne implementacje mogą mieć swoje smaczki. Instalacja sprowadza sie do klikania "dalej" :) W MiKTeXie jest też dostępny podstawowy edytor LaTeXa, ale zwykły notatnik wystarczy, polecam natomiast Notepad++ jako prostą alternatywę. Jeżeli już mamy zainstalowanego LaTeXa, wystarczy otworzyć cmd i wpisać pdflatex (ścieżka do pliku)\Spiewnik_xxx.tex, zamiast xxx podając wybraną wersję śpiewnika. Można również uruchomić skrypt !compile_all.bat w głównym folderze śpiewnika, on automatycznie skompiluje wszystkie dostępne wersje, bądź !compile_chwyty.bat dla samej wersji z chwytami. Rzecz jasna najpierw trzeba ten projekt gdzieś na dysk zassać :) Najnowsza wersja jest do pobrania z zakładki Actions (https://github.com/qamil95/spiewnik/actions), należy wejść w najnowszego builda (najlepiej mastera dla stabilnej wersji) i ściągnąć archiwym Songbook v2.0, po czym wypakować je na dysk.

Do współtworzenia projektu potrzebny nam będzie git, dostępny do pobrania tu: https://git-scm.com/downloads konto na GitHubie i zgłoszenie się do mnie z prośbą o współtworzenie.

Poczytajcie też trochę o gicie, podczas rejestracji na githubie wyskoczy Wam instrukcja z podstawowymi informacjami, które w zupełności tutaj wystarczą. Tak jak wspominałem, śpiewnik jest otwarty na wszystkie piosenki, jednak master jest zabezpieczony przed pushowaniem bezpośrednio do niego (aby nikt nic nie zepsuł). Polecam wrzucić zmiany do jakiegoś brancha i wystawić pull requesta, jeśli to tylko dodanie nowej piosenki to zaakceptuję bez dyskusji ;)

Przy każdym commicie starajcie się opisywać zmiany zwięźle, ale i konkretnie. Powodzenia!

spiewnik's People

Contributors

qamil95 avatar rydzekkk avatar gilmour24 avatar rafalzieba avatar mjenczmyk avatar

Stargazers

Piotr Tabor avatar Karol Lasończyk avatar

Watchers

 avatar

Forkers

mmaccho gilmour24

spiewnik's Issues

Przeniesienie piosenek z "różne"

Te dwa foldery są zbiorowiskami piosenek różnych autorów. Idea jest taka, żeby każdy "zespół/wykonawca" miał swój osobny folder, nawet jeśli ma tylko jedną piosenkę (potencjalnie może mieć ich więcej). Sklejenie rozdziałów w których jest mniej niż N piosenek w jeden jest już uwzględnione w #12, więc nawet jeśli powstanie kilka folderów z tylko jedną piosenką, nie spowoduje to większego bałaganu. Trzeba by też do starej szuflady znaleźć prawdziwych autorów tekstów i muzyki, oraz oryginalnych wykonawców.

Wybierałka piosenek

Czyli narzędzie które skanuje folder ściągnięty z gita, pozwala wybrać piosenki które mają znaleźć się w finalnym śpiewniku, oraz tworzy pliki main.tex i master.tex na tej podstawie. Jest już na branchu jako SongChooser.

Spis treści pojawiający się dopiero po drugiej kompilacji

  1. Ściągam czyste archiwum ze śpiewnikiem
  2. Puszczam pdflatex - powstaje PDF, ale nie ma wygenerowanych zakładek, ani spisu treści na początku
  3. Puszczam jeszcze raz - powstaje prawidłowy PDF

Co może być tego przyczyną i jak temu zaradzić? Zakładam jakiś brak wstępnego przeparsowania wszystkich plików, da się to jakoś naprawić?

Kompilacja do pdfa w chmurze

Kompilacja do pdfa w chmurze (obecnie "pdflatex" trzeba wywołać lokalnie na komputerze, fajnie jakby działo się to automagicznie, czy na github action, czy gdziekolwiek na zewnątrz)

Sortowanie tytułów i rozdziałów z polskimi znakami

Wygenerowany plik PDF z powodu kompilacji na anglojęzycznym linuksie ma błędnie posortowane rozdziały i tytuły, jeśli zaczynajhą się od polskich znaków. Trzeba poprawić sortowanie w C# kodzie, aby zawsze używało polskiej kultury.

Sklejenie rozdziałów w jeden, jeśli jest mniej niż N piosenek

Rozdziały z 1 - 3 piosenkami niepotrzebnie zwiększają rozmiar śpiewnika. Pomysł jest taki, żeby SonglistGenerator przeglądał na koniec działania listę rozdziałów, i jeśli jest w danym rozdziale mniej piosenek niż N (myślę że 4 to dobra wartość, ale na pewno będzie to sparametryzowane), wrzuca wszystkie te piosenki do osobnego rozdziału "Pozostałe", ustawia /zespoltrue i dokleja na koniec spiewnika.
Będzie to jeszcze bardziej przydatne, gdy umożliwimy wybór piosenek do umieszczenia w finalnym śpiewniku.

Wprowadzenie mechanizmu tagów

Równolegle do kategoryzacji na podstawie wykonawcy, proponuję wprowadzenie mechanizmu tagów, które opisywałyby piosenki: żeglarskie (vel. szanty i pieśni kubryku), górskie, harcerskie, popularne itp.

Taki mechanizm na pewno będzie przydatny podczas wybierania utworów (obecnie spośród kilkuset, w przyszłości pewnie z kilku tysięcy) do wygenerowania śpiewnika.

Testy czytające z rzeczywistych plików zamiast stringów

Obecnie testy nie działają zbyt pewnie przez używanie ukośników (\ i ). Żeby były pewniejsze, trzeba by wczytywać rzeczywiste pliki i porównywać je z rzeczywistym outputem. Najlepiej zrobić katalog test data który ma zarówno pliki źródłowe, jak i te już poprawione ściągnięte z repo.

Niespójny wygląd chwytów (kursywa)

Enigma\Pastoralka_98.tex oraz Enigma\Piosenka_dla_przyjaciela.tex mają rozjechane chwyty w wygenerowanym PDFie, co widać na załączonym obrazku.
2020-04-05_18h55_16

Primo, kursywa (w pastorałce E i E7 są napisane normalnie, potem do końca zwrotki kursywą, potem refren normalnie, i w drugiej zwrotce ta sama akcja z kursywą; w Piosence dla przyjaciela Capo III jest kursywą, dalej trzy linijki bez kursywy, cztery linijki kursywą, odstęp i pięć linijek bez kursywy). Od czego to się bierze, skoro w plikach .tex nie ma nic z tym wspólnego? Capo III jest w porządku, ale reszta wydaje się że przez używanie indeksu górnego (^), każda następna linijka do takiej niezakończonej ukośnikami jest zepsuta... Ale to tylko trop, nie znam się na latechu ;)

Secundo, odstępy między chwytami. Najpewniej usunięcie kursywy rozwiąże ten problem, bo o ile "fis gis fis E" mają w miarę ładne odstępy pisane normalną czcionką, o tyle w wersji z kursywą są bardziej "Agis" czy "fisgis", czyli spacje są zjedzone w tym kursywowym tekście. Znowu, nie mam pojęcia czym to może być spowodowane i jakby to można naprawić, toteż zakładam issue :)

Usprawnienie automatycznej kompilacji

Teraz kompilowana jest tylko jedna wersja, z wieloma rozdziałami zawierającymi po jednej piosence. Warto by było napisać kompilację kilku PDFów, ze skonsolidowanymi rozdziałami. Żeby nie przedłużać niepotrzebnie czasu builda, wywoływane by to było tylko po mergu do mastera.

Alfabetyczny spis treści na końcu śpiewnika

Brakuje spisu treści alfabetycznego, z tytułami wszystkich piosenek. Teraz jest całkowicie statyczny, zapisany w pliku ToC_ABC_chwyty_twocol.tex, trzeba by to zmienić i napisać coś automatycznego. Dodatkowo, fajnie jakby ten spis treści zawierał pierwszą linijkę tekstu oraz pierwszą linijkę refrenu, równoważne tytułowi (miał alfabetycznie posortowane wszystko, tytuł pogrubiony, pierwsza linijka tekstu normalnie, pierwsza linijka refrenu (/vin) kursywą) - SonglistGenerator ma już zakomentowane przygotowania pod wyciąganie tych elementów z każdej piosenki.

Instrukcja krok-po-kroku jak dodać nową piosenkę

W opisie repozytorium mamy informację, że:

Dopisywanie piosenek jest proste i nie trzeba znać się tutaj na żadnym programowaniu

Biorę na klatę to, że dla mnie to wcale takie proste nie jest ;)

Nie miałem wcześniej przyjemności pracować z LatEx-em. Patrząc na template.tex jakieś mgliste pojęcie się pojawia, ale z wielką chęcią zobaczyłbym wizualną (tekst ze zrzutami ekranu obrazującymi poszczególne kroki lub video) instrukcję krok-po-kroku jak przejść od przykładowej, zapisanej na kartce piosenki z chwytami do uzupełnionego LatEx-owego szablonu.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.