ref: cca5d94e30aec54182ae28141b2ca1915de9e278
dir: /volcasample_pattern.h/
#ifndef KORG_VOLCASAMPLE_PATTERN_H__
#define KORG_VOLCASAMPLE_PATTERN_H__
#include "korg_syro_type.h"
/*--------------------------------*/
/*--------- Pattern Data ---------*/
/*--------------------------------*/
#define VOLCASAMPLE_NUM_OF_PART 10
#define VOLCASAMPLE_NUM_OF_STEP 16
/*----- define bit of FuncMemoryPart ------*/
#define VOLCASAMPLE_FUNC_BIT_NOTION 0
#define VOLCASAMPLE_FUNC_BIT_LOOP 1
#define VOLCASAMPLE_FUNC_BIT_REVERB 2
#define VOLCASAMPLE_FUNC_BIT_REVERSE 3
#define VOLCASAMPLE_FUNC_BIT_MUTE 4
#define VOLCASAMPLE_FUNC_MOTION (1 << VOLCASAMPLE_FUNC_BIT_NOTION)
#define VOLCASAMPLE_FUNC_LOOP (1 << VOLCASAMPLE_FUNC_BIT_LOOP)
#define VOLCASAMPLE_FUNC_REVERB (1 << VOLCASAMPLE_FUNC_BIT_REVERB)
#define VOLCASAMPLE_FUNC_REVERSE (1 << VOLCASAMPLE_FUNC_BIT_REVERSE)
#define VOLCASAMPLE_FUNC_MUTE (1 << VOLCASAMPLE_FUNC_BIT_MUTE)
/*---- Knob Parameter ID -----*/
#define VOLCASAMPLE_PARAM_LEVEL 0
#define VOLCASAMPLE_PARAM_PAN 1
#define VOLCASAMPLE_PARAM_SPEED 2
#define VOLCASAMPLE_PARAM_AMPEG_ATTACK 3
#define VOLCASAMPLE_PARAM_AMPEG_DECAY 4
#define VOLCASAMPLE_PARAM_PITCHEG_INT 5
#define VOLCASAMPLE_PARAM_PITCHEG_ATTACK 6
#define VOLCASAMPLE_PARAM_PITCHEG_DECAY 7
#define VOLCASAMPLE_PARAM_START_POINT 8
#define VOLCASAMPLE_PARAM_LENGTH 9
#define VOLCASAMPLE_PARAM_HICUT 10
#define VOLCASAMPLE_NUM_OF_PARAM 11
/*---- Motion Parameter ID -----*/
#define VOLCASAMPLE_MOTION_LEVEL_0 0
#define VOLCASAMPLE_MOTION_LEVEL_1 1
#define VOLCASAMPLE_MOTION_PAN_0 2
#define VOLCASAMPLE_MOTION_PAN_1 3
#define VOLCASAMPLE_MOTION_SPEED_0 4
#define VOLCASAMPLE_MOTION_SPEED_1 5
#define VOLCASAMPLE_MOTION_AMPEG_ATTACK 6
#define VOLCASAMPLE_MOTION_AMPEG_DECAY 7
#define VOLCASAMPLE_MOTION_PITCHEG_INT 8
#define VOLCASAMPLE_MOTION_PITCHEG_ATTACK 9
#define VOLCASAMPLE_MOTION_PITCHEG_DECAY 10
#define VOLCASAMPLE_MOTION_START_POINT 11
#define VOLCASAMPLE_MOTION_LENGTH 12
#define VOLCASAMPLE_MOTION_HICUT 13
#define VOLCASAMPLE_NUM_OF_MOTION 14
#define VOLCASAMPLE_PATTERN_HEADER 0x54535450 // 'PTST'
#define VOLCASAMPLE_PATTERN_FOOTER 0x44455450 // 'PTED'
#define VOLCASAMPLE_PATTERN_DEVCODE 0x33b8
/////////////////////////////////////////////
// !! notice !!
//
// *Those structures must not be padded by a compiler.
// The declaration for forbidding it may be necessity.
// (for example, like #pragma pack(1) )
//
// *Uint16_t and uint32_t are must be little endian.
//
/*----- part data struct ------*/
typedef struct {
uint16_t SampleNum; // Sample num, 0~99
uint16_t StepOn; // Step on/off (b0~15 = STEP1~16)
uint16_t Accent; // Accent on/off (b0~15 = STEP 1~16, not supported)
uint16_t Reserved; // Reserved
uint8_t Level; // Part level 0~127, reccomend to set 127(not supported)
uint8_t Param[VOLCASAMPLE_NUM_OF_PARAM];
uint8_t FuncMemoryPart; // setting (refer VOLCASAMPLE_FUNC_xxxx)
uint8_t Padding1[11];
uint8_t Motion[VOLCASAMPLE_NUM_OF_MOTION][VOLCASAMPLE_NUM_OF_STEP];
} VolcaSample_Part_Data;
/*----- pattern data struct ------*/
typedef struct {
//----- +0x00 -----
uint32_t Header;
uint16_t DevCode;
uint8_t Reserved[2];
uint16_t ActiveStep; // Active step on/off (b0~15 = STEP 1~16)
uint8_t Padding1[0x16];
//----- +0x20 - +0xA1F ------
VolcaSample_Part_Data Part[VOLCASAMPLE_NUM_OF_PART];
//----- +0xA20 - +0xA3F ------
uint8_t Padding2[0x1c];
uint32_t Footer;
} VolcaSample_Pattern_Data;
#ifdef __cplusplus
extern "C"
{
#endif
void VolcaSample_Pattern_Init(VolcaSample_Pattern_Data *pattern_data);
#ifdef __cplusplus
}
#endif
#endif // #ifndef KORG_VOLCASAMPLE_PATTERN_H__