Herausforderung
Bei gegebener Gitarrentabulatur müssen Sie das durch die Registerkarte dargestellte Lied ausgeben. Dies kann an den Lautsprechern Ihres Computers oder an einer Audiodatei (.wav, .mp3, .midi, .aiff usw.) liegen. Es wird auch einen zweiten Eingang für das Timing geben.
Die Registerkarten können über eine Datei oder direkt in STDIN eingegeben werden. Die Registerkarte wird in ASCII-Form sein .
Spec
Alle Registerkarten sind für 6 Gitarren mit sechs Saiten mit Standard-E-Stimmung: E2 (82,41 Hz), A2 (110,00 Hz), D3 (146,83 Hz), G3 (196,00 Hz), B3 (246,94 Hz), E4 (329,63 Hz).
Die einzigen Techniken (neben dem normalen Pflücken), für die Sie sorgen müssen, sind:
- Biegen (dies wird immer eine Halbtonbiegung sein)
- Hämmern auf
- Abziehen
- Hoch / runter gleiten
Da Sie den Klang einer gedämpften Saite nicht synthetisieren können, behandeln Sie sie x
als-
.
Geben Sie beim Biegen den vollständigen Übergang von ungebogen zu Saite zu gebogen zu ungebogen wieder aus.
Die zweite Eingabe ist die Zeit, die jedes Symbol auf der Registerkarte in Sekunden darstellt. Beispielsweise:
Für die Eingabe:
e|---
B|---
G|---
D|---
A|---
E|---
Bei Timing 0.5
ist 3
die ausgegebene Audiodatei ( 3*0.5=1.5
) , da es Spalten mit Symbolen (aber keine Noten) gibt.1.5
Sekunden lang still .
Beispiel-Registerkarten
1 - Das Gewicht (Jack White, Jimmy Page + The Edge Edition)
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 - Riecht nach Teen Spirit
e|--------------|---------------|-------------|-------------|
B|--------------|---------------|-------------|-------------|
G|-----8h10-----|-8-8b----6--5--|-6--5--------|-------------|
D|-10--------6--|---------------|-------8-6-8-|-8b----6--5--|
A|--------------|---------------|-------------|-------------|
E|--------------|---------------|-------------|-------------|
3 - Sterne 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|----------------------------------------------------|
quelle
Antworten:
MATLAB
Das ist irgendwie unvollendet. Ich habe eine schnelle und schmutzige Methode angewendet, um das Audio so einfach wie möglich zu machen. Die Methode, die ich benutzte, machte es schwierig, das Biegen / Hämmern durchzuführen (ich hatte diese Wörter in diesem Zusammenhang auch noch nie zuvor gehört).
Abgesehen davon liest dieses Skript eine Textdatei mit dem Namen "inputs.txt" ein, die die ASCII-Registerkarte enthält, und spielt das Lied ab.
Hier ist ein Link zum Sound des ersten Testeingangs.
Hier ist ein Link zum Sound des dritten Testeingangs. (Star Spangled Banner oder Ice Cream Truck?)
Die zweite Testeingabe klang für mich ziemlich schlecht, aber das mag daran liegen, dass sie viele
b
s undh
s verwendet, die vom Skript ignoriert werden.Wie Sie hören können, hat die Ausgabe nicht ganz die gleiche Qualität wie das Original. Es hört sich so an, als würde im Hintergrund ein Metronom spielen. Ich denke, diese Stücke haben Charakter.
quelle
Python 3
Ich musste es versuchen.
Dies wandelt einen Tab in eine Midi-Datei um, wie sie von einem Klavier gespielt wird. Ich habe keine Ahnung, wie man eine Saite an einem Klavier biegt, also kann es das nicht, aber Hammer-Ons und Pull-Offs sind unkompliziert.
Ich habe die Testdateien folgendermaßen generiert:
$ python3 tab.py The-weight.txt 0.14
Wo0.14
ist die Länge einer einzelnen Notiz in Sekunden?Der Code ist auch auf github, https://github.com/Mattias1/ascii-tab , wo ich auch das Ergebnis der vom OP bereitgestellten Beispiele hochgeladen habe. Ich habe es auch auf einigen meiner eigenen Registerkarten ausprobiert. Es ist ziemlich komisch, ein Klavier spielen zu hören, aber es ist nicht schlecht.
Beispiele:
Ich habe einige direkte Links hinzugefügt, bin mir aber nicht sicher, wie lange sie bleiben. Daher behalte ich auch die alten Download-Links.
Und der Tab von Mattys Melodie (mein Favorit) unten:
quelle
2/3
von diesen "Beats" sind in der Tat Striche.Java Script
Hinweis: Verwendet das Web Development Audio Kit. Dies ist ein Ausweg aus der IE-Liga. Getestet in Google Chrome
Sie können die Registerkarten in das Textfeld einfügen. IE Sie könnten Mattys Melodie von Mattys Post in den Textbereich stellen (mit den Buchstaben über den Notizen) und es wird immer noch korrekt analysiert.
Klicken Sie hier, um das Programm auszuführen
JavaScript:
Kannst du dieses Lied identifizieren?
quelle
| / b h p
. Warum nicht einfach ein paar Zeichenfolgen analysieren, um sie zu ersetzen-
? Das hört sich ganz ok an und es funktioniert. (Und vielleicht mit einem Eingabefeld in Zeilenumbrüche aufteilen.) Das macht es Spaß, mit diesem Skript zu spielen.Java
Dieses Programm konvertiert eine Tabulatur in ein 16-Bit-WAV-Format.
Erstens habe ich eine ganze Reihe von Tabulatur-Parsing-Code geschrieben. Ich bin nicht sicher, ob meine Analyse vollständig korrekt ist, aber ich denke, es ist in Ordnung. Es könnte auch mehr Validierung für Daten gebrauchen.
Danach habe ich den Code erstellt, um das Audio zu generieren. Jeder String wird separat generiert. Das Programm verfolgt die aktuelle Frequenz, Amplitude und Phase. Es werden dann 10 Obertöne für die Frequenz mit erfundenen relativen Amplituden erzeugt und addiert. Schließlich werden die Zeichenfolgen kombiniert und das Ergebnis wird normalisiert. Das Ergebnis wird als WAV-Audio gespeichert, das ich für sein ultra-einfaches Format ausgewählt habe (keine Bibliotheken verwendet).
Es "unterstützt" das Hämmern (
h
) und Ziehen (p
), indem es sie ignoriert, da ich wirklich keine Zeit hatte, sie zu unterschiedlich klingen zu lassen. Das Ergebnis klingt allerdings ein bisschen wie eine Gitarre (verbrachte einige Stunden damit, meine Gitarre in Audacity zu analysieren).Es unterstützt auch das Biegen (
b
), Loslassen (r
) und Gleiten (/
und\
austauschbar).x
wird als Muting des Strings implementiert.Sie können versuchen, die Konstanten am Anfang des Codes zu optimieren. Besonders das Absenken
silenceRate
führt oft zu einer besseren Qualität.Beispielergebnisse
Der Code
Ich möchte jeden Java-Anfänger warnen: Versuchen Sie nicht , etwas aus diesem Code zu lernen, er ist schrecklich geschrieben. Außerdem wurde es schnell und in 2 Sitzungen geschrieben und sollte nie wieder verwendet werden, sodass es keine Kommentare enthält. (Könnte später hinzugefügt werden: P)
quelle