Files
tab-downloader/songsterr/types.ts

164 lines
7.2 KiB
TypeScript

/**
* Raw response format received when initiating a file download from Songsterr.
*/
export interface SongsterrDownloadResponse {
file: number[]; // Binary array representation of the downloaded file bytes
fileName: string; // The original filename served by the server
contentType: string; // The MIME type of the file
}
/**
* Basic metadata subset returned by Songsterr search endpoints.
*/
export interface SongsterrPartialMetadata {
title: string; // Title of the song
songId: number; // Global identifier for the song
artistId: number; // Global identifier for the artist
artist: string; // Artist name
byLinkUrl?: string; // Optional absolute link URL
}
/**
* Represents metadata of an individual instrument track in Songsterr's state payload.
*/
export interface SongsterrStateMetaCurrentTrack {
partId: number; // Part ID used to fetch the track-specific note payload JSON
instrumentId: number; // Instrument ID used for MIDI playback assignment
title?: string; // Custom track title (alternative)
name?: string; // Custom track name
tuning?: number[]; // Tuning offsets in semitones starting from highest pitch
isDrums?: boolean; // Flag indicating if this is a percussion track
}
/**
* The top-level metadata container for the current song state scraped from Songsterr's HTML script block.
*/
export interface SongsterrStateMetaCurrent {
songId: number; // Song ID
revisionId: number; // Active musical notation revision ID
image: string; // Storage hash/image suffix identifier on CloudFront CDNs
title: string; // Title of the song
artist: string; // Name of the artist
tracks: SongsterrStateMetaCurrentTrack[]; // Collection of tracks associated with this revision
}
/**
* A tempo variation marker inside the song's automation timeline.
*/
export interface SongsterrRevisionAutomationTempoPoint {
measure: number; // 0-indexed measure where the tempo change occurs
position: number; // Metric position within the measure
bpm: number; // Beats Per Minute (tempo target)
type: number; // Time division duration type index
}
/**
* Collection of performance automations (such as tempo changes) present in a revision.
*/
export interface SongsterrRevisionAutomations {
tempo?: SongsterrRevisionAutomationTempoPoint[];
}
/**
* Coordinate specifying a single point on a pitch bend diagram.
*/
export interface SongsterrRevisionBendPoint {
position: number; // Horizontal offset on bend diagram (0 to 60)
tone: number; // Pitch offset value (100 = 1 full tone, 50 = 1 semitone)
}
/**
* Pitch bend configuration payload for a note.
*/
export interface SongsterrRevisionBendPayload {
tone: number; // Max bend tone value
points: SongsterrRevisionBendPoint[]; // Set of coordinate points defining the bend curve
}
/**
* Playback modification, articulation, or fret details of an individual note.
*/
export interface SongsterrRevisionNotePayload {
fret?: number; // Fret number on the fretboard (0 = open string)
string?: number; // 0-indexed string index (0 is typically the highest pitch string)
tie?: boolean; // Identifies if this note is tied to the previous note
slide?: string; // String code representing slide type ('shift', 'legato', 'below', etc.)
rest?: boolean; // Identifies if the note is a rest
dead?: boolean; // Identifies dead (muted) notes
ghost?: boolean; // Identifies ghost/bracketed notes
hp?: boolean; // Legato hammer-on or pull-off flag
staccato?: boolean; // Articulation indicating a shortened note duration
accentuated?: boolean;// Flag indicating heavier picking velocity
vibrato?: boolean; // Subtle pitch vibrato
wideVibrato?: boolean;// Intense pitch vibrato
harmonic?: string; // Harmonic type ('natural', 'artificial', 'pinch', etc.)
harmonicFret?: number;// Fret location where the harmonic is initiated
bend?: SongsterrRevisionBendPayload; // Pitch bend details
}
/**
* Musical beat payload grouping multiple notes together played at the same instant.
*/
export interface SongsterrRevisionBeatPayload {
notes?: SongsterrRevisionNotePayload[]; // Collection of notes active in this beat
type?: number; // Base beat duration category
duration?: [number, number]; // Fractional duration tuple [numerator, denominator]
dots?: number; // Count of dots modifying the beat's length
text?: string | { text: string; width?: number }; // Custom lyric/annotation text on the staff
velocity?: string; // MIDI dynamics code ('p', 'mp', 'f', etc.)
rest?: boolean; // Flag identifying if this beat is a pure rest
palmMute?: boolean; // Flag identifying if palm-muting is active for this beat
vibrato?: boolean; // Beat-level vibrato
wideVibrato?: boolean;// Beat-level wide vibrato
vibratoWithTremoloBar?: string; // Tremolo bar vibrato depth code
pickStroke?: string; // Picking direction ('up', 'down')
tuplet?: number; // Tuplet factor (e.g., 3 for triplets, 5 for quintuplets)
tupletStart?: boolean;// Flag identifying the start of a tuplet grouping
tupletStop?: boolean; // Flag identifying the end of a tuplet grouping
}
/**
* Represents a vocal line/independent voice track containing sequential beats within a measure.
*/
export interface SongsterrRevisionVoicePayload {
beats?: SongsterrRevisionBeatPayload[]; // Beats sequenced inside this voice
rest?: boolean; // Flag identifying if the voice is entirely silent
}
/**
* Represents a single measure (bar) in a track containing multiple voices.
*/
export interface SongsterrRevisionMeasurePayload {
voices?: SongsterrRevisionVoicePayload[]; // Independent musical voices in this bar
signature?: [number, number]; // Time signature tuple [numerator, denominator] (e.g. [4, 4])
marker?: string | { text: string; width?: number }; // Section marker name (e.g. "Verse", "Chorus")
repeatStart?: boolean;// Identifies if a repeat section opens at this measure
repeatCount?: number; // Count of repeat iterations
alternateEnding?: number; // Alternate ending bracket index/value
rest?: boolean; // Identifies if the entire measure is silent
}
/**
* Complete musical score revision details for a single track.
*/
export interface SongsterrRevisionTrackPayload {
name?: string; // Track name
instrumentId?: number;// Instrument playback configuration ID
tuning?: number[]; // Note offsets for each string
strings?: number; // Number of strings on the instrument
measures: SongsterrRevisionMeasurePayload[]; // Complete sequence of measures (bars)
automations?: SongsterrRevisionAutomations; // Set of playback automations
songId?: number; // Reference song identifier
revisionId?: number; // Reference revision identifier
partId?: number; // Reference part identifier
}
/**
* Warning payload generated during the parsing/conversion process.
*/
export interface ConversionWarning {
code: string; // Unique warning code identifier (e.g., 'duration_approximated')
message: string; // Human-readable warning description
location?: string; // Code location indicating where the issue was hit (e.g., 'track:1|measure:12')
}