Wyzwanie
Biorąc pod uwagę tabulaturę gitarową, musisz wydać utwór reprezentowany przez zakładkę. Może to dotyczyć głośników komputera lub pliku audio (.wav, .mp3, .midi, .aiff itp.). Będzie także drugie wejście dla pomiaru czasu.
Zakładki mogą być wprowadzane przez plik lub bezpośrednio do STDIN. Zakładka będzie w formie ASCII .
Spec
Wszystkie zakładki dotyczą 6 sześciostrunowych gitar ze standardowym strojeniem E: E2 (82,41 Hz), A2 (110,00 Hz), D3 (146,83 Hz), G3 (196,00 Hz), B3 (246,94 Hz), E4 (329,63 Hz).
Jedynymi technikami (oprócz normalnego wybierania), które musisz uwzględnić, są:
- Gięcie (zawsze będzie to zgięcie półtonowe)
- Kucie na
- Zrywam
- Przesuwanie w górę / w dół
Ponieważ nie można zsyntetyzować dźwięku wyciszonego łańcucha, należy traktować go x
jako -
.
Podczas gięcia, ponownie wypisz pełne przejście z giętego na ciąg do giętego na nierozgięty.
Drugim wejściem będzie czas, który każdy symbol na karcie reprezentuje w sekundach. Na przykład:
Do wprowadzenia:
e|---
B|---
G|---
D|---
A|---
E|---
W przypadku taktowania 0.5
, ponieważ istnieją 3
kolumny symboli (ale bez nut), wyprowadzony plik audio ma ( 3*0.5=1.5
) 1.5
sekundy ciszy.
Przykładowe zakładki
1 - The Weight (Jack White, Jimmy Page + edycja Edge)
e|----3-----3---3----2---------3--------------------|
B|----3-----3---3----3--1-1----3--------------------|
G|----0-----0---0----2--0-0----0--------------------|
D|----0-----0---2-------2-2----0--------------------|
A|----2-----0---2-------3-3----2--------------------|
E|----3-----2---x----2--x-x----3--------------------|
2 - Pachnie Nastoletnim Duchem
e|--------------|---------------|-------------|-------------|
B|--------------|---------------|-------------|-------------|
G|-----8h10-----|-8-8b----6--5--|-6--5--------|-------------|
D|-10--------6--|---------------|-------8-6-8-|-8b----6--5--|
A|--------------|---------------|-------------|-------------|
E|--------------|---------------|-------------|-------------|
3 - Star Spangled Banner
e|---0-------2-5---9-7-5-----------9-7-5-4-2-4-5------|
B|-----2---2-------------2-4-5---5---------------5-2--|
G|-------2-------------------------------------------2|
D|----------------------------------------------------|
A|----------------------------------------------------|
E|----------------------------------------------------|
źródło
Odpowiedzi:
MATLAB
To jest trochę niedokończone. Użyłem szybkiej i brudnej metody, aby dźwięk był jak najłatwiejszy. Zastosowana przeze mnie metoda utrudniła wdrożenie gięcia / wbijania (nigdy wcześniej nie słyszałem tych słów w tym kontekście).
Powiedziawszy to wszystko, ten skrypt odczyta plik tekstowy o nazwie „inputs.txt” zawierający zakładkę ascii zgodnie z wymaganiami i odtworzy utwór.
Oto link do dźwięku pierwszego wejścia testowego.
Oto link do dźwięku trzeciego wejścia testowego. (Star Spangled Banner czy Ice Cream Truck?)
Drugie wejście testowe zabrzmiało dla mnie dość źle, ale może to być spowodowane tym, że używa wielu
b
s ih
s, które skrypt ignoruje.Jak można usłyszeć, wyjście nie jest tej samej jakości co oryginał. Brzmi to tak, jakby w tle grał metronom. Myślę, że te melodie mają charakter.
źródło
Python 3
Musiałem spróbować tego.
Konwertuje to tabulator na plik midi odtwarzany przez fortepian. Nie mam pojęcia, jak zrobić zginanie struny na pianinie, więc nie może tego zrobić, ale młoty i ściągnięcia są proste.
Wygenerowałem pliki testowe w ten sposób:
$ python3 tab.py The-weight.txt 0.14
gdzie0.14
jest długość pojedynczej nuty w sekundach.Kod znajduje się również na githubie, https://github.com/Mattias1/ascii-tab , gdzie przesłałem również wyniki przykładów dostarczonych przez PO. Próbowałem też na niektórych własnych kartach. Dziwnie jest słyszeć grę na pianinie, ale nie jest źle.
Przykłady:
Dodałem kilka bezpośrednich linków, ale nie jestem pewien, jak długo one pozostają, więc zachowam również stare linki do pobierania.
I zakładka z melodii Matty'ego (moja ulubiona) poniżej:
źródło
2/3
z tych „uderzeń” są w rzeczywistości kreski.Skrypt Java
Uwaga: używa zestawu audio do tworzenia stron internetowych; To jest wyjście z ligi IE; Testowany w Google Chrome
Możesz umieścić zakładki w obszarze tekstowym. IE możesz umieścić melodię Matty'ego z posta Matty w polu tekstowym (z literami nad notatkami) i nadal będzie poprawnie parsowana.
Kliknij, aby uruchomić program
JavaScript:
Czy potrafisz zidentyfikować tę piosenkę?
źródło
| / b h p
. Dlaczego po prostu nie przeanalizować ciągu znaków, aby je zastąpić-
? To zabrzmi całkiem dobrze i działa. (I może podzielić na nowe wiersze za pomocą jednego pola wprowadzania). To sprawi, że będzie to zabawny skrypt do zabawy.Jawa
Ten program konwertuje tabulatury do 16-bitowego formatu WAV.
Po pierwsze, napisałem całą masę kodu do analizy tabulatury. Nie jestem pewien, czy parsowanie jest całkowicie poprawne, ale myślę, że jest w porządku. Ponadto może użyć większej weryfikacji danych.
Następnie stworzyłem kod do generowania dźwięku. Każdy ciąg jest generowany osobno. Program śledzi aktualną częstotliwość, amplitudę i fazę. Następnie generuje 10 nadtonów dla częstotliwości z utworzonymi amplitudami względnymi i sumuje je. Na koniec ciągi są łączone, a wynik jest znormalizowany. Rezultat jest zapisywany jako dźwięk WAV, który wybrałem ze względu na jego bardzo prosty format (bez bibliotek).
„Obsługuje” hammering (
h
) i pull (p
), ignorując je, ponieważ tak naprawdę nie miałem czasu, aby brzmiały zbyt odmiennie. Rezultat brzmi trochę jak gitara (spędziłem kilka godzin na analizie mojej gitary w Audacity).Obsługuje również gięcie (
b
), zwalnianie (r
) i przesuwanie (/
i\
, wymiennie).x
jest implementowany jako wyciszenie łańcucha.Możesz spróbować ulepszyć stałe na początku kodu. Szczególnie obniżenie
silenceRate
często prowadzi do lepszej jakości.Przykładowe wyniki
Kod
Chcę ostrzec wszystkich początkujących w Javie: nie próbuj niczego się uczyć z tego kodu, jest strasznie napisany. Ponadto został napisany szybko i w 2 sesjach i nie miał być ponownie używany, więc nie ma komentarzy. (Może dodać trochę później: P)
źródło