Musizieren

Du willst Dich auf einem neuen Instrument probieren, suchst nach Musiknoten für ein Musikstück oder kannst Dich nicht für ein bestimmtes Gitarrenmodell entscheiden? Dann spielt genau in dieser Kategorie die Musik.
8.674 Beiträge

Ask Me Anything: Blickwechsel

Du stellst die Fragen, ein außergewöhnlicher Nutzer antwortet! Begegne mit Deinen Fragen anderen Menschen hautnah und persönlich.
Javascript: Gitarren-Akkorde für verschiedene Tonarten setzen?

Hallo, Wissende,

habe Liedtexte als HTML-Dokumente, die Gitarren-Akkorde enthalten.

Problem: Wenn das Lied in einer anderen Tonart gespielt wird, stimmen die Akkorde nicht. Deshalb möchte ich die Tonart als URL-Parameter z.B. tonart=G angeben. Javascript (JS) soll die Akkorde setzen.

Im HTML-Code notiere ich also, wo die Tonika, Dominante und Subdominante gesetzt werden soll :

Und habe das JS-Array

akk_const = [
 ["(To)", "(Do)", "(Su)" ]
,["C",   "G",   "F" ] // tonart=C
,["D",   "A",   "G" ] // tonart=D
,["F",   "C",   "B" ] // tonart=F
,["G",   "D",   "C" ] // tonart=G
];

Also je nach Tonart muss der String (TO) durch C, D, F, G ersetzt werden.

Umständlich geht das so:

// (To)nika auf C setzen
  document.querySelector( "body" ).innerHTML = document.querySelector( "body" ).innerHTML.replace(/\(To\)/g, "<b><b>C</b></b>");
// (Do)minante auf G setzen
  document.querySelector( "body" ).innerHTML = document.querySelector( "body" ).innerHTML.replace(/\(Do\)/g, "<b><b>G</b></b>");

Aber ich möchte das in einer Schleife machen. Kann mir bitte jemand die JS.Kommandos aufschreiben? So weit bin ich:

window.addEventListener('DOMContentLoaded', function () {
 // URL Parameter tonart vorhanden?
 let akk_params = new URLSearchParams(document.location.search);
 let akk_tonart = akk_params.get("tonart");
 if ( akk_tonart ) {
   alert( akk_tonart );
   // hier Tonarten einsetzen
 }
});

Danke für Antworten

Bild zum Beitrag

Ask Me Anything: Themenspecials

Im gutefrage Themenspecial beantworten Verbände, Organisationen und Personen des öffentlichen Lebens Deine Fragen zu aktuellen Themen.