Overall Structure (from powertabdocument.cpp) Score guitarScore Score bassScore loop NUM_DOCUMENT_FONT_SETTINGS times (Constant 3){ FontSetting fontSetting[i] } wxInt32 m_tablatureStaffLineSpacing; ///< Amount of space used between lines on the tablature staff wxUint32 m_fadeIn; ///< Amount of fade in at the start of the song (in MIDI units - see generalmidi.h) wxUint32 m_fadeOut; ///< Amount of fade out at the end of the song (in MIDI units - see generalmidi.h) ////////////////////////////////////////////////////////////////////////////////////// Score GuitarArray m_guitarArray; ///< Guitars used by the score ChordDiagramArray m_chordDiagramArray; ///< Chord diagrams used in the score FloatingTextArray m_floatingTextArray; ///< Floating text used in the score GuitarInArray m_guitarInArray; ///< Guitar Ins used in the score TempoMarkerArray m_tempoMarkerArray; ///< Tempo Markers used in the score DynamicArray m_dynamicArray; ///< Dynamic markers used in the score AlternateEndingArray m_alternateEndingArray; ///< Alternate endings used in the score SystemArray m_systemArray; ///< Systems used in the score Guitar wxByte m_number; ///< Unique number used to identify the guitar (zero-based) wxString m_description; ///< Description of the guitar wxByte m_preset; ///< MIDI preset to use during playback wxByte m_initialVolume; ///< Initial MIDI channel volume level for the guitar wxByte m_pan; ///< Channel pan setting for the guitar wxByte m_reverb; ///< Amount of reverb effect used by the guitar wxByte m_chorus; ///< Amount of chorus effect used by the guitar wxByte m_tremolo; ///< Amount of tremolo effect used by the guitar wxByte m_phaser; ///< Amount of phaser effect used by the guitar wxByte m_capo; ///< Capo placement (0 - no capo) Tuning m_tuning; ///< Guitar tuning Tuning wxString m_name; ///< Name (or description) of the tuning wxByte m_data; ///< bit 7 = Music notation offset sign, bits 6 to 1 = Music notation offset value, bit 0 = display sharps or flats wxByte stringCount wxByteArray m_noteArray; ///< Array of bytes representing the MIDI notes of the tuning, ordered from high string to low string ChordDiagram ChordName m_chordName; ///< Chord name that appears above the chord diagram wxByte m_topFret; ///< Fret represented at the top of the chord diagram wxByte count wxByteArray m_fretNumberArray; ///< List of fret number offsets ChordName enum keys { C = (wxByte)0x00, CSharp = (wxByte)0x01, D = (wxByte)0x02, EFlat = (wxByte)0x03, E = (wxByte)0x04, F = (wxByte)0x05, FSharp = (wxByte)0x06, G = (wxByte)0x07, AFlat = (wxByte)0x08, A = (wxByte)0x09, BFlat = (wxByte)0x0a, B = (wxByte)0x0b }; // Key variations (homonyms) enum keyVariations { variationDown = (wxByte)0x00, ///< B#, Bx, Cx, D#, Dx, E#, Ex, Fx, G#, Gx, A#, Ax variationDefault = (wxByte)0x01, ///< C, C#, D, Eb, E, F, F#, G, Ab, A, Bb, B variationUp = (wxByte)0x02 ///< Dbb, Db, Ebb, Fbb, Fb, Gbb, Gb, Abb, , Bbb, Cbb, Cb }; enum keyFlags { tonicKeyMask = (wxWord)0xf00, ///< Mask used to retrieve the tonic key tonicKeyVariationMask = (wxWord)0x3000, ///< Mask used to retrieve the tonic key variation tonicKeyAndVariationMask = (wxWord)0x3f00, ///< Mask used to retrieve the tonic key and variation bassNoteKeyMask = (wxWord)0xf, ///< Mask used to retrieve the bass note key bassNoteKeyVariationMask = (wxWord)0x30, ///< Mask used to retrieve the bass note key variation bassNoteKeyAndVariationMask = (wxWord)0x3f ///< Mask used to retrieve the bass note key and variation }; enum formulaFlags { noChord = (wxByte)0x10, ///< No Chord symbol brackets = (wxByte)0x20, ///< Places brackets around the chord name bassNoteSharps = (wxByte)0x40, ///< Bass note uses sharps vs flats (used for compatibility only) tonicSharps = (wxByte)0x80, ///< Tonic uses sharps vs flats (used for compatibility only) formulaFlagsMask = (wxByte)0xf0, ///< Mask used to retrieve all formula flags formulaMask = (wxByte)0x0f ///< Mask used to retrieve the formula }; enum formula { major = (wxByte)0x00, minor = (wxByte)0x01, augmented = (wxByte)0x02, diminished = (wxByte)0x03, powerChord = (wxByte)0x04, major6th = (wxByte)0x05, minor6th = (wxByte)0x06, dominant7th = (wxByte)0x07, major7th = (wxByte)0x08, minor7th = (wxByte)0x09, augmented7th = (wxByte)0x0a, diminished7th = (wxByte)0x0b, minorMajor7th = (wxByte)0x0c, minor7thFlatted5th = (wxByte)0x0d }; enum formulaModifications { extended9th = (wxWord)0x01, extended11th = (wxWord)0x02, extended13th = (wxWord)0x04, added2nd = (wxWord)0x08, added4th = (wxWord)0x10, added6th = (wxWord)0x20, added9th = (wxWord)0x40, added11th = (wxWord)0x80, flatted5th = (wxWord)0x100, raised5th = (wxWord)0x200, flatted9th = (wxWord)0x400, raised9th = (wxWord)0x800, raised11th = (wxWord)0x1000, flatted13th = (wxWord)0x2000, suspended2nd = (wxWord)0x4000, suspended4th = (wxWord)0x8000 }; enum extraFlags { fretPositionNotUsed = (wxByte)0xff, ///< Value to indicate the fret position is not used fretPositionMask = (wxByte)0x1f, ///< Mask used to retrieve the fret position typeNotUsed = (wxByte)0xff, ///< Value to indicate the type is not used typeMask = (wxByte)0xe0 ///< Mask used to retrieve the type }; wxWord m_key; ///< Chord key and bass note (hiword = tonic, loword = bass note; bits 5-6 = variation, bottom 4 bits = key) wxByte m_formula; ///< Core formula + flags (see formula and formulaFlags enums for values) wxWord m_formulaModifications; ///< Stores the formula modifications (see formulaModifications enum for values) wxByte m_extra; ///< Stores the type and fret position data (top 3 bits = type, bottom 5 bits = position) FloatingText enum flags { alignLeft = (wxByte)0x01, ///< Text aligned left alignCenter = (wxByte)0x02, ///< Text aligned center alignRight = (wxByte)0x04, ///< Text aligned right alignMask = (wxByte)0x07, ///< Mask used to extract alignment value border = (wxByte)0x08 ///< Text surrounded by border }; wxString m_text; ///< Text to be output wxRect m_rect; ///< Bounding rectangle for the text wxByte m_flags; ///< Flags representing alignment and borders (see flags below) FontSetting m_fontSetting; ///< Font setting (format) to use when drawing the text FontSetting enum weightConstants { weightDontCare = 0, weightThin = 100, weightExtraLight = 200, weightUltraLight = 200, weightLight = 300, weightNormal = 400, weightRegular = 400, weightMedium = 500, weightSemiBold = 600, weightDemiBold = 600, weightBold = 700, weightExtraBold = 800, weightUltraBold = 800, weightBlack = 900, weightHeavy = 900 }; wxString m_faceName; ///< Face name of the font; i.e. Arial, Times New Roman, etc. wxInt32 m_pointSize; ///< Height of the font, in points wxInt32 m_weight; ///< Font weight (see enum for values) wxByte m_italic; ///< Determines whether or not the font uses italics wxByte m_underline; ///< Determines whether or not the font is underlined wxByte m_strikeOut; ///< Determines whether or not the font is struck out wxColor m_color; ///< Color of the font GuitarIn wxWord m_system; ///< Zero-based index of the system where the guitar in is anchored wxByte m_staff; ///< Zero-based index of the staff within the system where the guitar in is anchored wxByte m_position; ///< Zero-based index of the position within the system where the guitar in is anchored wxWord m_data; ///< Bit map representing the guitar number of the active guitars (bit 1 = guitar 0, bit 2 = guitar 1, etc.) ///< High byte = staff guitars, low byte = rhythm slash guitars TempoMarker SystemSymbol wxString m_description; SystemSymbol wxWord m_system; ///< Zero-based index of the system the symbol is anchored wxByte m_position; ///< Zero-based index of the position within the system where the symbol is anchored wxUint32 m_data; ///< Data used by the symbol (different for each symbol) Dynamic enum volumeLevels { notSet = (wxByte)0xff, fff = (wxByte)104, ff = (wxByte)91, f = (wxByte)78, mf = (wxByte)65, mp = (wxByte)52, p = (wxByte)39, pp = (wxByte)26, ppp = (wxByte)13, off = (wxByte)0 }; wxWord m_system; ///< Zero-based index of the system where the dynamic is anchored wxByte m_staff; ///< Zero-based index of the staff within the system where the dynamic is anchored wxByte m_position; ///< Zero-based index of the position within the system where the dynamic is anchored wxWord m_data; ///< Volume level (see volumeLevels enum for values; top byte = staff volume, bottom byte = dynamic volume) AlternateEnding SystemSymbol SEE ABOVE System wxRect m_rect; ///< Bounding rect for the system wxByte endBar wxByte m_positionSpacing; ///< Spacing between each position in the system wxByte m_rhythmSlashSpacingAbove; ///< Spacing above the rhythm slashes wxByte m_rhythmSlashSpacingBelow; ///< Spacing below the rhythm slashes wxByte m_extraSpacing; ///< Extra spacing used within the system (for rehearsal signs + tempo markers) Barline m_startBar; ///< Barline at the start of the system DirectionArray m_directionArray; ///< List of directions used within the system ChordTextArray m_chordTextArray; ///< List of chord text items used within the system RhythmSlashArray m_rhythmSlashArray; ///< List of rhythm slashes used within the system StaffArray m_staffArray; ///< List of staves used within the system BarlineArray m_barlineArray; ///< List of barlines (not including start and end bars) used within the system Barline wxByte m_position; ///< Zero-based index of the position within the system where the barline is anchored wxByte m_data; ///< Top 3 bits = type, bottom 5 = repeat number KeySignature m_keySignature; ///< Key signature TimeSignature m_timeSignature; ///< Time signature RehearsalSign m_rehearsalSign; ///< Rehearsal sign KeySignature enum flags { keyAccidentalsMask = (wxByte)0x0f, ///< Bit mask used to retrieve the key accidentals value show = (wxByte)0x10, ///< Key signature is shown cancellation = (wxByte)0x20, ///< Key signature is a cancellation keyTypeMask = (wxByte)0x40 ///< Bit mask used to retrieve the key type value }; enum keyTypes { majorKey = (wxByte)0, ///< Key signature is a major key type (i.e. C major) minorKey = (wxByte)1 ///< Key signature is a minor key type (i.e. A minor) }; enum keyAccidentals { noAccidentals = (wxByte)0, ///< Key signature uses no accidentals oneSharp = (wxByte)1, ///< Key signature uses 1 sharp twoSharps = (wxByte)2, ///< Key signature uses 2 sharps threeSharps = (wxByte)3, ///< Key signature uses 3 sharps fourSharps = (wxByte)4, ///< Key signature uses 4 sharps fiveSharps = (wxByte)5, ///< Key signature uses 5 sharps sixSharps = (wxByte)6, ///< Key signature uses 6 sharps sevenSharps = (wxByte)7, ///< Key signature uses 7 sharps oneFlat = (wxByte)8, ///< Key signature uses 1 flat twoFlats = (wxByte)9, ///< Key signature uses 2 flats threeFlats = (wxByte)10, ///< Key signature uses 3 flats fourFlats = (wxByte)11, ///< Key signature uses 4 flats fiveFlats = (wxByte)12, ///< Key signature uses 5 flats sixFlats = (wxByte)13, ///< Key signature uses 6 flats sevenFlats = (wxByte)14 ///< Key signature uses 7 flats }; wxByte m_data; ///< Stores all data required by the key signature (see the flags enum for the meaning of the individual bits) TimeSignature enum flags { meterMask = (wxUint32)0xff000000, ///< Bit mask used to retrieve the meter beatsPerMeasureMask = (wxUint32)0xf8000000, ///< Bit mask used to retrieve the beats per measure value beatAmountMask = (wxUint32)0x07000000, ///< Bit mask used to retrieve the beat amount value beamingPatternMask = (wxUint32)0xfffff, ///< Bit mask used to retrieve the beaming pattern beamingPatternBeat1Mask = (wxUint32)0xf8000, ///< Bit mask used to retrieve beat 1 of the beaming pattern beamingPatternBeat2Mask = (wxUint32)0x7c00, ///< Bit mask used to retrieve beat 2 of the beaming pattern beamingPatternBeat3Mask = (wxUint32)0x3e0, ///< Bit mask used to retrieve beat 3 of the beaming pattern beamingPatternBeat4Mask = (wxUint32)0x1f, ///< Bit mask used to retrieve beat 4 of the beaming pattern show = (wxUint32)0x100000, ///< Show the time signature brackets = (wxUint32)0x200000, ///< Place brackets around the time signature commonTime = (wxUint32)0x400000, ///< Use common time symbol cutTime = (wxUint32)0x800000 ///< Use cut time symbol }; enum textFlags { textBeatsPerMeasure = 0, ///< Numerator text textBeatAmount = 1, ///< Denominator text textFull = 2 ///< Full fractional text 4/4 }; wxUint32 m_data; ///< Stores the meter, beaming pattern and any flags (see flags enum for bit breakdown) wxByte m_pulses; ///< Number of pulses in a measure RehearsalSign wxInt8 m_letter; ///< The letter used to uniquely identify the rehearsal sign (i.e. A, B, F, etc. - must be a capital letter) wxString m_description; ///< A description that indicates the passage the rehearsal sign is marking (i.e. Chorus, Intro, etc.) Direction wxByte m_position; ///< Zero-based index of the position within the system where the direction is anchored wxByte symbolCount for (i=0; i