p igmon
/
uGen4x
PCM Digital Synthesizer
synthesizer.h
- Committer:
- p_igmon
- Date:
- 2016-09-02
- Revision:
- 0:ad6637c36dc7
File content as of revision 0:ad6637c36dc7:
#ifndef SYNTHESIZER_H #define SYNTHESIZER_H typedef signed long S32; typedef signed short S16; typedef signed char S8; typedef unsigned long U32; typedef unsigned short U16; typedef unsigned char U8; #include "mbed.h" #include "cmsis.h" #include "stm32f401xe.h" #include "stm32f4xx.h" #include "stm32f4xx_hal.h" #include "stm32f4xx_hal_dma_ex.h" #include "stm32f4xx_hal_dma.h" #include "stm32f4xx_hal_i2s.h" #include "stm32f4xx_hal_flash.h" #include "stm32f4xx_hal_conf.h" #include "stm32f4xx_it.h" #include "error.h" #include "pinmap.h" #include "PinNames.h" #include "gpio_irq_api.h" #include "LCD.h" #include "reverve_tap.h" #include "from_save.h" #include "lcd_sw.h" #include "releasetime_table.h" #include "lfo_table.h" #include "dcf_table.h" #define FWVERSION " Ver 2.1" #define DIST //#define REVERVE16BIT //#define DCF #define INTERPO2 #define VOICEMAX 8 #define PRGGENMAX 4 //#define VOICEMAX 12 //#define PRGGENMAX 2 //#define GENMAX (PRGGENMAX*VOICEMAX) #define GENMAX 24 #define I2S2 SPI2 #define DMA_BUFFERSIZE 2048 #define PARAM_BUFSIZE 256 #define GEN_IDLE 0 #define GEN_NOTEON 1 #define GEN_NOTEOFF 2 #define GEN_PORON 3 #define GEN_POROFF 4 /* for main Request*/ //#define REQUEST_NONE 0 //#define REQUEST_BUFFERFULL 1 //#define REQUEST_PARAM 2 //#define REQUEST_MIDI 4 /* EG Function */ #define EG_IDLE 0 #define EG_ATTACK 1 #define EG_DECAY 2 #define EG_SUSTAIN 3 #define EG_RELEASE 4 #define EG_BEFOREATTACK 5 extern S16 limit; typedef struct { U8 sw;// 0,1 U8 wave_num;// 1 - 100 S8 notebias;// -128 - +127 U8 pan;// 0-31 S16 detune;// -512 - +511 U16 volume;// 0-65535 U16 attacktime;// U16 decaytime;// U8 sustainlevel;// U16 releasetime;// 0-21 U8 lfo1type; U8 lfo1speed; U16 lfo1depth; U16 lfo1delaytime;// 0-3000 U8 lfo2type; U8 lfo2speed; U16 lfo2depth; U16 lfo2delaytime;// 0-3000 }GENERATOR ; typedef struct { U8 status;// BUFFULL,PARAM,MIDI U8 eg_status;// IDLE,ATTCK,DECAY,SUSTAIN,RELEASE U8 *startadr; U8 *p1; U8 *p2; U8 *samplecountp1p2; U8 *cycle; U32 df;// 4e28f S32 dpf;// 4e28f portament data 110812 U8 notenum;// 0-127 volatile U32 voltemp;// 32bit volatile U32 voltemp1;// 32bit volatile U32 voltemp2;// 32bit volatile U32 voltempL;// 32bit volatile U32 voltempR;// 32bit U8 velocity;// 0-127 U32 x;// 指数部20ビット 小数部12ビット U32 xx;// 指数部20ビット 小数部12ビット S16 lfo1value; U16 lfo1count; U16 lfo1delaycount;// 3000-0 S16 lfo2value; U16 lfo2count; U16 lfo2delaycount;// 3000-0 U16 zerocount; }GENERATOR_TEMP ; typedef struct { U8 name[16]; U32 p1; U32 p2; U32 cycle; }GEN4_CHUNK; typedef struct { char menu[20]; void (*function)(void); int min; int max; }MenuListDef; typedef struct { int enable; S32 signal[6];// sample,x1,x2,y1,y2,result S32 *dcf_param;// pointer of dcf_table(b0a0 ,b1a0,... a2,a0) GENERATOR *gen;// gen1_adr,gen2_adr...gen4_adr GENERATOR_TEMP *gen_temp;// gen1_adr,gen2_adr...gen4_adr }STR_VOICE; typedef struct{ char name[20]; uint32_t startaddr;// Wave data Start Address uint32_t p1;// Loop Point1 uint32_t p2;// Loop Point2 uint32_t cycle;// Loop Cycle :if (cycle == 0) cycle = P2-p1 ; }WaveDef; typedef struct{ char name[20]; uint8_t dcf_freq; uint8_t dcf_q; uint8_t dcf_freqsence; uint8_t dcf_qsence; }PresetVoiceDef; typedef enum { DMA_Idle = 0, DMA_HalfComplete, DMA_FullComplete, }BUFFER_StateTypeDef; typedef enum { KEY_WAIT_ON = 0, KEY_AFTER_ON, KEY_WAIT_OFF, KEY_AFTER_OFF, KEY_AUTO_PRESS, KEY_AFTER_AUTO_PRESS, KEY_GEN_WAVE1, KEY_GEN_WAVE2, KEY_FIRST_WAIT }KeyState_TypeDef; void MX_GPIO_Init(void); void uGen4_device_init(void); void init_dmabuffer(void); void i2s_dma_init(void); void uGen4_init(void); void lcd_print_title(void); void gen_function(int *); S32 satAdd32(S32 val1 ,S32 val2); S16 satAdd16(S16 val1 ,S16 val2); S16 dcf64(S32 *param ,S32 *signal); char *val2str4(int value); void presetvoice(void); void param(void); void midichannel(void); void mastertune(void); void dcfcontrol(void); void gen_sw (void); void gen_wave (void); void gen_notebias(void); void gen_outlevel(void); void gen_detune(void); void gen_attacktime(void); void gen_decaytime(void); void gen_sustainlevel(void); void gen_relesetime(void); void gen_lfo1_wavetype(void); void gen_lfo1_speed (void); void gen_lfo1_depth(void); void gen_lfo2_speed (void); void gen_lfo2_depth(void); void gen_lfo1_delaytime(void); void gen_lfo2_delaytime(void); void gen_limit(void); void Erase_Sector2(void); HAL_StatusTypeDef WriteBlockFrom(uint32_t *src_address ,uint32_t *dst_address,uint32_t length); int strcmp(U8 *a ,U8 *b); void init_voice(void); void init_sgen(void); void noteon(U8 notenum ,U8 velocity); void noteoff(U8 notenum ,U8 velocity); void pgmchg(U8 number); void change_endian16(U16 *data); void wave_generate(void); void gen_attack(GENERATOR *gena,GENERATOR_TEMP *gena_temp); void notenum2df(GENERATOR *gen ,GENERATOR_TEMP *gen_temp); void envelope_work(void); void midi_work(void); void param_work(void); void init_midi(void); void init_param(void); int get_wave_addr (WaveDef *wave); void load2from(void); void lcd_print(char *str); void lcd_print1(char *str); void lcd_print2(char *str); void anykeyon(U8 inkey); U8 gen_function_type_byte(GENERATOR *gena_value); void test_loop(void); void test_loop2(void); extern WaveDef Wave[]; extern PresetVoiceDef PresetVoice[]; extern GENERATOR sgen[]; #endif