Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Distotion_Unit.cpp Source File

Distotion_Unit.cpp

00001 /*****************************************************/
00002 /*  Distotion_Unit.cpp                               */
00003 /*                                                   */
00004 /*****************************************************/
00005 
00006 #define     DIST_MAIN
00007 #include    "Distotion_Unit.h"
00008 
00009 #define  LIMIT_P        (32767)
00010 #define  LIMIT_N        (-32768)
00011 
00012 int distotion(int iEffectIn) {
00013 
00014     int iSignal;
00015     int iClip;
00016     
00017     // Bypass ?
00018     if(g_iDistBypass == 0)return iEffectIn;
00019 
00020     // Input Gain
00021     iSignal = iEffectIn * g_iDistInputGain / 10;
00022 
00023     iClip = 32767 * g_iDistClipLevel / 100;
00024 
00025     // Clip
00026     switch(g_iDistMode){
00027         case 1: if (iSignal < 0)iSignal *= (-1);
00028                 if (iSignal >= iClip)iSignal = iClip;
00029                 break;
00030         case 2: if (iSignal >= iClip)iSignal = iClip;
00031                 if (iSignal <= -iClip)iSignal = -iClip;
00032                 break;
00033         case 3: if (iSignal >= iClip)iSignal = iClip;
00034                 if (iSignal <= (-iClip / 2))iSignal = (-iClip / 2);
00035                 break;
00036         default:break;
00037     }
00038         
00039     // Output Gain
00040     iSignal = iSignal * g_iDistOutputGain / 10;
00041     if (iSignal >= LIMIT_P)iSignal = LIMIT_P;
00042     if (iSignal <= LIMIT_N)iSignal = LIMIT_N;
00043 
00044     return iSignal;
00045 
00046 }
00047 
00048 #undef      DIST_MAIN