MidiQuantizer

midi

## Class MidiQuantizer

- java.lang.Object
- - midi.MidiQuantizer

-     public class MidiQuantizer
      extends java.lang.Object

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private static double` | `BEATLENGTH`
    `private int` | `denominator`
    `private static int` | `DURATION`
    `private java.util.ArrayList<java.lang.Integer>` | `Instruments`
    `private java.lang.String` | `key`
    `private double` | `longestPhrase`
    `private static int` | `NOTE`
    `private int` | `numerator`
    `private java.util.ArrayList<java.util.ArrayList<NoteData>>` | `onSets`
    `private static int` | `ONSETS`
    `private java.util.ArrayList<java.lang.Integer>` | `PartsPhrases`
    `private static int` | `PAUSE`
    `private static int` | `PITCH`
    `private int` | `ppqn`
    `private static int` | `QUANTIZEDDURATION`
    `private java.util.ArrayList<java.util.ArrayList<Beat>>` | `scoreInBeats`
    `private double` | `tempo`
    `private javax.swing.JTextPane` | `textPane`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MidiQuantizer()` Konstruktor
    `MidiQuantizer(javax.swing.JTextPane textPane)` Kontruktor

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `getDenominator()` liefert den Denominator des Scores
    `java.lang.String` | `getKey()` liefert die Tonart des Scores
    `private int` | `getMaxBeatCount()` liefert die Anzahl der maximalen Beats einer Phrase
    `private int` | `getMaxBeatNoteCount(int beat)` liefert die Anzahl der meisten Noten aller Phrasen im aktuellen Takt
    `private double[]` | `getNoteDurationsForKeyFinding()` liefert ein Array mit den summierten Notenlaengen jeder Note (C-B)
    `private double` | `getNoteQuantizedDuration(double duration)` gibt die quantisierte Notendauer zurueck 4.0 ...
    `private void` | `getNotQuantizedNoteDurations()` only for debug purpose
    `int` | `getNumerator()` liefert den Numerator des Scores
    `java.util.ArrayList<java.util.ArrayList<Beat>>` | `getQuantizedScoreInBeats(jm.music.data.Score scr)` berechnet die Daten fuer die Markings/Mappings
    `private void` | `out(java.lang.String s)` Kurzform fuer System.out.println
    `private void` | `printArrayList(int marker)` gibt die gewuenschten Daten der Noten aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde
    `private void` | `printBeatCountPerPhrase()` gibt die Anzahl der Takte pro Phrase aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde
    `private void` | `printDataInBeats(int marker)` gibt die gewuenschten Daten der Noten getrennt in Takte aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde
    `private void` | `printNotesInBeats()` gibt alle Noten in Takten getrennt aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde
    `private void` | `printNotesInBeatsAlternate()` gibt alle Noten gemapped auf einzelne Zeichen und getrennt in Takte aus.
    `private void` | `setKey()` bestimmt die Tonart des Scores Schaetzung mit Hilfe des Krumhansl-Schmuckler-Algorithmus
    `private void` | `setLongestPhrase(jm.music.data.Score scr)` setzt die Laenge der laengsten Phrase
    `private void` | `setQuantizedNoteDurations()` berechnet die quantisierten Notendauern und unterteilt die Noten in Takte 0.125 ... zweiundreissigstel 0.25 ... sechtzehntel 0.5 ... achtel 1.0 ... viertel 2.0 ... halbe 4.0 ... ganze
    `private void` | `setSameBeatCount()` haengt an Phrasen, die weniger Takte haben als die Phrase mit den maximalen Takten weitere Takte mit Pausen an, um in jeder Phrase die gleiche Anzahl an Takten zu gewaehrleisten
    `private void` | `setStartTimes(jm.music.data.Score scr)` berechnet die Startzeit jeder Note des uebergebenen Scores und fuegt eine Pause am Anfang und Ende jeder Phrase ein, um alle Phrasen auf die gleiche Laenge zu bringen
    `private Beat` | `splitNoteInBeats(java.util.ArrayList<Beat> alb, Beat b, NoteData nd, int Part, int Phrase)` teilt lange Noten bzw.
    `private void` | `writeToTextPane(java.lang.String s)` wenn ein JTextPane gesetzt wurde wird der uebergebene String in der TextPane angehaengt

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### onSets

          private java.util.ArrayList<java.util.ArrayList<NoteData>> onSets

    - #### scoreInBeats

          private java.util.ArrayList<java.util.ArrayList<Beat>> scoreInBeats

    - #### PartsPhrases

          private java.util.ArrayList<java.lang.Integer> PartsPhrases

    - #### Instruments

          private java.util.ArrayList<java.lang.Integer> Instruments

    - #### ppqn

          private int ppqn

    - #### tempo

          private double tempo

    - #### numerator

          private int numerator

    - #### denominator

          private int denominator

    - #### BEATLENGTH

          private static double BEATLENGTH

    - #### PAUSE

          private static int PAUSE

    - #### ONSETS

          private static int ONSETS

    - #### DURATION

          private static int DURATION

    - #### PITCH

          private static int PITCH

    - #### NOTE

          private static int NOTE

    - #### QUANTIZEDDURATION

          private static int QUANTIZEDDURATION

    - #### longestPhrase

          private double longestPhrase

    - #### textPane

          private javax.swing.JTextPane textPane

    - #### key

          private java.lang.String key

  - ### Constructor Detail

    - #### MidiQuantizer

          public MidiQuantizer()

      Konstruktor

    - #### MidiQuantizer

          public MidiQuantizer(javax.swing.JTextPane textPane)

      Kontruktor
      Parameters:
        `textPane` - TextPane fuer Log-Ausgaben

  - ### Method Detail

    - #### getQuantizedScoreInBeats

          public java.util.ArrayList<java.util.ArrayList<Beat>> getQuantizedScoreInBeats(jm.music.data.Score scr)

      berechnet die Daten fuer die Markings/Mappings
      Parameters:
        `scr` - Score, der bearbeitet wird (MIDI-File)

    - #### getNumerator

          public int getNumerator()

      liefert den Numerator des Scores
      Returns:
        Numerator

    - #### getDenominator

          public int getDenominator()

      liefert den Denominator des Scores
      Returns:
        Denominator

    - #### getKey

          public java.lang.String getKey()

      liefert die Tonart des Scores
      Returns:
        die Tonart

    - #### setKey

          private void setKey()

      bestimmt die Tonart des Scores Schaetzung mit Hilfe des Krumhansl-Schmuckler-Algorithmus

    - #### getNoteDurationsForKeyFinding

          private double[] getNoteDurationsForKeyFinding()

      liefert ein Array mit den summierten Notenlaengen jeder Note (C-B)
      Returns:
        Array mit summierter Laenge pro Note

    - #### setLongestPhrase

          private void setLongestPhrase(jm.music.data.Score scr)

      setzt die Laenge der laengsten Phrase
      Parameters:
        `scr` - Score bzw. MIDI-File

    - #### setStartTimes

          private void setStartTimes(jm.music.data.Score scr)

      berechnet die Startzeit jeder Note des uebergebenen Scores und fuegt eine Pause am Anfang und Ende jeder Phrase ein, um alle Phrasen auf die gleiche Laenge zu bringen
      Parameters:
        `scr` - Score

    - #### getMaxBeatCount

          private int getMaxBeatCount()

      liefert die Anzahl der maximalen Beats einer Phrase
      Returns:
        Anzahl der Beats, die jede Phrase haben sollte

    - #### setSameBeatCount

          private void setSameBeatCount()

      haengt an Phrasen, die weniger Takte haben als die Phrase mit den maximalen Takten weitere Takte mit Pausen an, um in jeder Phrase die gleiche Anzahl an Takten zu gewaehrleisten

    - #### getNotQuantizedNoteDurations

          private void getNotQuantizedNoteDurations()

      only for debug purpose

    - #### setQuantizedNoteDurations

          private void setQuantizedNoteDurations()

      berechnet die quantisierten Notendauern und unterteilt die Noten in Takte 0.125 ... zweiundreissigstel 0.25 ... sechtzehntel 0.5 ... achtel 1.0 ... viertel 2.0 ... halbe 4.0 ... ganze

    - #### splitNoteInBeats

          private Beat splitNoteInBeats(java.util.ArrayList<Beat> alb,
                              Beat b,
                              NoteData nd,
                              int Part,
                              int Phrase)

      teilt lange Noten bzw. Pausen in eigene Takte auf und gibt die Restdauer zurueck
      Parameters:
        `b` - aktueller Takt
        `nd` - Note
        `Part` - der aktuelle Part
        `Phrase` - die aktuelle Phrase
      Returns:
        neuer Takt oder aktueller Takt mit Restdauer der Note

    - #### getNoteQuantizedDuration

          private double getNoteQuantizedDuration(double duration)

      gibt die quantisierte Notendauer zurueck 4.0 ... Ganze 2.0 ... Halbe 1.0 ... Viertel 0.5 ... Achtel 0.25 ... Sechtzehntel 0.125 ... Zweiundreissigstel
      Parameters:
        `duration` - Dauer der Note
      Returns:
        quantisierte Notendauer

    - #### out

          private void out(java.lang.String s)

      Kurzform fuer System.out.println
      Parameters:
        `s` - Zeichenkette

    - #### writeToTextPane

          private void writeToTextPane(java.lang.String s)

      wenn ein JTextPane gesetzt wurde wird der uebergebene String in der TextPane angehaengt
      Parameters:
        `s` - die Zeichenkette

    - #### printNotesInBeats

          private void printNotesInBeats()

      gibt alle Noten in Takten getrennt aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde

    - #### printNotesInBeatsAlternate

          private void printNotesInBeatsAlternate()

      gibt alle Noten gemapped auf einzelne Zeichen und getrennt in Takte aus. Die Laenge eines Taktes wird zur besseren Lesbarkeit an den Takt mit den meisten Noten angepasst schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde 4.0 = G = Ganze 2.0 = H = Halbe 1.0 = V = Viertel 0.5 = A = Achtel 0.25 = S = Sechtzehntel 0.125 = Z = Zweiundreissigstel

    - #### getMaxBeatNoteCount

          private int getMaxBeatNoteCount(int beat)

      liefert die Anzahl der meisten Noten aller Phrasen im aktuellen Takt
      Parameters:
        `beat` - Index des Beats in der ArrayList
      Returns:
        maximale Anzahl an Noten

    - #### printArrayList

          private void printArrayList(int marker)

      gibt die gewuenschten Daten der Noten aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde
      Parameters:
        `marker` - gibt an, welche Daten ausgegeben werden sollen 0 ... Starttime 1 ... MarkingOne 2 ... markingTwo 3 ... markingThree 4 ... markinFour 5 ... Duration 6 ... Pitch (int) 7 ... Note (Pitch as String) 8 ... MappingOne 9 ... MappingTwo 10 ... MappingThree 11 ... MappingFour

    - #### printDataInBeats

          private void printDataInBeats(int marker)

      gibt die gewuenschten Daten der Noten getrennt in Takte aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde
      Parameters:
        `marker` - gibt an, welche Daten ausgegeben werden sollen 0 ... Starttime 1 ... MarkingOne 2 ... MarkingTwo 3 ... MarkingThree 4 ... MarkinFour 5 ... Duration 6 ... Pitch (int) 7 ... Note (Pitch as String) 8 ... MappingOne 9 ... MappingTwo 10 ... MappingThree 11 ... MappingFour 12 ... Quantized Duration

    - #### printBeatCountPerPhrase

          private void printBeatCountPerPhrase()

      gibt die Anzahl der Takte pro Phrase aus schreibt die Daten in die Console (Debug) bzw. in einen JTextPane, falls dieser gesetzt wurde