Guitar Effector using "mbed application board".

Dependencies:   C12832 mbed

Guitar Effector using "mbed application board".

/media/uploads/vaifreak/dscn0187.jpg

/media/uploads/vaifreak/schematic_00.jpg

/media/uploads/vaifreak/schematic_01.jpg

/media/uploads/vaifreak/schematic_02.jpg

Committer:
vaifreak
Date:
Tue Sep 01 10:04:14 2015 +0000
Revision:
1:bfbfd6fede05
Child:
2:25adc1277b3e
implement, delay unit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vaifreak 1:bfbfd6fede05 1 //=============================================================================
vaifreak 1:bfbfd6fede05 2 //
vaifreak 1:bfbfd6fede05 3 //=============================================================================
vaifreak 1:bfbfd6fede05 4 #pragma once
vaifreak 1:bfbfd6fede05 5
vaifreak 1:bfbfd6fede05 6 #define DELAY_BUFF_SIZE 5000
vaifreak 1:bfbfd6fede05 7
vaifreak 1:bfbfd6fede05 8 //---------------------------------------------
vaifreak 1:bfbfd6fede05 9 //
vaifreak 1:bfbfd6fede05 10 //---------------------------------------------
vaifreak 1:bfbfd6fede05 11 class Delay
vaifreak 1:bfbfd6fede05 12 {
vaifreak 1:bfbfd6fede05 13 private:
vaifreak 1:bfbfd6fede05 14 unsigned short buff[ DELAY_BUFF_SIZE ];
vaifreak 1:bfbfd6fede05 15 int current;
vaifreak 1:bfbfd6fede05 16 int offset;
vaifreak 1:bfbfd6fede05 17
vaifreak 1:bfbfd6fede05 18 /// [-1.0 ~ 1.0]
vaifreak 1:bfbfd6fede05 19 float buff_get( int i ){
vaifreak 1:bfbfd6fede05 20 return ((float)buff[i] * (2.0f/65535.0f) ) - 1.0f;
vaifreak 1:bfbfd6fede05 21 }
vaifreak 1:bfbfd6fede05 22
vaifreak 1:bfbfd6fede05 23 void buff_set( int i, float val ){
vaifreak 1:bfbfd6fede05 24 // [-1.0 ~ 1.0] to [ 0 ~ 65535 ]
vaifreak 1:bfbfd6fede05 25 buff[i] = (unsigned short)(((val + 1.0f) * 0.5f) * 65535.0f);
vaifreak 1:bfbfd6fede05 26 }
vaifreak 1:bfbfd6fede05 27
vaifreak 1:bfbfd6fede05 28 public:
vaifreak 1:bfbfd6fede05 29 float delay_time; //[0.0~1.0]
vaifreak 1:bfbfd6fede05 30 float feedback; //[0.0~1.0]
vaifreak 1:bfbfd6fede05 31 float effect_level;
vaifreak 1:bfbfd6fede05 32
vaifreak 1:bfbfd6fede05 33 Delay()
vaifreak 1:bfbfd6fede05 34 {
vaifreak 1:bfbfd6fede05 35 for(int i=0; i<DELAY_BUFF_SIZE; i++) buff[i] = 0;
vaifreak 1:bfbfd6fede05 36
vaifreak 1:bfbfd6fede05 37 delay_time = 0.8f;
vaifreak 1:bfbfd6fede05 38 feedback = 0.5f;
vaifreak 1:bfbfd6fede05 39 effect_level = 0.5f;
vaifreak 1:bfbfd6fede05 40
vaifreak 1:bfbfd6fede05 41 current = 0;
vaifreak 1:bfbfd6fede05 42 }
vaifreak 1:bfbfd6fede05 43
vaifreak 1:bfbfd6fede05 44 float process(float input)
vaifreak 1:bfbfd6fede05 45 {
vaifreak 1:bfbfd6fede05 46 float output;
vaifreak 1:bfbfd6fede05 47
vaifreak 1:bfbfd6fede05 48 float buff_val = buff_get(current);
vaifreak 1:bfbfd6fede05 49
vaifreak 1:bfbfd6fede05 50 // feedback process.
vaifreak 1:bfbfd6fede05 51 offset = current + (int)(delay_time * (float)DELAY_BUFF_SIZE);
vaifreak 1:bfbfd6fede05 52 if( offset >= DELAY_BUFF_SIZE ) offset -= DELAY_BUFF_SIZE;
vaifreak 1:bfbfd6fede05 53 buff_set( offset, (input + buff_val) * feedback );
vaifreak 1:bfbfd6fede05 54
vaifreak 1:bfbfd6fede05 55 // effect mix.
vaifreak 1:bfbfd6fede05 56 output = input + buff_val * effect_level;
vaifreak 1:bfbfd6fede05 57
vaifreak 1:bfbfd6fede05 58 current++;
vaifreak 1:bfbfd6fede05 59 if(current >= DELAY_BUFF_SIZE) current = 0;
vaifreak 1:bfbfd6fede05 60
vaifreak 1:bfbfd6fede05 61 return output;
vaifreak 1:bfbfd6fede05 62 }
vaifreak 1:bfbfd6fede05 63
vaifreak 1:bfbfd6fede05 64 };