Frage

In meinem Projekt möchte ich in der Lage sein zumindest informieren die Benutzer, welche saite die note, die Sie spielen müssen, ist, auf.Kann ich erhalten die Hinweis und seiner Oktav, aber wie ich entdeckt habe, dass die note und Oktave angezeigt werden können in mehreren Orten auf einer Gitarre fret board.

Also meine Frage ist:Es ist trotzdem anzeigen einer midi-note auf einer Gitarre string?

War es hilfreich?

Lösung

Hier ist der code, der die MIDI-note Wert und gibt die position an der Gitarre Griffbrett am nächsten an das Ende des Instruments.Bund zero ist ein open-string.

static class Fingering {
    int string;
    int fret;

    public String toString() {
        return "String : " + stringNames[string] + ", fret : " + fret;
    }
}

static String[] stringNames = new String[] {"Low E", "A", "D", "G", "B", "High E"}; 

    /** Array showing guitar string's relative pitches, in semi-tones, with "0" being low E */
static int[] strings = new int[]{64, 69, 74, 79, 83, 88};



public static Fingering getIdealFingering(int note) {
            if (note < strings[0])
                throw new RuntimeException("Note " + note + " is not playable on a guitar in standard tuning.");

    Fingering result = new Fingering();

    int idealString = 0;
    for (int x = 1; x < strings.length; x++) {
        if (note < strings[x])
            break;
        idealString = x; 
    }

    result.string = idealString;
    result.fret = note - strings[idealString];

    return result;
}

public static void main(String[] args) {
    System.out.println(getIdealFingering(64));  // Low E
    System.out.println(getIdealFingering(66));  // F#
    System.out.println(getIdealFingering(72));  // C on A string
    System.out.println(getIdealFingering(76));  // E on D string
    System.out.println(getIdealFingering(88));  // guitar's high e string, open
    System.out.println(getIdealFingering(100)); // high E, 12th fret
    System.out.println(getIdealFingering(103)); // high G
}

Ergebnis:

String : Low E, fret : 0
String : Low E, fret : 2
String : A, fret : 3
String : D, fret : 2
String : High E, fret : 0
String : High E, fret : 12
String : High E, fret : 15

Andere Tipps

Ja, mit der einfachen Logik, dass Sie dies tun können.Ich würde erwägen Sie die Verwendung einer HashMap von <Note, MidiNote> wo die Note der Klasse, die sowohl relative note und Oktave und hat ordentliche equals und hashcode Methoden und MidiNote ist Ihre Klasse zur Darstellung einer Midi-note.

Denken Sie an MIDI-wie definieren piano-Tasten.Codes und keys sind eins-zu-eins.Das ist anders als bei einer Gitarre oder Geige, wo der gleiche Ton, gespielt werden kann in verschiedenen Orten.

Wenn Sie möchten stellen die größere Freiheit, Sie haben eine Gitarre in einigen Datenformat, Sie werden haben zu finden, oder erfinden Sie ein anderes format.MIDI wird nicht codieren, was Sie wollen.

Es gibt jedoch einen indirekten Weg, den Sie gehen könnte, über diese, und es hat zu tun mit der Entwicklung von Heuristiken, wo spielen Sie eine note gegeben, in einem gleitenden Fenster von Noten, die kamen, bevor Sie.Ein Hinweis gegeben, kann einfacher sein, auf eine string oder eine andere je nachdem, was Sie gerade gespielt haben, und Sie können berechnen, dass in einem gegebenen Modell der hand, und wo der Finger gewesen.Auf dieser Grundlage können Sie konvertieren Sie MIDI-Gitarre in einer Weise, dass die MIDI-am einfachsten zu spielen.Wenn Sie ein Stück von Gitarren-Musik, die folgt, diese Regeln bereits, dann Kodieren Sie es im MIDI-und dann entschlüsseln Sie später.

Aber vielleicht ist Ihre Frage mehr basic.Ja, Sie können die Karte einen MIDI-Noten auf einer Gitarre.Die naive Methode ist, um eine Zuordnung der einzelnen Noten spielbar auf der Gitarre, und bei der Entscheidung zwischen gleichwertigen alternativen, durch die Auswahl der am nächsten zu der Mutter.Dies wäre eine einfache eins-zu-eins-Zuordnung würde aber nicht unbedingt die einfachste zu spielen.

Wenn Sie WIRKLICH wollen, um das richtige zu tun, Sie tun eine sorgfältige Analyse der Musik, zu entscheiden, der eine optimale Handhaltung und wo die Handposition verändern sollten, und dann würden Sie sich zuordnen von MIDI-Noten mit Bünde und Saiten basierend auf dem, was ist am einfachsten zu erreichen, auf der Grundlage der hand-position.Die optimale Lösung ist wahrscheinlich NP-vollständigen oder noch schlimmer, zu tun, würden Sie wahrscheinlich wollen Sie zu entwickeln eine Ungefähre Lösung basierend auf einigen Regeln, wie oft und wie weit können Sie ändern Handposition.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top