public class AldaExporter extends Decompiler
This class is used to export the currently loaded MIDI sequence as an ALDA source file.
Modifier and Type | Field and Description |
---|---|
private java.lang.String |
currentKeySig |
private int |
currentSliceNumber |
private Instrument |
currentSrcInstr |
private Instrument |
currentTgtInstr |
private int |
elementsInCurrentLine |
private boolean |
forceInstrChange |
static java.util.ArrayList<java.lang.String> |
instrumentNames |
private boolean |
isLineOpen |
private java.lang.Long |
lineBeginTickSrc |
private java.lang.Long |
lineBeginTickTgt |
static java.util.ArrayList<java.lang.String> |
noteNames |
static java.util.ArrayList<java.lang.Byte> |
noteOctaves |
private boolean |
prependSpace |
private java.util.TreeMap<java.lang.String,java.lang.Long> |
targetLengths |
private java.util.TreeMap<java.lang.Integer,java.lang.Long> |
targetTicksBySlice |
private static java.util.regex.Pattern |
tripletPattern |
private java.util.TreeSet<Instrument> |
usedInSlice |
ALDA, ALL_SYLLABLES_ORPHANED, BLOCK_INDENT, CHORD_NOTE_OFF_TOLERANCE, CHORD_NOTE_ON_TOLERANCE, CHORD_VELOCITY_TOLERANCE, chordCount, chords, chordsByBaseNote, commentHistory, CTRL_CHANGE_MODE, DEFAULT_ALL_SYLLABLES_ORPHANED, DEFAULT_CHORD_NOTE_OFF_TOLERANCE, DEFAULT_CHORD_NOTE_ON_TOLERANCE, DEFAULT_CHORD_VELOCITY_TOLERANCE, DEFAULT_CTRL_CHANGE_MODE, DEFAULT_DURATION_RATIO_TOLERANCE, DEFAULT_ELEMENTS_PER_LINE, DEFAULT_EXTRA_GLOBALS_STR, DEFAULT_KARAOKE_ONE_CHANNEL, DEFAULT_LENGTH_STRATEGY, DEFAULT_LENGTH_TICK_TOLERANCE, DEFAULT_MAX_BARLINE_TOL, DEFAULT_MAX_DURATION_TO_KEEP, DEFAULT_MAX_TICKS_ON_AT_480, DEFAULT_MIN_DURATION_TO_KEEP, DEFAULT_MIN_TICKS_ON_AT_480, DEFAULT_MUST_ADD_CONFIG, DEFAULT_MUST_ADD_QUALITY_SCORE, DEFAULT_MUST_ADD_STATISTICS, DEFAULT_MUST_ADD_STRATEGY_STAT, DEFAULT_MUST_ADD_TICK_COMMENTS, DEFAULT_ORPHANED_SYLLABLES, DEFAULT_SYNTAX_TYPE, DEFAULT_USE_BARLINES, DEFAULT_USE_DOTTED_NOTES, DEFAULT_USE_DOTTED_RESTS, DEFAULT_USE_KARAOKE, DEFAULT_USE_PRE_DEFINED_CHORDS, DEFAULT_USE_TRIPLETTED_NOTES, DEFAULT_USE_TRIPLETTED_RESTS, DURATION_RATIO_TOLERANCE, ELEMENTS_PER_LINE, ET_INLINE_BLK, ET_INSTR, ET_NOTES, exportResult, EXTRA_GLOBALS, format, INLINE_BLOCK, instrumentHistory, isSoftKaraoke, KARAOKE_ONE_CHANNEL, LENGTH_STRATEGY, LENGTH_TICK_TOLERANCE, LM_DOT, LM_NONE, LM_TRIPLET, lyricsChannels, lyricsSyllables, MAX_BARLINE_TOL, MAX_DURATION_TO_KEEP, MAX_SOURCE_TICKS_ON, MAX_TICKS_ON_AT_480, measureLengthHistory, MIDICA, MIN_DURATION_TO_KEEP, MIN_SOURCE_TICKS_ON, MIN_TICKS_ON_AT_480, MUST_ADD_CONFIG, MUST_ADD_QUALITY_SCORE, MUST_ADD_STATISTICS, MUST_ADD_STRATEGY_STAT, MUST_ADD_TICK_COMMENTS, NEW_LINE, noteHistory, noteLength, noteOnOff, NP_DURATION, NP_END_TICK, NP_LENGTH, NP_LYRICS, NP_MULTIPLE, NP_NOTE_NUM, NP_OFF_TICK, NP_VELOCITY, ORPHANED_SYLLABLES, output, restLength, SLICE_BEGIN_BLOCK, slices, sourceResolution, srcInstrByChannel, srcInstrByName, STAT_NOTE_DURATIONS, STAT_NOTE_MULTIPLE, STAT_NOTE_SUMMANDS, STAT_NOTE_TRIPLETS, STAT_NOTE_VELOCITIES, STAT_NOTES, STAT_REST_SKIPPED, STAT_REST_SUMMANDS, STAT_REST_TRIPLETS, STAT_RESTS, STAT_TOTAL, STRATEGY_DURATION_NEXT_PRESS, STRATEGY_DURATION_PRESS, STRATEGY_NEXT_DURATION_PRESS, STRATEGY_NEXT_PRESS, STRATEGY_PRESS, SYNTAX_COMPACT, SYNTAX_LOWLEVEL, SYNTAX_TYPE, targetResolution, tgtInstrByChannel, tgtInstrByName, USE_BARLINES, USE_DOTTED_NOTES, USE_DOTTED_RESTS, USE_KARAOKE, USE_PRE_DEFINED_CHORDS, USE_TRIPLETTED_NOTES, USE_TRIPLETTED_RESTS
Constructor and Description |
---|
AldaExporter()
Creates a new ALDA exporter.
|
Modifier and Type | Method and Description |
---|---|
private void |
createBarlineIfNeeded()
Returns a barline for the given channel, if needed.
|
private void |
createChordNotes(Slice slice,
byte channel,
long tick,
java.util.TreeMap<java.lang.String,java.util.TreeMap<java.lang.Byte,java.lang.String>> events)
Creates a chord - all notes beginning in the same tick in the same channel.
|
private void |
createCommandsFromTimeline(Slice slice,
byte channel)
Creates notes and instrument changes from a slice’s timeline.
|
private void |
createElement(java.lang.String element,
boolean mustCount)
Creates an element (note, chord or rest) to the current line, and maybe a bar line, if needed.
|
private void |
createGlobalAttributes(Slice slice)
Creates a string with global attributes for the given slice.
|
private void |
createInstrumentChange(byte channel,
long tick)
Creates one instrument line for an instrument change in the given channel and tick.
|
private void |
createLineClose()
Closes the currently open line.
|
private void |
createLineCloseIfLineIsFull()
Closes the current line, if it has enough elements.
|
private void |
createLineCloseIfPossible()
Closes the currently open line, if there is any.
|
private void |
createLineOpenIfClosed()
Opens a new line, if not yet done.
|
private void |
createMarker()
Creates a marker in the current instrument to mark the end of a slice.
|
private java.lang.String |
createNote(byte channel,
java.util.TreeMap<java.lang.Byte,java.lang.String> properties)
Creates a single note.
|
java.lang.String |
createOutput()
Creates the format-specific string to be written to the exported file.
|
protected void |
createRest(byte channel,
long ticks,
java.lang.String syllable)
Creates a rest.
|
private java.lang.String |
getKeySignature()
Calculates and returns the value for the key signature attribute.
|
private java.lang.String |
getTriplet(long base)
Calculates and returns a (rounded) triplet note length.
|
private void |
incrementTargetTicks(java.lang.String length)
Increments the target channel by the amount of ticks of the given length value.
|
void |
init()
Initializes format-specific data structures.
|
private void |
initInstrumentNames()
Initializes all possible MIDI instrument numbers with an ALDA instrument name.
|
private void |
initLength(java.util.TreeMap<java.lang.Long,java.lang.String> lengthToSymbol,
long aldaLength,
int factor,
int divisor,
boolean useTriplets,
boolean useDots)
Initializes the following note lengths for a single base length:
the unmodified base length
the tripletted note length (if requested)
the dotted note length (if requested)
|
java.util.TreeMap<java.lang.Long,java.lang.String> |
initLengths(boolean rest)
Calculates which tick length corresponds to which note or rest length.
|
private void |
initNoteNames()
Initializes all possible MIDI note numbers with an ALDA instrument and octave name.
|
addWarningRestSkipped, calculateTicks, createConfig, createQualityStats, createRestBeforeSlice, createSpacesBeforeComment, createStrategyStats, createTickDescription, createTickLineComment, export, getCommentSymbol, getFurthestInstrument, getLengthsForSum, getNoteLengthProperties, incrementStats, resetTickCommentLineLength
createFile
public static java.util.ArrayList<java.lang.String> instrumentNames
public static java.util.ArrayList<java.lang.String> noteNames
public static java.util.ArrayList<java.lang.Byte> noteOctaves
private int currentSliceNumber
private Instrument currentSrcInstr
private Instrument currentTgtInstr
private int elementsInCurrentLine
private java.lang.Long lineBeginTickSrc
private java.lang.Long lineBeginTickTgt
private boolean isLineOpen
private java.util.TreeSet<Instrument> usedInSlice
private java.lang.String currentKeySig
private boolean prependSpace
private java.util.TreeMap<java.lang.String,java.lang.Long> targetLengths
private java.util.TreeMap<java.lang.Integer,java.lang.Long> targetTicksBySlice
private boolean forceInstrChange
private static java.util.regex.Pattern tripletPattern
public void init()
Decompiler
Initializes format-specific data structures.
init
in class Decompiler
public java.lang.String createOutput()
Decompiler
Creates the format-specific string to be written to the exported file.
createOutput
in class Decompiler
private void createCommandsFromTimeline(Slice slice, byte channel)
Creates notes and instrument changes from a slice’s timeline.
Creates nothing, if the slice’s timeline doesn’t contain anything in the given channel.
Steps:
slice
- the sequence slicechannel
- MIDI channelprivate void createInstrumentChange(byte channel, long tick)
Creates one instrument line for an instrument change in the given channel and tick. If there is no instrument change event found in the MIDI sequence, the default instrument (piano) is used.
channel
- MIDI channeltick
- MIDI tickprivate void createLineClose()
Closes the currently open line.
private void createLineCloseIfPossible()
Closes the currently open line, if there is any.
private void createLineCloseIfLineIsFull()
Closes the current line, if it has enough elements.
private void createLineOpenIfClosed()
Opens a new line, if not yet done. (Creates an indention, remembers line begin ticks and so on.)
private void createGlobalAttributes(Slice slice)
Creates a string with global attributes for the given slice.
Global attributes are:
slice
- the sequence sliceprivate void createChordNotes(Slice slice, byte channel, long tick, java.util.TreeMap<java.lang.String,java.util.TreeMap<java.lang.Byte,java.lang.String>> events)
Creates a chord - all notes beginning in the same tick in the same channel.
Steps:
slice
- the sequence slicechannel
- MIDI channeltick
- MIDI tickevents
- All notes/chords with the same note-ON tick in the same channel (comes from the slice’s timeline)private java.lang.String createNote(byte channel, java.util.TreeMap<java.lang.Byte,java.lang.String> properties)
Creates a single note.
The note may be a part of a chord or a single note.
Parts of the note are:
channel
- MIDI channelproperties
- note properties (from the slice’s timeline)protected void createRest(byte channel, long ticks, java.lang.String syllable)
Decompiler
Creates a rest.
createRest
in class Decompiler
channel
- MIDI channelticks
- tick length of the rest to createsyllable
- a lyrics syllable or (in most cases): nullprivate void createElement(java.lang.String element, boolean mustCount)
Creates an element (note, chord or rest) to the current line, and maybe a bar line, if needed.
The bar line creation part is skipped if mustCount is false.
element
- the element to be addedmustCount
- true to increment the number of elements, otherwise falseprivate void createMarker()
Creates a marker in the current instrument to mark the end of a slice.
private void createBarlineIfNeeded()
Returns a barline for the given channel, if needed.
channel
- MIDI channelpublic java.util.TreeMap<java.lang.Long,java.lang.String> initLengths(boolean rest)
Decompiler
Calculates which tick length corresponds to which note or rest length. That depends on the resolution of the current MIDI sequence.
The created rest lengths should contain a few more very short lengths. This is needed because rests should be less tolerant than notes.
This enables us to use more common lengths for notes but let the exported sequence be still as close as possible to the original one.
initLengths
in class Decompiler
rest
- true to initialize REST lengths, false for NOTE lengthsprivate void initLength(java.util.TreeMap<java.lang.Long,java.lang.String> lengthToSymbol, long aldaLength, int factor, int divisor, boolean useTriplets, boolean useDots)
Initializes the following note lengths for a single base length:
lengthToSymbol
- the data structure to write the results intoaldaLength
- the base length that can be used directly in ALDA syntaxfactor
- the factor with which to multiply a quarter note in order to get the base notedivisor
- the divisor with which a quarter note must be divided in order to get the base noteuseTriplets
- true in order to initialize a tripletted lengthuseDots
- true in order to initialize a dotted lengthprivate void incrementTargetTicks(java.lang.String length)
Increments the target channel by the amount of ticks of the given length value.
length
- note length in ALDA syntaxprivate java.lang.String getTriplet(long base)
Calculates and returns a (rounded) triplet note length.
base
- the base note length to be tripletedprivate void initInstrumentNames()
Initializes all possible MIDI instrument numbers with an ALDA instrument name.
private void initNoteNames()
Initializes all possible MIDI note numbers with an ALDA instrument and octave name. Takes the current key signature into account.
private java.lang.String getKeySignature()
Calculates and returns the value for the key signature attribute.