//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (c) 1998-1998 Microsoft Corporation // // File: score.h // //-------------------------------------------------------------------------- #ifndef __SCORE_H__ #define __SCORE_H__ /* Defines ============================================================*/ #define INUM 16 // Number of band members #define PPQN 192 // Pulses per quarter note #define PPQNx4 ( PPQN << 2 ) #define PPQN_2 ( PPQN >> 1 ) #define ROOT_MIN 0 // Scale (or chord) root min and max #define ROOT_MAX 23 // Section Flags, WPARAM of SECTION_STARTED/ENDED #define SECF_STOPPED_EARLY 0x0001 #define SECF_IS_TRANSITION 0x0002 /* Section Commands ===================================================*/ #define SCTSEC_PLAY_SECTION 2 #define SCTSEC_SET_ROOT 4 //#define SCTSEC_SET_STYLE 6 #define SCTSEC_SET_LENGTH 8 #define SCTSEC_SET_REPEATS 9 //#define SCTSEC_SET_PERSONALITY 15 #define BAND_MELODY 0 // Use BAND flags with RTC_SET_VOLUME, #define BAND_STRING 1 // RTC_SET_PAN, RTC_SET_PATCH, SCTSEC_SET_VOLUME, #define BAND_GUITAR 2 // SCTSEC_SET_PAN and SCTSEC_SET_PATCH #define BAND_PIANO 3 #define BAND_BASS 4 // These are the default SCT band members #define BAND_DRUM 5 #define BAND_ALL 50 #define BAND_NONE 51 #define SP_A 1 // Use SP flags for templates #define SP_B 2 #define SP_C 4 #define SP_D 8 #define SP_E 0x10 #define SP_F 0x20 #define SP_LETTER (SP_A | SP_B | SP_C | SP_D | SP_E | SP_F) #define SP_1 0x100 #define SP_2 0x200 #define SP_3 0x400 #define SP_4 0x800 #define SP_5 0x1000 #define SP_6 0x2000 #define SP_7 0x4000 #define SP_ROOT (SP_1 | SP_2 | SP_3 | SP_4 | SP_5 | SP_6 | SP_7) #define SP_CADENCE 0x8000 /* Band member mute flags =============================================*/ #define MUTE_MELODY 0x0001 // Use MUTE flags with sctSetMutes() #define MUTE_STRING 0x0002 #define MUTE_GUITAR 0x0004 #define MUTE_PIANO 0x0008 #define MUTE_BASS 0x0010 #define MUTE_DRUM 0x0020 #define MUTE_ALL 0xFFFF /* SCTchord bBits flags ===============================================*/ #define CHORD_INVERT 0x10 /* This chord may be inverted */ #define CHORD_FOUR 0x20 /* This should be a 4 note chord */ #define CHORD_UPPER 0x40 /* Shift upper octave down */ #define CHORD_SIMPLE 0x80 /* This is a simple chord */ #define CHORD_COUNT 0x0F /* Number of notes in chord (up to 15) */ /* MIDI status bytes ==================================================*/ #define MIDI_NOTEOFF 0x80 #define MIDI_NOTEON 0x90 #define MIDI_PTOUCH 0xA0 #define MIDI_CCHANGE 0xB0 #define MIDI_PCHANGE 0xC0 #define MIDI_MTOUCH 0xD0 #define MIDI_PBEND 0xE0 #define MIDI_SYSX 0xF0 #define MIDI_MTC 0xF1 #define MIDI_SONGPP 0xF2 #define MIDI_SONGS 0xF3 #define MIDI_EOX 0xF7 #define MIDI_CLOCK 0xF8 #define MIDI_START 0xFA #define MIDI_CONTINUE 0xFB #define MIDI_STOP 0xFC #define MIDI_SENSE 0xFE // Options for sctComposeTransitionEx #define TRANS_CHANGE 1 // Chord transitions to next section instead of resolving #define TRANS_LONG 2 // Transition lasts two measures, not one /* Structures maintained by SuperJAM! Technology Engine ==============*/ #pragma pack(1) typedef struct SCTchord FAR *LPSCTCHORD ; typedef struct SCTchord { LPSCTCHORD pNext; /* The next chord in the list. */ long lDLL1; /* Reserved for use by score.dll */ long lPattern; /* Pattern that defines chord. */ char achName[12]; /* Chord name. */ char chDLL2; /* Reserved for use by score.dll */ char chRoot; /* Root note of chord. */ char chDLL3; /* Reserved for use by score.dll */ char chFlat; /* Indicates root is flat. */ short nDLL4; /* Reserved for use by score.dll */ short nMeasure; /* Measure this chord occurs. */ char chBeat; /* Beat this chord falls on. */ BYTE bBits; /* Flags used when playing chord */ long lScalePattern; /* Scale Pattern for the chord. */ long lMelodyPattern; /* Melody Pattern for the chord. */ } SCTchord ; typedef struct SCTpersonality FAR *LPSCTPERSONALITY ; typedef struct SCTpersonality { LPSCTPERSONALITY pNext ; /* Next SCTpersonality in the list. */ char achName[20] ; /* Name of composition personality. */ char achDescription[80];/* Description of personality. */ char achUserName[20];/* Description of personality. */ LPVOID lpDLL1 ; /* Reserved for use by score.dll */ long lScalePattern ; /* Scale pattern used by personality*/ SCTchord chord[24] ; /* 24 note chord palette. */ char chDefault ; /* 0=Not default. 1=Default. */ char chDLL1 ; /* Reserved for use by score.dll */ } SCTpersonality ; typedef struct SCTstyle FAR *LPSCTSTYLE ; typedef struct SCTstyle { LPSCTSTYLE pNext ; /* Pointer to next SCTstyle. */ LPSTR lpszFileName ; /* File name of style. */ LPSTR lpszName ; /* Style name. */ LPVOID lpDLL1 ; /* Reserved for use by score.dll */ LPSCTPERSONALITY lpSCTpersonalityList ; /* Available personalities.*/ short nBeatNote ; /* Note receiving one beat. */ short nBeatsPerMeasure ; /* Beats per measure. */ short nMusicTimePerBeat ;/* Music time per beat. */ short nClicksPerMeasure ;/* Clicks per measure. */ short nMusicTimePerClick;/* Music time per click. */ short nClicksPerBeat ; /* Clicks per beat. */ short nDefaultTempo ; /* Style's default tempo. */ void* pIStyle; // pointer to interface, used by AA 2.0+ } SCTstyle ; typedef struct SCTrealtime FAR *LPSCTREALTIME ; typedef struct SCTrealtime { short nSizeofStruct ; /* sizeof(struct SCTrealtime) */ LPSCTSTYLE lpSCTstyle ; /* Style played by house band */ LPSCTPERSONALITY lpSCTpersonality ; /* Active personality */ short nTempo ; /* Current tempo */ WORD wTempoFract ; /* Current tempo fraction (0-65535) */ DWORD dwGroove ; /* Current groove */ char chRoot ; /* Root note of key */ char chFlat ; /* Indicates whether key is flat */ char chAutoChord ; /* 0=Off, 1=On */ char chAutoChordActivity ; /* Amount of chord activity */ } SCTrealtime ; typedef struct SCTsectionInfo FAR *LPSCTSECTIONINFO ; typedef struct SCTsectionInfo { short nSizeofStruct ; /* sizeof(struct SCTsectionInfo) */ char achName[16] ; /* Section name. */ LPSCTSTYLE lpSCTstyle ; /* Style played by the section. */ LPSCTPERSONALITY lpSCTpersonality ; /* Active personality. */ short nTempo ; /* Section tempo. */ WORD wTempoFract ; /* Section tempo fraction (0-65535) */ short nNbrMeasures ; /* Nbr of measures in section. */ WORD nNbrRepeats ; /* Nbr of times section repeats. */ char chRoot ; /* Root note of section key. */ char chFlat ; /* Indicates whether key is flat. */ } SCTsectionInfo ; typedef struct SCTperformance FAR *LPSCTPERFORMANCE ; typedef struct SCTsection FAR *LPSCTSECTION ; typedef struct SCTsection { LPSCTSECTION pNext ; /* Pointer to next SCTsection */ LPSTR lpszName ; /* Section name. */ LPVOID lpDLL1 ; /* Reserved for use by score.dll */ LPSCTPERFORMANCE lpSCTperf ; /* Section belongs to this perf. */ LPSCTSTYLE lpSCTstyle ; /* Style played by the section. */ LPSCTPERSONALITY lpSCTpersonality ;/* Active personality. */ short nTempo ; /* Section tempo. */ WORD wTempoFract ; /* Section tempo fraction (0-65535)*/ short nStartingMeasure ;/* Starting measure of section. */ short nNbrMeasures ; /* Nbr of measures in section. */ WORD nNbrRepeats ; /* Nbr of times section repeats. */ char chRoot ; /* Root note of section key. */ char chFlat ; /* Indicates whether key is flat */ long lStartTime ; /* Music start time of section. */ void* pISection; // pointer to interface, used by AA 2.0+ } SCTsection ; //DM typedef struct SCTmotif* LPSCTMOTIF; typedef struct SCTmotif { LPSCTMOTIF pNext; LPVOID lpDLL1; LPCSTR lpszName; short nMeasures; short nBeatsPerMeasure; short nClicksPerBeat; } SCTmotif; //DM - END typedef struct SCTperformance { LPSCTPERFORMANCE pNext ; /* Pointer to next SCTperformance.*/ // char achSongName[20] ; /* Name of song. */ LPSCTREALTIME lpSCTrealtime ; /* RealTime information. */ LPVOID lpDLL1 ; /* Reserved for use by score.dll*/ // short nRelVolume ; /* Relative volume. */ // short nRelTempo ; /* Relative tempo. */ // LPSTR lpszSongTitle; // LPSTR lpszSongAuthor; // LPSTR lpszSongCopyright; } SCTperformance ; typedef struct SCTdata FAR *LPSCTDATA ; typedef struct SCTdata { LPSCTSTYLE lpSCTstyleList ; /* List of opened styles. */ LPSCTPERFORMANCE lpSCTperformanceList ; /* List of performances. */ //DM LPSCTMOTIF lpSCTmotif; // pointer to list of motifs // DM - END } SCTdata ; typedef struct SCTcommand FAR *LPSCTCOMMAND ; typedef struct SCTcommand { LPSCTCOMMAND pNext ; /* The next command in the list. */ long lDLL1 ; /* Reserved for use by score.dll. */ short nMeasure ; /* Measure this command occurs. */ DWORD dwCommand ; /* Command type. */ DWORD dwChord ; /* Signpost chord. */ } SCTcommand ; typedef struct SCTtemplate FAR *LPSCTTEMPLATE ; typedef struct SCTtemplate { LPSCTTEMPLATE pNext ; /* The next template in the list. */ char achName[20] ; /* Template name. */ char achType[20] ; /* Template type. */ short nMeasures ; LPSCTCOMMAND lpSCTcommandList ; /* Template commands. */ } SCTtemplate ; #pragma pack() /* Function prototypes ============================================*/ LPSCTDATA WINAPI sctRegisterApplication(HWND,HWND,HINSTANCE,LPCSTR,LPDWORD,short); void WINAPI sctUnregisterApplication(LPSCTDATA); LPSCTSECTIONINFO WINAPI sctAllocSectionInfo(LPSCTPERFORMANCE,short); void WINAPI sctFreeSectionInfo(LPSCTDATA,LPSCTSECTIONINFO); DWORD WINAPI sctTimeToMeasure(LPSCTDATA,LPSCTSTYLE,DWORD); DWORD WINAPI sctTimeToMils(LPSCTDATA,DWORD,short,unsigned short); LPSCTCHORD WINAPI sctAllocChord(LPSCTDATA); void WINAPI sctFreeChord(LPSCTDATA,LPSCTCHORD); void WINAPI sctFreeChordList(LPSCTDATA,LPSCTCHORD); LPSCTCHORD WINAPI sctGetChordListCopy(LPSCTDATA,LPSCTSECTION); BOOL WINAPI sctSetChordList(LPSCTDATA,LPSCTSECTION,LPSCTCHORD); void WINAPI sctFreeCommandList(LPSCTDATA,LPSCTCOMMAND); LPSCTCOMMAND WINAPI sctGetCommandListCopy(LPSCTDATA,LPSCTSECTION); BOOL WINAPI sctSetCommandList(LPSCTDATA,LPSCTSECTION,LPSCTCOMMAND); LPSCTTEMPLATE WINAPI sctAllocTemplate(LPSCTDATA); void WINAPI sctFreeTemplate(LPSCTDATA,LPSCTTEMPLATE); BOOL WINAPI sctCreateTemplateSignPosts(LPSCTDATA,LPSCTTEMPLATE); BOOL WINAPI sctCreateTemplateEmbellishments(LPSCTDATA,LPSCTTEMPLATE,short); BOOL WINAPI sctBuildSection(LPSCTDATA,LPSCTSECTION,LPSCTPERSONALITY,short,short,short,DWORD); BOOL WINAPI sctComposeSection(LPSCTDATA,LPSCTSECTION,LPSCTTEMPLATE,LPSCTPERSONALITY,short); BOOL WINAPI sctComposeTransition(LPSCTDATA,LPSCTSECTION,LPSCTPERSONALITY,LPSCTCHORD,short,DWORD); LPSCTSECTION WINAPI sctComposeTransitionEx( LPSCTDATA, LPSCTSECTION, LPSCTSECTION, short, DWORD, DWORD ); LPSCTSECTION WINAPI sctCreateSection(LPSCTPERFORMANCE,LPSCTSECTIONINFO); void WINAPI sctDeleteSection(LPSCTDATA,LPSCTSECTION, BOOL fStop = TRUE); LPSCTSECTION WINAPI sctDuplicateSection(LPSCTDATA,LPSCTSECTION); BOOL WINAPI sctQueueSectionEx( LPSCTDATA lpSCTdata, LPSCTSECTION lpSCTsection, DWORD dwStartTime ); BOOL WINAPI sctSectionCommand(LPSCTDATA,LPSCTSECTION,WORD,WORD,LONG,LONG); BOOL WINAPI sctStopCurSectionASAP(LPSCTDATA); BOOL WINAPI sctStopCurSection(LPSCTDATA,short); LPSCTPERFORMANCE WINAPI sctCreatePerformance(LPSCTDATA,LPVOID); //DM BOOL WINAPI sctFreeMotif( LPSCTDATA, LPSCTMOTIF ); BOOL WINAPI sctSwitchPersonality( LPSCTDATA, LPSCTSECTION, LPSCTPERSONALITY, BOOL ); BOOL WINAPI sctSetQueuePrepareTime( WORD wPrepareTime ); //DM - END #endif // __SCORE_H__