Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Baxandall tone control*/
- #include <stdio.h>
- #define MSG_WELCOME "welcome"
- #define OPT_MAIN_BASS '1'
- #define OPT_MAIN_TREBLE '2'
- #define OPT_MAIN_QUIT '3'
- #define OPT_BASS_FREQ '1'
- #define OPT_BASS_GAIN '2'
- #define OPT_BASS_BACK '3'
- #define OPT_TREBLE_GAIN '1'
- #define OPT_TREBLE_FREQ '2'
- #define OPT_TREBLE_BACK '3'
- #define OPT_BASS_FREQ_FLow '1'
- #define OPT_BASS_FREQ_CBassFreq '2'
- #define OPT_BASS_FREQ_RBassFreq '3'
- #define OPT_BASS_FREQ_BACK '4'
- #define OPT_BASS_GAIN_RBassGain '1'
- #define OPT_BASS_GAIN_BACK '2'
- #define OPT_TREBLE_FREQ_Fhigh '1'
- #define OPT_TREBLE_FREQ_RTrebleFreq '2'
- #define OPT_TREBLE_FREQ_CTrebleFreq '3'
- #define OPT_TREBLE_FREQ_BACK '4'
- #define OPT_TREBLE_GAIN_RTrebleGain '1'
- #define OPT_TREBLE_GAIN_BACK '2'
- #define MSG_REQ_RBassFreq "please input R2"
- #define MSG_REQ_CBassFreq "please input C1"
- #define MSG_REQ_RBassGain "please input R1"
- #define MSG_REQ_RTrebleFreq "please input R3"
- #define MSG_REQ_CTrebleFreq "please input C3"
- #define MSG_REQ_FHigh "please input the high frequency value"
- #define MSG_REQ_FLow "please input the low frequency value"
- #define MSG_CONTINUE "press any key and enter to continue"
- #define MSG_DISPLAY_CBassFreq "The capacitance value for C1 is "
- #define MSG_DISPLAY_FLow "The low frequency value is "
- #define MSG_DISPLAY_RBassGain "the resistance value for R1 is "
- #define MSG_DISPLAY_RTrebleGain "the resistance value for R5 is"
- #define DRAW_MAIN_MENU "Main Menu \n ---------- \n please select your option \n ---------- \n" OPT_MAIN_BASS "Bass \n" OPT_MAIN_TREBLE "Treble \n" OPT_MAIN_QUIT "Quit \n"
- #define DRAW_BASS_MENU "Bass Menu \n ---------- \n please select your option \n ---------- \n" OPT_BASS_FREQ "Frequency \n" OPT_BASS_GAIN "Gain \n" OPT_BASS_BACK "Back \n"
- #define DRAW_TREBLE_MENU "Treble Menu \n ---------- \n please select your option \n ---------- \n" OPT_TREBLE_FREQ "Frequency \n" OPT_TREBLE_GAIN "Gain \n" OPT_TREBLE_BACK "Back \n"
- #define DRAW_BASS_FREQ_MENU "Bass Frequency Menu \n ---------- \n please select your option \n ---------- \n" OPT_BASS_FREQ_FLow "Low Frequency \n" OPT_BASS_FREQ_RBassFreq "Resistor 2 \n" OPT_BASS_FREQ_CBassFreq "Capacitor 1 \n" OPT_BASS_FREQ_BACK "Back \n"
- #define DRAW_BASS_GAIN_MENU "Bass Gain Menu \n ---------- \n please select your option \n ---------- \n" OPT_BASS_GAIN_RBassGain "Resistor 1 \n" OPT_BASS_GAIN_BACK "Back \n"
- #define DRAW_TREBLE_FREQ_MENU "Treble Frequency Menu \n ---------- \n please select your option \n ---------- \n" OPT_TREBLE_FREQ_FHigh "High Frequency \n" OPT_BASS_FREQ_RTrebleFreq "Resistor 3 \n" OPT_BASS_FREQ_CTrebleFreq "Capacitor 3 \n"
- #define DRAW_TREBLE_GAIN_MENU "Treble Gain Menu \n ---------- \n please select your option \n ---------- \n" OPT_TREBLE_GAIN_RTrebleGain "Resistor 5 \n" OPT_TREBLE_GAIN_BACK "Back \n"
- #define MSG_ERR_TRY_AGAIN "please try again"
- #define GAIN_Av 13
- #define GAIN_Avr 13
- #define PI 3.14159
- #define FACTOR_E3 'K'
- #define FACTOR_E6 'M'
- #define FACTOR_Eneg12 'p'
- #define FACTOR_Eneg6 'u'
- #define FACTOR_Eneg9 'n'
- #define CLR_SCRN "clear"
- int main(void)
- {
- typedef enum{ST_MAIN,
- ST_BASS,
- ST_TREBLE,
- ST_BASS_FREQ,
- ST_BASS_GAIN,
- ST_TREBLE_FREQ,
- ST_TREBLE_GAIN,
- ST_BASS_FREQ_FLow,
- ST_BASS_FREQ_CBassFreq,
- ST_BASS_FREQ_RBassFreq,
- ST_BASS_GAIN_RBassGain,
- ST_TREBLE_FREQ_Fhigh,
- ST_TREBLE_FREQ_CTRebleFreq,
- ST_TREBLE_FREQ_RTrebleFreq,
- ST_TREBLE_GAIN_RTrebleGain,
- ST_EXIT
- } state_t;
- typedef enum{TRUE,
- FALSE} bool;
- printf(MSG_WELCOME);
- char choice;
- int try_again_flag=0;
- char R_multiplier;
- char C_multiplier;
- char F_multiplier;
- float RBassGain;
- float RBassFreq;
- float RTrebleGain;
- float RTrebleFreq;
- float CTrebleFreq;
- float CBassFreq;
- float FLow;
- float FHigh;
- char any_key;
- state_t state=ST_MAIN;
- do
- {
- switch(state)
- {
- case ST_MAIN:
- do
- {
- printf("%s", DRAW_MAIN_MENU );
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_MAIN_BASS:
- state=ST_BASS;
- break;
- case OPT_MAIN_TREBLE:
- state=ST_TREBLE;
- break;
- case OPT_MAIN_QUIT:
- state=ST_EXIT;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- break;
- case ST_BASS:
- do
- {
- printf("%s", DRAW_BASS_MENU );
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_BASS_GAIN:
- state=ST_BASS_GAIN;
- break;
- case OPT_BASS_FREQ:
- state=ST_BASS_FREQ;
- break;
- case OPT_BASS_BACK:
- state=ST_MAIN;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- break;
- case ST_TREBLE:
- do
- {
- printf("%s", DRAW_TREBLE_MENU );
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_TREBLE_GAIN:
- state=ST_TREBLE_GAIN;
- break;
- case OPT_TREBLE_FREQ:
- state=ST_TREBLE_FREQ;
- break;
- case OPT_TREBLE_BACK:
- state=ST_MAIN;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- break;
- case ST_BASS_FREQ:
- do
- {
- printf("%s", DRAW_BASS_FREQ_MENU );
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_BASS_FREQ_FLow:
- state=ST_TREBLE_GAIN;
- break;
- case OPT_BASS_FREQ_CBassFreq:
- state=ST_TREBLE_FREQ;
- break;
- case OPT_BASS_FREQ_RBassFreq:
- state=ST_MAIN;
- break;
- case OPT_BASS_FREQ_BACK:
- state=ST_BASS;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- case ST_BASS_GAIN:
- do
- {
- printf("%s", DRAW_BASS_GAIN_MENU );
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_BASS_GAIN_RBassGain:
- state=ST_TREBLE_GAIN;
- break;
- case OPT_BASS_GAIN_BACK:
- state=ST_BASS;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- case ST_TREBLE_FREQ;
- do
- {
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_TREBLE_FREQ_Fhigh:
- state=ST_TREBLE_FREQ_Fhigh;
- break;
- case OPT_TREBLE_FREQ_RTrebleFreq:
- state=ST_TREBLE_FREQ_RTrebleFreq;
- break;
- case OPT_TREBLE_FREQ_CTrebleFreq:
- state=ST_TREBLE_FREQ_CTRebleFreq;
- break;
- case OPT_TREBLE_FREQ_BACK:
- state=ST_TREBLE;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- case ST_TREBLE_GAIN:
- do
- {
- printf("%s", DRAW_TREBLE_GAIN_MENU );
- scanf(" %c", choice);
- system(CLR_SCRN);
- try_again_flag=0;
- switch(choice)
- {
- case OPT_TREBLE_GAIN_RTrebleGain:
- state=ST_TREBLE_FREQ_Fhigh;
- break;
- case OPT_TREBLE_GAIN_BACK:
- state=ST_TREBLE;
- break;
- default:
- try_again_flag=1;
- puts(MSG_ERR_TRY_AGAIN);
- }
- } while (try_again_flag);
- case ST_BASS_FREQ_FLow:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RBassFreq);
- if(scanf("%f",&RBassFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- system(CLR_SCRN);
- printf("%s\n", MSG_REQ_CBassFreq);
- if(scanf("%f", &CBassFreq) !=1 || scanf("%c", &C_multiplier) != 1 || ( C_multiplier!= FACTOR_Eneg9 && C_multiplier != FACTOR_Eneg6 && C_multiplier != FACTOR_Eneg12 && C_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- FLow=1/(2*PI*RBassFreq*CBassFreq);
- printf("%s%f", MSG_DISPLAY_FLow, FLow );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }while(try_again_flag);
- }while(try_again_flag);
- break;
- case ST_BASS_FREQ_CBassFreq:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RBassFreq);
- if(scanf("%f",&RBassFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- system(CLR_SCRN);
- printf("%s\n", MSG_REQ_FLow);
- if(scanf("%f", &FLow) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- CBassFreq=1/(2*PI*RBassFreq*FLow);
- printf("%s%f", MSG_DISPLAY_CBassFreq, CBassFreq );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }while(try_again_flag);
- }while(try_again_flag);
- break;
- case ST_BASS_FREQ_RBassFreq:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_FLow);
- if(scanf("%f", &FLow) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- system(CLR_SCRN);
- printf("%s\n", MSG_REQ_CBassFreq);
- if(scanf("%f", &CBassFreq) !=1 || scanf("%c", &C_multiplier) != 1 || ( C_multiplier!= FACTOR_Eneg9 && C_multiplier != FACTOR_Eneg6 && C_multiplier != FACTOR_Eneg12 && C_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- FLow=1/(2*PI*FLow*CBassFreq);
- printf("%s%f", MSG_DISPLAY_RBassFreq, RBassFreq );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }while(try_again_flag);
- }while(try_again_flag);
- break;
- case ST_BASS_GAIN_RBassGain:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RBassFreq);
- if(scanf("%f", &FLow) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- FLow=RBassFreq/(GAIN_Av - 1);
- printf("%s%f", MSG_DISPLAY_RBassGain, RBassGain );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }
- case ST_TREBLE_GAIN_RTrebleGain:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RTrebleFreq);
- if(scanf("%f",&RTrebleFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RBassGain);
- if(scanf("%f",&RBassGain) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- RTrebleGain=((GAIN_Avr - 1)*RTrebleFreq - RBassGain)/2;
- printf("%s%f", MSG_DISPLAY_RTrebleGain, RTrebleGain );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- } while (try_again_flag);
- }while(try_again_flag);
- break;
- case ST_TREBLE_FREQ_Fhigh:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RTrebleFreq);
- if(scanf("%f",&RTrebleFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- system(CLR_SCRN);
- printf("%s\n", MSG_REQ_CTrebleFreq);
- if(scanf("%f", &CTrebleFreq) !=1 || scanf("%c", &C_multiplier) != 1 || ( C_multiplier!= FACTOR_Eneg9 && C_multiplier != FACTOR_Eneg6 && C_multiplier != FACTOR_Eneg12 && C_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- FHigh=1/(2*PI*RTrebleFreq*CTrebleFreq);
- printf("%s%f", MSG_DISPLAY_FHigh, FHigh );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }while(try_again_flag);
- }while(try_again_flag);
- break;
- case ST_TREBLE_FREQ_RTrebleFreq:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_FHigh);
- if(scanf("%f", &FHigh) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- system(CLR_SCRN);
- printf("%s\n", MSG_REQ_CTrebleFreq);
- if(scanf("%f", &CTrebleFreq) !=1 || scanf("%c", &C_multiplier) != 1 || ( C_multiplier!= FACTOR_Eneg9 && C_multiplier != FACTOR_Eneg6 && C_multiplier != FACTOR_Eneg12 && C_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- FLow=1/(2*PI*FHigh*FTrebleFreq);
- printf("%s%f", MSG_DISPLAY_RTrebleFreq, RTrebleFreq );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }while(try_again_flag);
- }while(try_again_flag);
- break;
- case ST_TREBLE_FREQ_CTRebleFreq:
- do
- {
- try_again_flag=0;
- printf("%s", MSG_REQ_RTrebleFreq);
- if(scanf("%f",&RTrebleFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- do
- {
- try_again_flag=0;
- system(CLR_SCRN);
- printf("%s\n", MSG_REQ_FHigh);
- if(scanf("%f", &FHigh) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
- {
- try_again_flag=1;
- system(CLR_SCRN);
- printf("%s\n", MSG_ERR_TRY_AGAIN);
- }else
- {
- CBassFreq=1/(2*PI*RTrebleFreq*FHigh);
- printf("%s%f", MSG_DISPLAY_CBassFreq, CBassFreq );
- state=ST_MAIN;
- printf("%s", MSG_CONTINUE );
- scanf(" %c", any_key );
- }
- }while(try_again_flag);
- }while(try_again_flag);
- break;
- }
- } while (MENU=!ST_EXIT);
- }
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement