arduino_midi_player/Midi/music-box-nv32-master/WaveTableSynthesizer/Player.h
2025-03-24 14:30:56 +08:00

103 lines
2.1 KiB
C

#ifndef __ScoreDecoder_H__
#define __ScoreDecoder_H__
#include "SynthCore.h"
#define pSynthesizer 0
#define pScoreDecoder (pSynthesizer+SynthesizerSize)
#define pCurrentTick 0
#define pLastScoreTick (pCurrentTick+4)
#define pStatus (pLastScoreTick+4)
#define constSTATUS_DECODING 2
#ifndef __ASSEMBLER__
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
enum DECODER_STATUS
{
STATUS_STOP = 0,
STATUS_REDAY_TO_DECODE = 1,
STATUS_DECODING = constSTATUS_DECODING
};
enum SCHEDULER_MODE
{
MODE_ORDER_PLAY = 0,
};
enum SCHEDULER_STATUS
{
SCHEDULER_READY_TO_SWITCH = 0,
SCHEDULER_SWITCHING,
SCHEDULER_SCORE_PREV,
SCHEDULER_SCORE_NEXT,
SCHEDULER_STOP,
};
typedef struct _ScoreListHeader
{
char identifer[4];
uint32_t scoreCount;
uint32_t firstAddr;
}ScoreListHeader;
typedef struct _ScoreDecoder
{
uint32_t currentTick;
uint32_t lastScoreTick;
uint32_t status;
uint8_t *scorePointer;
} ScoreDecoder;
typedef struct _PlayScheduler
{
uint32_t schedulerMode;
int32_t currentScoreIndex;
uint32_t maxScoreNum;
ScoreListHeader* scoreListHeader;
uint32_t status;
uint32_t switchDirect;
} PlayScheduler;
typedef struct _Player
{
Synthesizer synthesizer;
ScoreDecoder decoder;
PlayScheduler scheduler;
} Player;
extern ScoreListHeader ScoreDataList;
extern Player *GlobalPlayerPtr;
extern void PlayerInit(Player *player);
extern void Player32kProc(Player *player);
extern void PlayerProcess(Player *player);
extern void ScoreDecodeProcess(Player *player);
extern void PlayScore(Player* player, uint8_t *score);
extern void StopDecode(Player *player);
extern void StartPlayScheduler(Player* player);
extern void StopPlayScheduler(Player *player);
extern void PlaySchedulerNextScore(Player *player);
extern void PlaySchedulerPreviousScore(Player *player);
extern void SchedulerSetIntialRandomSeed(Player *player,uint8_t randomSeed);
extern void UpdateTick(ScoreDecoder *decoder);
extern void UpdateNextScoreTick(ScoreDecoder *decoder);
#ifdef __cplusplus
} //end extern "C"
#endif
#else
.extern GlobalPlayerPtr;
#endif
#endif