
Guitar Effector using "mbed application board".
Guitar Effector using "mbed application board".
main.cpp@4:dbd755f9fca6, 2015-09-24 (annotated)
- Committer:
- vaifreak
- Date:
- Thu Sep 24 11:35:30 2015 +0000
- Revision:
- 4:dbd755f9fca6
- Parent:
- 3:1666e2d5bd46
Guitar Effector using "mbed application board".
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vaifreak | 1:bfbfd6fede05 | 1 | //============================================================================= |
vaifreak | 1:bfbfd6fede05 | 2 | // @author vaifreak |
vaifreak | 2:25adc1277b3e | 3 | // @brief Guitar Effector for "mbed application board" |
vaifreak | 1:bfbfd6fede05 | 4 | //============================================================================= |
vaifreak | 0:6b260c0931c5 | 5 | #include "mbed.h" |
vaifreak | 2:25adc1277b3e | 6 | #include <new> |
vaifreak | 2:25adc1277b3e | 7 | #include <list> |
vaifreak | 2:25adc1277b3e | 8 | |
vaifreak | 2:25adc1277b3e | 9 | #include "MyInputUtil.h" |
vaifreak | 2:25adc1277b3e | 10 | #include "Menu.h" |
vaifreak | 2:25adc1277b3e | 11 | #include "LevelMeter.h" |
vaifreak | 0:6b260c0931c5 | 12 | |
vaifreak | 1:bfbfd6fede05 | 13 | #include "Filter.h" |
vaifreak | 1:bfbfd6fede05 | 14 | #include "Drive.h" |
vaifreak | 1:bfbfd6fede05 | 15 | #include "Delay.h" |
vaifreak | 0:6b260c0931c5 | 16 | |
vaifreak | 2:25adc1277b3e | 17 | |
vaifreak | 2:25adc1277b3e | 18 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 19 | //--------------------------------------------- |
vaifreak | 1:bfbfd6fede05 | 20 | AnalogOut a_out(p18); |
vaifreak | 1:bfbfd6fede05 | 21 | AnalogIn a_in(p17); |
vaifreak | 0:6b260c0931c5 | 22 | |
vaifreak | 3:1666e2d5bd46 | 23 | Filter *low_pass; |
vaifreak | 3:1666e2d5bd46 | 24 | Filter *high_pass; |
vaifreak | 1:bfbfd6fede05 | 25 | Drive *drive; |
vaifreak | 1:bfbfd6fede05 | 26 | Delay *delay; |
vaifreak | 1:bfbfd6fede05 | 27 | |
vaifreak | 2:25adc1277b3e | 28 | list<EffectUnitBase*> g_EffectList; |
vaifreak | 2:25adc1277b3e | 29 | |
vaifreak | 2:25adc1277b3e | 30 | Menu menu; |
vaifreak | 2:25adc1277b3e | 31 | LevelMeter level_meter; |
vaifreak | 2:25adc1277b3e | 32 | |
vaifreak | 2:25adc1277b3e | 33 | Ticker menu_ticker; |
vaifreak | 2:25adc1277b3e | 34 | Ticker process_ticker; |
vaifreak | 2:25adc1277b3e | 35 | |
vaifreak | 2:25adc1277b3e | 36 | float g_sample_rate = 22050.0f; |
vaifreak | 2:25adc1277b3e | 37 | |
vaifreak | 2:25adc1277b3e | 38 | |
vaifreak | 2:25adc1277b3e | 39 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 40 | // Forward declaration |
vaifreak | 2:25adc1277b3e | 41 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 42 | void process(); |
vaifreak | 2:25adc1277b3e | 43 | void update_display(); |
vaifreak | 2:25adc1277b3e | 44 | |
vaifreak | 2:25adc1277b3e | 45 | |
vaifreak | 2:25adc1277b3e | 46 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 47 | extern "C" |
vaifreak | 2:25adc1277b3e | 48 | void HardFault_Handler() { |
vaifreak | 2:25adc1277b3e | 49 | printf("Hard Fault!\r\n"); |
vaifreak | 2:25adc1277b3e | 50 | while(1); |
vaifreak | 2:25adc1277b3e | 51 | } |
vaifreak | 2:25adc1277b3e | 52 | |
vaifreak | 2:25adc1277b3e | 53 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 54 | void no_memory () { |
vaifreak | 2:25adc1277b3e | 55 | printf("panic: can't allocate to memory!\r\n"); |
vaifreak | 2:25adc1277b3e | 56 | exit(-1); |
vaifreak | 2:25adc1277b3e | 57 | } |
vaifreak | 1:bfbfd6fede05 | 58 | |
vaifreak | 1:bfbfd6fede05 | 59 | //--------------------------------------------- |
vaifreak | 1:bfbfd6fede05 | 60 | // |
vaifreak | 1:bfbfd6fede05 | 61 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 62 | int main() |
vaifreak | 0:6b260c0931c5 | 63 | { |
vaifreak | 2:25adc1277b3e | 64 | printf("mbed effector, start!\n"); |
vaifreak | 2:25adc1277b3e | 65 | set_new_handler(no_memory); // new handler function |
vaifreak | 2:25adc1277b3e | 66 | |
vaifreak | 2:25adc1277b3e | 67 | // create effect unit |
vaifreak | 3:1666e2d5bd46 | 68 | low_pass = new Filter( Filter::LPF ); |
vaifreak | 3:1666e2d5bd46 | 69 | high_pass = new Filter( Filter::HPF ); |
vaifreak | 2:25adc1277b3e | 70 | drive = new Drive(); |
vaifreak | 2:25adc1277b3e | 71 | delay = new Delay(); |
vaifreak | 0:6b260c0931c5 | 72 | |
vaifreak | 2:25adc1277b3e | 73 | // add to effect processing list |
vaifreak | 3:1666e2d5bd46 | 74 | g_EffectList.push_back(low_pass); |
vaifreak | 3:1666e2d5bd46 | 75 | g_EffectList.push_back(high_pass); |
vaifreak | 2:25adc1277b3e | 76 | g_EffectList.push_back(drive); |
vaifreak | 2:25adc1277b3e | 77 | g_EffectList.push_back(delay); |
vaifreak | 2:25adc1277b3e | 78 | |
vaifreak | 3:1666e2d5bd46 | 79 | menu.Init( g_sample_rate, low_pass, high_pass, drive, delay ); |
vaifreak | 0:6b260c0931c5 | 80 | |
vaifreak | 2:25adc1277b3e | 81 | process_ticker.attach( &process, 1.0/g_sample_rate ); |
vaifreak | 2:25adc1277b3e | 82 | menu_ticker.attach( &update_display, 0.1 ); |
vaifreak | 2:25adc1277b3e | 83 | |
vaifreak | 2:25adc1277b3e | 84 | //---- main loop ---- |
vaifreak | 2:25adc1277b3e | 85 | //while(1) |
vaifreak | 2:25adc1277b3e | 86 | //{ |
vaifreak | 2:25adc1277b3e | 87 | //} |
vaifreak | 0:6b260c0931c5 | 88 | } |
vaifreak | 0:6b260c0931c5 | 89 | |
vaifreak | 1:bfbfd6fede05 | 90 | //--------------------------------------------- |
vaifreak | 1:bfbfd6fede05 | 91 | // |
vaifreak | 1:bfbfd6fede05 | 92 | //--------------------------------------------- |
vaifreak | 1:bfbfd6fede05 | 93 | void process() |
vaifreak | 1:bfbfd6fede05 | 94 | { |
vaifreak | 1:bfbfd6fede05 | 95 | float val = (a_in * 2.0f) - 1.0f; //convert [0.0 ~ 1.0] to [-1.0 ~ 1.0] |
vaifreak | 3:1666e2d5bd46 | 96 | val = val * menu.inputGain; |
vaifreak | 3:1666e2d5bd46 | 97 | level_meter.Update( fabsf(val) ); // LED level meter.(for Input) |
vaifreak | 0:6b260c0931c5 | 98 | |
vaifreak | 1:bfbfd6fede05 | 99 | //---- effect process ---- |
vaifreak | 3:1666e2d5bd46 | 100 | list<EffectUnitBase*>::iterator it = g_EffectList.begin(); |
vaifreak | 3:1666e2d5bd46 | 101 | while( it != g_EffectList.end() ) |
vaifreak | 1:bfbfd6fede05 | 102 | { |
vaifreak | 3:1666e2d5bd46 | 103 | val = (*it)->Process( val ); |
vaifreak | 3:1666e2d5bd46 | 104 | ++it; |
vaifreak | 1:bfbfd6fede05 | 105 | } |
vaifreak | 1:bfbfd6fede05 | 106 | |
vaifreak | 3:1666e2d5bd46 | 107 | val = val * menu.masterVolume; |
vaifreak | 3:1666e2d5bd46 | 108 | //level_meter.Update( fabsf(val) ); // LED level meter.(for Output) |
vaifreak | 1:bfbfd6fede05 | 109 | val = (val + 1.0f) * 0.5f; //convert [-1.0 ~ 1.0] to [0.0 ~ 1.0] |
vaifreak | 1:bfbfd6fede05 | 110 | |
vaifreak | 1:bfbfd6fede05 | 111 | //clipping. just to be safe. |
vaifreak | 1:bfbfd6fede05 | 112 | if(val > 1.0f) val = 1.0f; |
vaifreak | 1:bfbfd6fede05 | 113 | else if(val < 0.0f) val =0.0f; |
vaifreak | 1:bfbfd6fede05 | 114 | |
vaifreak | 1:bfbfd6fede05 | 115 | a_out = val; |
vaifreak | 1:bfbfd6fede05 | 116 | } |
vaifreak | 0:6b260c0931c5 | 117 | |
vaifreak | 1:bfbfd6fede05 | 118 | //--------------------------------------------- |
vaifreak | 1:bfbfd6fede05 | 119 | // |
vaifreak | 1:bfbfd6fede05 | 120 | //--------------------------------------------- |
vaifreak | 2:25adc1277b3e | 121 | void update_display() |
vaifreak | 1:bfbfd6fede05 | 122 | { |
vaifreak | 2:25adc1277b3e | 123 | menu.Update(); |
vaifreak | 2:25adc1277b3e | 124 | } |
vaifreak | 1:bfbfd6fede05 | 125 | |
vaifreak | 1:bfbfd6fede05 | 126 |