>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Java

Jak konwertować nuty na kod i XML za pomocą Audiveris

Jeśli kiedykolwiek próbowałeś skanować stare nuty i odtworzyć je na syntezatorze lub otworzyć w edytorze muzycznym takim jak MuseScore, prawdopodobnie wiesz, jak frustrujący może być ten proces. Standardowy OCR, jak Tesseract, jest tu bezsilny: znaki tekstowe są powiązane z pięciolinią, podczas gdy wartości rytmiczne, akordy, pauzy i oznaczenia dynamiczne tworzą dwuwymiarową strukturę graficzną.

W tym miejscu pojawia się OMR — Optical Music Recognition. Projektów w tej dziedzinie jest niewiele, a dojrzałe systemy open source można policzyć na jednej ręce. Audiveris jest prawdopodobnie najbardziej znanym otwartoźródłowym silnikiem rozpoznawania muzyki, aktywnie rozwijanym od wielu lat.

Główny problem rozpoznawania nut

Twórcy Audiveris uczciwie przyznają w dokumentacji ważny fakt: osiągnięcie 100% dokładności w rozpoznawaniu muzyki wyłącznie za pomocą algorytmów jest praktycznie niemożliwe. Prawdziwe skany z archiwów takich jak IMSLP często cierpią z powodu zagnieceń papieru, przekrzywień, wyblakłego atramentu i niestandardowych czcionek z wydawnictw dziewiętnastego wieku. Jeśli błąd pojawi się w tonacji na początku linii, całe późniejsze dekodowanie zamienia się w kakofonię.

Dlatego koncepcja stojąca za Audiveris opiera się na dwóch ściśle powiązanych komponentach:

  • Silnik obliczeniowy (OMR Engine)
  • Wbudowany edytor graficzny (OMR Editor)

Najpierw silnik przeprowadza rozpoznawanie, a następnie wkracza człowiek. W interfejsie programu można korygować przekrzywienie, poprawiać rozpoznane symbole lub dostosowywać parametry algorytmów w locie, bez ponownego przetwarzania całego dokumentu.

Jak działa silnik rozpoznawania

Architekturę Audiveris można określić jako hybrydową. Twórcy nie polegali ślepo wyłącznie na klasycznej analizie komputerowej ani wyłącznie na głębokim uczeniu. Dla każdego typu elementu notacji muzycznej wybrali własną metodę:

  1. Linie pięciolinii i siatki są wykrywane za pomocą specjalistycznych algorytmów wykrywania linii prostych.
  2. Łączniki nut (kreski łączące nuty ósemkowe i szesnastkowe) są rozpoznawane za pomocą matematycznej morfologii obrazu.
  3. Elementy tekstowe, takie jak tytuły, oznaczenia tempa i teksty piosenek, są przekazywane do zewnętrznego silnika OCR.
  4. Główki nut są identyfikowane przez dopasowywanie szablonów.
  5. Wszystkie inne symbole o stałym rozmiarze są przetwarzane przez sieć neuronową.

Wynik jest zapisywany w wewnętrznym formacie XML z rozszerzeniem .omr lub eksportowany do standardowego MusicXML 4.0. Ten format jest rozumiany przez praktycznie całe nowoczesne oprogramowanie do notacji muzycznej: Finale, Sibelius, Dorico i MuseScore.

Uważaj na nazwy domen

Interesujący szczegół z README repozytorium: autorzy specjalnie ostrzegają użytkowników przed fałszywą stroną internetową audiveris.com.

Prawdziwy projekt znajduje się na GitHubie i powiązanej z nim stronie GitHub Pages. Strona z domeną .com naśladuje oficjalny zasób, ale przekierowuje ludzi do zewnętrznych usług z kryptowalutami i hazardem. Uważaj, jeśli zdecydujesz się pobrać gotową dystrybucję.

Jak zbudować i uruchomić projekt

Kod jest napisany w Javie i budowany za pomocą Gradle. Będziesz potrzebować JDK 17 lub nowszego oraz Git.

Projekt wykorzystuje klasyczny schemat gałęzi:

  • Gałąź master zawiera tylko stabilne wydania.
  • Cały aktywny rozwój odbywa się w gałęzi development.

Sklonuj repozytorium i zbuduj projekt z gałęzi deweloperskiej:

git clone https://github.com/Audiveris/audiveris.git
cd audiveris
git checkout development
./gradlew build

Po zakończeniu budowania możesz uruchomić aplikację bezpośrednio przez Gradle:

./gradlew run

Jeśli nie planujesz modyfikować samego kodu i chcesz tylko konwertować nuty, twórcy udostępniają gotowe instalatory dla Windows (.msi), Linux (.deb i Flatpak na Flathub) i macOS (.dmg). Zawierają już wymagane środowisko Java Runtime Environment, więc nie będziesz musiał konfigurować środowiska ręcznie.

Dlaczego to jest istotne dla programistów

Audiveris jest interesujący nie tylko dla muzyków. Jeśli tworzysz usługi do pracy z treściami multimedialnymi, cyfrowymi archiwami lub programami edukacyjnymi, ten projekt oferuje kilka świetnych możliwości:

  • Użyj Java API. Możesz zintegrować Audiveris jako bibliotekę w swoim projekcie i zautomatyzować przetwarzanie nut w formacie PDF na serwerze.
  • Uzyskaj dostęp do oryginalnej struktury dokumentu. Format .omr zawiera szczegółowe informacje o geometrii rozpoznanych elementów, co jest wygodne do analizy lub trenowania własnych modeli.

Krzywa uczenia się jest tu dość przystępna, a kod licencjonowany na AGPLv3 stanowi dobry przykład budowania złożonych hybrydowych systemów przetwarzania obrazu.

Podsumowanie

Jeśli stoisz przed zadaniem digitalizacji archiwów nutowych lub osadzania rozpoznawania partytur w swojej aplikacji, patrzenie na zastrzeżone narzędzia kosztujące setki dolarów nie jest już konieczne. Audiveris demonstruje pragmatyczne podejście do OMR: połączenie automatycznych algorytmów z wygodną ręczną korekcją daje doskonałe praktyczne rezultaty.

Powiązane projekty