1 /*---------------------------------------------------------------------------* 2 Project: MIDI Sequencer application for AX synthesizer 3 File: seq.h 4 5 Copyright (C)1998-2006 Nintendo All Rights Reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Log: seq.h,v $ 14 Revision 1.2 2006/01/31 06:34:11 aka 15 Changed arguments of SEQAddSequence(). 16 17 Revision 1.1.1.1 2005/05/12 02:41:07 yasuh-to 18 Imported from dolphin tree. 19 20 4 02/08/21 6:33p Akagi 21 Set #pragma warn_padding off around the SEQTRACK{} definition. 22 23 3 8/16/01 12:27p Billyjack 24 added zeroBuffer offset to API 25 26 2 5/11/01 4:17p Billyjack 27 fixed problem with songs ending and set state to SEQ_STATE_RUN 28 29 1 5/09/01 1:28p Billyjack 30 created 31 32 $NoKeywords: $ 33 *---------------------------------------------------------------------------*/ 34 #ifndef __SEQ_H__ 35 #define __SEQ_H__ 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #include <revolution/syn.h> 42 43 #define SEQ_MAX_TRACKS 64 44 45 /*---------------------------------------------------------------------------* 46 callback interface 47 *---------------------------------------------------------------------------*/ 48 typedef void (*SEQCALLBACK)(void *track, u8 controller); 49 50 #ifdef __MWERKS__ 51 #pragma warn_padding off 52 #endif 53 54 typedef struct _SEQTRACK 55 { 56 void *sequence; // pointer to parent 57 u8 *start; // pointer to start of track 58 u8 *end; // pointer to end of track 59 u8 *current; // pointer to current read position 60 u8 status; // running status 61 f32 beatsPerSec; // beats per sec 62 u32 defaultTicksPerFrame; // ticks per audio frame 63 u32 ticksPerFrame; // ticks per audio frame 64 u32 delay; // ticks to delay for next event 65 u32 state; // state of track 66 67 } SEQTRACK; 68 69 #ifdef __MWERKS__ 70 #pragma warn_padding reset 71 #endif 72 73 typedef struct _SEQSEQUENCE 74 { 75 void *next; // next sequence 76 u32 state; // stop, run, run looped, pause 77 u16 nTracks; // number of sequencer tracks 78 s16 timeFormat; // MIDI file time format 79 u32 tracksRunning; // number of tracks still running 80 u32 end; // flag end of sequence 81 SYNSYNTH synth; // synth used for this sequence 82 SEQCALLBACK callback[128]; // controller event callbacks 83 SEQTRACK track[SEQ_MAX_TRACKS]; // sequencer tracks 84 85 } SEQSEQUENCE; 86 87 #define SEQ_STATE_STOP 0 88 #define SEQ_STATE_RUN 1 89 #define SEQ_STATE_RUNLOOPED 2 90 #define SEQ_STATE_PAUSE 3 91 92 #define SEQ_ALL_TRACKS 0xFFFFFFFF 93 94 /*---------------------------------------------------------------------------* 95 function prototypes 96 *---------------------------------------------------------------------------*/ 97 void SEQInit (void); 98 void SEQQuit (void); 99 void SEQRunAudioFrame (void); 100 101 void SEQAddSequence( 102 SEQSEQUENCE *sequence, // user allocated SEQSEQUENCE 103 u8 *midiStream, // pointer to MIDI stream 104 u8 *wavetable, // pointer to wave table 105 u8 *samples, // pointer to samples 106 u8 *zerobuffer, // pointer to zero buffer 107 u32 priorityVoiceAlloc, // priority for allocating notes 108 u32 priorityNoteOn, // priority for notes that are on 109 u32 priorityNoteRelease // priority for notes in release stage 110 ); 111 112 void SEQRemoveSequence (SEQSEQUENCE *sequence); 113 114 void SEQRegisterControllerCallback( 115 SEQSEQUENCE *sequence, // user initialized SEQSEQUENCE 116 u8 controller, // MIDI controller 117 SEQCALLBACK callback // callback function 118 ); 119 120 void SEQSetState (SEQSEQUENCE *sequence, u32 state); 121 u32 SEQGetState (SEQSEQUENCE *sequence); 122 void SEQSetTempo (SEQSEQUENCE *sequence, u32 track, f32 tempo); 123 f32 SEQGetTempo (SEQSEQUENCE *sequence, u32 track); 124 void SEQSetVolume (SEQSEQUENCE *sequence, s32 dB); 125 s32 SEQGetVolume (SEQSEQUENCE *sequence); 126 127 128 #ifdef __cplusplus 129 } 130 #endif 131 132 #endif // __SEQ_H__ 133