windows-nt/Source/XPSP1/NT/multimedia/directx/dmusic/dmstyle/iostru.h
2020-09-26 16:20:57 +08:00

246 lines
8.3 KiB
C

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (c) 1998-1998 Microsoft Corporation
//
// File: iostru.h
//
//--------------------------------------------------------------------------
// ioStructs.h
//
#ifndef __IOSTRUCTS_H__
#define __IOSTRUCTS_H__
#pragma pack(2)
#define FOURCC_BAND_FORM mmioFOURCC('A','A','B','N')
#define FOURCC_CLICK_LIST mmioFOURCC('A','A','C','L')
#define FOURCC_KEYBOARD_FORM mmioFOURCC('S','J','K','B')
#define FOURCC_PATTERN_FORM mmioFOURCC('A','A','P','T')
#define FOURCC_SECTION_FORM mmioFOURCC('A','A','S','E')
#define FOURCC_SONG_FORM mmioFOURCC('A','A','S','O')
#define FOURCC_STYLE_FORM mmioFOURCC('A','A','S','Y')
#define FOURCC_AUTHOR mmioFOURCC('a','u','t','h')
#define FOURCC_BAND mmioFOURCC('b','a','n','d')
#define FOURCC_CHORD mmioFOURCC('c','h','r','d')
#define FOURCC_CLICK mmioFOURCC('c','l','i','k')
#define FOURCC_COMMAND mmioFOURCC('c','m','n','d')
#define FOURCC_COPYRIGHT mmioFOURCC('c','p','y','r')
#define FOURCC_CURVE mmioFOURCC('c','u','r','v')
#define FOURCC_KEYBOARD mmioFOURCC('k','y','b','d')
#define FOURCC_LYRIC mmioFOURCC('l','y','r','c')
#define FOURCC_MUTE mmioFOURCC('m','u','t','e')
#define FOURCC_NOTE mmioFOURCC('n','o','t','e')
#define FOURCC_PATTERN mmioFOURCC('p','a','t','t')
#define FOURCC_PERSONALITYNAME mmioFOURCC('p','r','n','m')
#define FOURCC_PERSONALITYREF mmioFOURCC('p','r','e','f')
#define FOURCC_PHRASE mmioFOURCC('p','h','r','s')
#define FOURCC_PPQN mmioFOURCC('p','p','q','n')
#define FOURCC_SECTION mmioFOURCC('s','e','c','n')
#define FOURCC_SECTIONUI mmioFOURCC('s','c','u','i')
#define FOURCC_STYLE mmioFOURCC('s','t','y','l')
#define FOURCC_STYLEINFO mmioFOURCC('i','n','f','o')
#define FOURCC_STYLEREF mmioFOURCC('s','r','e','f')
#define FOURCC_TITLE mmioFOURCC('t','i','t','l')
typedef struct ioNoteEvent
{
long lTime; // When this event occurs.
BYTE bStatus; // MIDI status.
BYTE bNote; // Note value.
BYTE bVelocity; // Note velocity.
BYTE bVoiceID; // Band member who will play note
WORD wDuration; // Lead line note duration. (Song)
BYTE bEventType; // Type of event
} ioNoteEvent;
typedef struct ioNote
{
BYTE bEventType; // Type of event
BYTE bVoiceID; // Instrument identifier.
short nTime; // Time from center of beat.
WORD wVariation; // 16 variation bits.
BYTE bScaleValue; // Position in scale.
BYTE bBits; // Various bits.
BYTE bValue; // Note value.
BYTE bVelocity; // Note velocity.
WORD nMusicValue; // Description of note in chord and key.
short nDuration; // Duration
BYTE bTimeRange; // Range to randomize time.
BYTE bDurRange; // Range to randomize duration.
BYTE bVelRange; // Range to randomize velocity.
BYTE bPlayMode;
} ioNote;
typedef struct ioCurveEvent
{
long lTime;
WORD wVariation;
BYTE bVoiceID;
BYTE bVelocity;
BYTE bEventType;
} ioCurveEvent;
typedef struct ioCurve
{
BYTE bEventType;
BYTE bVoiceID;
short nTime;
WORD wVariation;
BYTE bCCData;
} ioCurve;
typedef struct ioSubCurve
{
BYTE bCurveType; // defines the shape of the curve
char fFlipped; // flaggs defining the flipped state: not, vertical, or horizontal
short nMinTime; // left lower corner of bounding box.
short nMinValue; // also used by the ECT_INSTANT curve type.
short nMaxTime; // right upper corner of bounding box.
short nMaxValue;
} ioSubCurve;
typedef struct ioMute
{
long lTime; // Time in clocks.
WORD wMuteBits; // Which instruments to mute.
WORD wLock; // Lock flag
} ioMute;
typedef struct ioCommand
{
long lTime; // Time, in clocks.
DWORD dwCommand; // Command type.
} ioCommand;
typedef struct ioChord
{
long lChordPattern; // pattern that defines chord
long lScalePattern; // scale pattern for the chord
long lInvertPattern; // inversion pattern
BYTE bRoot; // root note of chord
BYTE bReserved; // expansion room
WORD wCFlags; // bit flags
long lReserved; // expansion room
} ioChord;
enum
{
CSF_KEYDOWN = 1, // key currently held down in sjam kybd
CSF_INSCALE = 2, // member of scale
CSF_FLAT = 4, // display with flat
CSF_SIMPLE = 8, // simple chord, display at top of sjam list
};
typedef struct ioChordSelection
{
wchar_t wstrName[16]; // text for display
BYTE fCSFlags; // ChordSelection flags
BYTE bBeat; // beat this falls on
WORD wMeasure; // measure this falls on
ioChord aChord[4]; // array of chords: levels
BYTE bClick; // click this falls on
} ioChordSelection;
#define KEY_FLAT 0x80
typedef struct ioSect
{
long lTime; // Time this section starts.
wchar_t wstrName[16]; // Each section has a name.
WORD wTempo; // Tempo.
WORD wRepeats; // Number of repeats.
WORD wMeasureLength; // Length, in measures.
WORD wClocksPerMeasure; // Length of each measure.
WORD wClocksPerBeat; // Length of each beat.
WORD wTempoFract; // Tempo fraction. (0-65536) (Score only)
DWORD dwFlags; // Currently not used in SuperJAM!
char chKey; // key sig. High bit is flat bit, the rest is root.
char chPad[3];
GUID guidStyle;
GUID guidPersonality;
wchar_t wstrCategory[16];
} ioSection;
typedef struct ioBand
{
wchar_t wstrName[20]; // Band name
BYTE abPatch[16];
BYTE abVolume[16];
BYTE abPan[16];
signed char achOctave[16];
char fDefault; // This band is the style's default band
char chPad;
WORD awDLSBank[16];
BYTE abDLSPatch[16];
GUID guidCollection;
// wchar_t wstrCollection[16];
char szCollection[32]; // this only needs to be single-wide chars
} ioBand;
typedef struct ioLyric
{
long lTime; // Time, in clocks
} ioLyric;
typedef struct ioPhrase
{
long lTime;
BYTE bID; // which phrase it is. Index starting at 0.
} ioPhrase;
typedef struct ioClick
{
short lTime; // Index into grid.
} ioClick;
typedef struct ioPattern
{
long lTime; // Time this starts.
DWORD dwLength; // Pattern length in clocks.
DWORD fFlags; // Various flags.
WORD wClocksPerClick; // Size of each click.
WORD wBeat; // What note gets the beat.
WORD wClocksPerBeat; // Size of each beat.
WORD wMeasures; // Number of measures.
wchar_t wstrName[16]; // Name of pattern.
DWORD dwKeyPattern; // Key for defining in.
DWORD dwChordPattern; // Defining chord.
BYTE abInvertUpper[16]; // Inversion upper limit.
BYTE abInvertLower[16]; // Inversion upper limit.
WORD wInvert; // Activate inversion flags.
WORD awVarFlags[16][16]; // Var flags for all musicians.
WORD wAutoInvert; // Automatically set inversion limits
BYTE bRoot; // Root for defining.
char achChordChoice[16];
} ioPattern;
typedef struct ioStyle
{
wchar_t wstrName[16]; // Each style has a name.
WORD wBPM; // Beats per measure.
WORD wBeat; // Beat note.
WORD wClocksPerClick; // Clocks per click in patterns.
WORD wClocksPerBeat; // Clocks per beat.
WORD wClocksPerMeasure; // Clocks per measure.
WORD wTempo; // Tempo.
WORD wTempoFract;
GUID guid;
wchar_t wstrCategory[16];
} ioStyle;
typedef struct ioPersonalityRef
{
wchar_t wstrName[20]; // Internal name stored in personality
char fDefault; // 1=Default personality
char achPad[3];
GUID guid;
} ioPersonalityRef;
#pragma pack()
#endif// __IOSTRUCTS_H__