Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.71 KB | None | 0 0
  1. /*Baxandall tone control*/
  2. #include <stdio.h>
  3. #define MSG_WELCOME "welcome"
  4.  
  5. #define OPT_MAIN_BASS '1'
  6. #define OPT_MAIN_TREBLE '2'
  7. #define OPT_MAIN_QUIT '3'
  8. #define OPT_BASS_FREQ '1'
  9. #define OPT_BASS_GAIN '2'
  10. #define OPT_BASS_BACK '3'
  11. #define OPT_TREBLE_GAIN '1'
  12. #define OPT_TREBLE_FREQ '2'
  13. #define OPT_TREBLE_BACK '3'
  14. #define OPT_BASS_FREQ_FLow '1'
  15. #define OPT_BASS_FREQ_CBassFreq '2'
  16. #define OPT_BASS_FREQ_RBassFreq '3'
  17. #define OPT_BASS_FREQ_BACK '4'
  18. #define OPT_BASS_GAIN_RBassGain '1'
  19. #define OPT_BASS_GAIN_BACK '2'
  20. #define OPT_TREBLE_FREQ_Fhigh '1'
  21. #define OPT_TREBLE_FREQ_RTrebleFreq '2'
  22. #define OPT_TREBLE_FREQ_CTrebleFreq '3'
  23. #define OPT_TREBLE_FREQ_BACK '4'
  24. #define OPT_TREBLE_GAIN_RTrebleGain '1'
  25. #define OPT_TREBLE_GAIN_BACK '2'
  26.  
  27. #define MSG_REQ_RBassFreq "please input R2"
  28. #define MSG_REQ_CBassFreq "please input C1"
  29. #define MSG_REQ_RBassGain "please input R1"
  30. #define MSG_REQ_RTrebleFreq "please input R3"
  31. #define MSG_REQ_CTrebleFreq "please input C3"
  32. #define MSG_REQ_FHigh "please input the high frequency value"
  33. #define MSG_REQ_FLow "please input the low frequency value"
  34. #define MSG_CONTINUE "press any key and enter to continue"
  35. #define MSG_DISPLAY_CBassFreq "The capacitance value for C1 is "
  36. #define MSG_DISPLAY_FLow "The low frequency value is "
  37. #define MSG_DISPLAY_RBassGain "the resistance value for R1 is "
  38. #define MSG_DISPLAY_RTrebleGain "the resistance value for R5 is"
  39.  
  40. #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"
  41. #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"
  42. #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"
  43. #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"
  44. #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"
  45. #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"
  46. #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"
  47.  
  48. #define MSG_ERR_TRY_AGAIN "please try again"
  49.  
  50. #define GAIN_Av 13
  51. #define GAIN_Avr 13
  52. #define PI 3.14159
  53.  
  54. #define FACTOR_E3 'K'
  55. #define FACTOR_E6 'M'
  56. #define FACTOR_Eneg12 'p'
  57. #define FACTOR_Eneg6 'u'
  58. #define FACTOR_Eneg9 'n'
  59.  
  60. #define CLR_SCRN "clear"
  61.  
  62. int main(void)
  63. {
  64. typedef enum{ST_MAIN,
  65. ST_BASS,
  66. ST_TREBLE,
  67. ST_BASS_FREQ,
  68. ST_BASS_GAIN,
  69. ST_TREBLE_FREQ,
  70. ST_TREBLE_GAIN,
  71. ST_BASS_FREQ_FLow,
  72. ST_BASS_FREQ_CBassFreq,
  73. ST_BASS_FREQ_RBassFreq,
  74. ST_BASS_GAIN_RBassGain,
  75. ST_TREBLE_FREQ_Fhigh,
  76. ST_TREBLE_FREQ_CTRebleFreq,
  77. ST_TREBLE_FREQ_RTrebleFreq,
  78. ST_TREBLE_GAIN_RTrebleGain,
  79. ST_EXIT
  80. } state_t;
  81. typedef enum{TRUE,
  82. FALSE} bool;
  83.  
  84. printf(MSG_WELCOME);
  85. char choice;
  86. int try_again_flag=0;
  87. char R_multiplier;
  88. char C_multiplier;
  89. char F_multiplier;
  90. float RBassGain;
  91. float RBassFreq;
  92. float RTrebleGain;
  93. float RTrebleFreq;
  94. float CTrebleFreq;
  95. float CBassFreq;
  96. float FLow;
  97. float FHigh;
  98. char any_key;
  99.  
  100. state_t state=ST_MAIN;
  101.  
  102. do
  103. {
  104. switch(state)
  105. {
  106. case ST_MAIN:
  107. do
  108. {
  109. printf("%s", DRAW_MAIN_MENU );
  110. scanf(" %c", choice);
  111. system(CLR_SCRN);
  112. try_again_flag=0;
  113. switch(choice)
  114. {
  115. case OPT_MAIN_BASS:
  116. state=ST_BASS;
  117. break;
  118. case OPT_MAIN_TREBLE:
  119. state=ST_TREBLE;
  120. break;
  121. case OPT_MAIN_QUIT:
  122. state=ST_EXIT;
  123. break;
  124. default:
  125. try_again_flag=1;
  126. puts(MSG_ERR_TRY_AGAIN);
  127. }
  128.  
  129. } while (try_again_flag);
  130. break;
  131. case ST_BASS:
  132. do
  133. {
  134. printf("%s", DRAW_BASS_MENU );
  135. scanf(" %c", choice);
  136. system(CLR_SCRN);
  137. try_again_flag=0;
  138. switch(choice)
  139. {
  140. case OPT_BASS_GAIN:
  141. state=ST_BASS_GAIN;
  142. break;
  143. case OPT_BASS_FREQ:
  144. state=ST_BASS_FREQ;
  145. break;
  146. case OPT_BASS_BACK:
  147. state=ST_MAIN;
  148. break;
  149. default:
  150. try_again_flag=1;
  151. puts(MSG_ERR_TRY_AGAIN);
  152. }
  153.  
  154. } while (try_again_flag);
  155. break;
  156. case ST_TREBLE:
  157. do
  158. {
  159. printf("%s", DRAW_TREBLE_MENU );
  160. scanf(" %c", choice);
  161. system(CLR_SCRN);
  162. try_again_flag=0;
  163. switch(choice)
  164. {
  165. case OPT_TREBLE_GAIN:
  166. state=ST_TREBLE_GAIN;
  167. break;
  168. case OPT_TREBLE_FREQ:
  169. state=ST_TREBLE_FREQ;
  170. break;
  171. case OPT_TREBLE_BACK:
  172. state=ST_MAIN;
  173. break;
  174. default:
  175. try_again_flag=1;
  176. puts(MSG_ERR_TRY_AGAIN);
  177. }
  178.  
  179. } while (try_again_flag);
  180.  
  181. break;
  182. case ST_BASS_FREQ:
  183. do
  184. {
  185. printf("%s", DRAW_BASS_FREQ_MENU );
  186. scanf(" %c", choice);
  187. system(CLR_SCRN);
  188. try_again_flag=0;
  189. switch(choice)
  190. {
  191. case OPT_BASS_FREQ_FLow:
  192. state=ST_TREBLE_GAIN;
  193. break;
  194. case OPT_BASS_FREQ_CBassFreq:
  195. state=ST_TREBLE_FREQ;
  196. break;
  197. case OPT_BASS_FREQ_RBassFreq:
  198. state=ST_MAIN;
  199. break;
  200. case OPT_BASS_FREQ_BACK:
  201. state=ST_BASS;
  202. break;
  203. default:
  204. try_again_flag=1;
  205. puts(MSG_ERR_TRY_AGAIN);
  206. }
  207.  
  208. } while (try_again_flag);
  209. case ST_BASS_GAIN:
  210. do
  211. {
  212. printf("%s", DRAW_BASS_GAIN_MENU );
  213. scanf(" %c", choice);
  214. system(CLR_SCRN);
  215. try_again_flag=0;
  216. switch(choice)
  217. {
  218. case OPT_BASS_GAIN_RBassGain:
  219. state=ST_TREBLE_GAIN;
  220. break;
  221. case OPT_BASS_GAIN_BACK:
  222. state=ST_BASS;
  223. break;
  224. default:
  225. try_again_flag=1;
  226. puts(MSG_ERR_TRY_AGAIN);
  227. }
  228. } while (try_again_flag);
  229. case ST_TREBLE_FREQ;
  230. do
  231. {
  232. scanf(" %c", choice);
  233. system(CLR_SCRN);
  234. try_again_flag=0;
  235. switch(choice)
  236. {
  237. case OPT_TREBLE_FREQ_Fhigh:
  238. state=ST_TREBLE_FREQ_Fhigh;
  239. break;
  240. case OPT_TREBLE_FREQ_RTrebleFreq:
  241. state=ST_TREBLE_FREQ_RTrebleFreq;
  242. break;
  243. case OPT_TREBLE_FREQ_CTrebleFreq:
  244. state=ST_TREBLE_FREQ_CTRebleFreq;
  245. break;
  246. case OPT_TREBLE_FREQ_BACK:
  247. state=ST_TREBLE;
  248. break;
  249. default:
  250. try_again_flag=1;
  251. puts(MSG_ERR_TRY_AGAIN);
  252. }
  253. } while (try_again_flag);
  254. case ST_TREBLE_GAIN:
  255. do
  256. {
  257. printf("%s", DRAW_TREBLE_GAIN_MENU );
  258. scanf(" %c", choice);
  259. system(CLR_SCRN);
  260. try_again_flag=0;
  261. switch(choice)
  262. {
  263. case OPT_TREBLE_GAIN_RTrebleGain:
  264. state=ST_TREBLE_FREQ_Fhigh;
  265. break;
  266. case OPT_TREBLE_GAIN_BACK:
  267. state=ST_TREBLE;
  268. break;
  269. default:
  270. try_again_flag=1;
  271. puts(MSG_ERR_TRY_AGAIN);
  272. }
  273. } while (try_again_flag);
  274. case ST_BASS_FREQ_FLow:
  275. do
  276. {
  277. try_again_flag=0;
  278. printf("%s", MSG_REQ_RBassFreq);
  279. if(scanf("%f",&RBassFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
  280. {
  281. try_again_flag=1;
  282. system(CLR_SCRN);
  283. printf("%s\n", MSG_ERR_TRY_AGAIN);
  284. }else
  285. do
  286. {
  287. try_again_flag=0;
  288. system(CLR_SCRN);
  289. printf("%s\n", MSG_REQ_CBassFreq);
  290. 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'))
  291. {
  292. try_again_flag=1;
  293. system(CLR_SCRN);
  294. printf("%s\n", MSG_ERR_TRY_AGAIN);
  295. }else
  296. {
  297. FLow=1/(2*PI*RBassFreq*CBassFreq);
  298. printf("%s%f", MSG_DISPLAY_FLow, FLow );
  299. state=ST_MAIN;
  300. printf("%s", MSG_CONTINUE );
  301. scanf(" %c", any_key );
  302. }
  303. }while(try_again_flag);
  304. }while(try_again_flag);
  305. break;
  306. case ST_BASS_FREQ_CBassFreq:
  307. do
  308. {
  309. try_again_flag=0;
  310. printf("%s", MSG_REQ_RBassFreq);
  311. if(scanf("%f",&RBassFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
  312. {
  313. try_again_flag=1;
  314. system(CLR_SCRN);
  315. printf("%s\n", MSG_ERR_TRY_AGAIN);
  316. }else
  317. do
  318. {
  319. try_again_flag=0;
  320. system(CLR_SCRN);
  321. printf("%s\n", MSG_REQ_FLow);
  322. if(scanf("%f", &FLow) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
  323. {
  324. try_again_flag=1;
  325. system(CLR_SCRN);
  326. printf("%s\n", MSG_ERR_TRY_AGAIN);
  327. }else
  328. {
  329. CBassFreq=1/(2*PI*RBassFreq*FLow);
  330. printf("%s%f", MSG_DISPLAY_CBassFreq, CBassFreq );
  331. state=ST_MAIN;
  332. printf("%s", MSG_CONTINUE );
  333. scanf(" %c", any_key );
  334. }
  335. }while(try_again_flag);
  336. }while(try_again_flag);
  337. break;
  338. case ST_BASS_FREQ_RBassFreq:
  339. do
  340. {
  341. try_again_flag=0;
  342. printf("%s", MSG_REQ_FLow);
  343. if(scanf("%f", &FLow) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
  344. {
  345. try_again_flag=1;
  346. system(CLR_SCRN);
  347. printf("%s\n", MSG_ERR_TRY_AGAIN);
  348. }else
  349. do
  350. {
  351. try_again_flag=0;
  352. system(CLR_SCRN);
  353. printf("%s\n", MSG_REQ_CBassFreq);
  354. 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'))
  355. {
  356. try_again_flag=1;
  357. system(CLR_SCRN);
  358. printf("%s\n", MSG_ERR_TRY_AGAIN);
  359. }else
  360. {
  361. FLow=1/(2*PI*FLow*CBassFreq);
  362. printf("%s%f", MSG_DISPLAY_RBassFreq, RBassFreq );
  363. state=ST_MAIN;
  364. printf("%s", MSG_CONTINUE );
  365. scanf(" %c", any_key );
  366. }
  367. }while(try_again_flag);
  368. }while(try_again_flag);
  369. break;
  370. case ST_BASS_GAIN_RBassGain:
  371. do
  372. {
  373. try_again_flag=0;
  374. printf("%s", MSG_REQ_RBassFreq);
  375. if(scanf("%f", &FLow) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
  376. {
  377. try_again_flag=1;
  378. system(CLR_SCRN);
  379. printf("%s\n", MSG_ERR_TRY_AGAIN);
  380. }else
  381. {
  382. FLow=RBassFreq/(GAIN_Av - 1);
  383. printf("%s%f", MSG_DISPLAY_RBassGain, RBassGain );
  384. state=ST_MAIN;
  385. printf("%s", MSG_CONTINUE );
  386. scanf(" %c", any_key );
  387. }
  388. }
  389. case ST_TREBLE_GAIN_RTrebleGain:
  390. do
  391. {
  392. try_again_flag=0;
  393. printf("%s", MSG_REQ_RTrebleFreq);
  394. if(scanf("%f",&RTrebleFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
  395. {
  396. try_again_flag=1;
  397. system(CLR_SCRN);
  398. printf("%s\n", MSG_ERR_TRY_AGAIN);
  399. }else
  400. do
  401. {
  402. try_again_flag=0;
  403. printf("%s", MSG_REQ_RBassGain);
  404. if(scanf("%f",&RBassGain) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
  405. {
  406. try_again_flag=1;
  407. system(CLR_SCRN);
  408. printf("%s\n", MSG_ERR_TRY_AGAIN);
  409. }else
  410. {
  411. RTrebleGain=((GAIN_Avr - 1)*RTrebleFreq - RBassGain)/2;
  412. printf("%s%f", MSG_DISPLAY_RTrebleGain, RTrebleGain );
  413. state=ST_MAIN;
  414. printf("%s", MSG_CONTINUE );
  415. scanf(" %c", any_key );
  416. }
  417. } while (try_again_flag);
  418. }while(try_again_flag);
  419. break;
  420. case ST_TREBLE_FREQ_Fhigh:
  421. do
  422. {
  423. try_again_flag=0;
  424. printf("%s", MSG_REQ_RTrebleFreq);
  425. if(scanf("%f",&RTrebleFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
  426. {
  427. try_again_flag=1;
  428. system(CLR_SCRN);
  429. printf("%s\n", MSG_ERR_TRY_AGAIN);
  430. }else
  431. do
  432. {
  433. try_again_flag=0;
  434. system(CLR_SCRN);
  435. printf("%s\n", MSG_REQ_CTrebleFreq);
  436. 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'))
  437. {
  438. try_again_flag=1;
  439. system(CLR_SCRN);
  440. printf("%s\n", MSG_ERR_TRY_AGAIN);
  441. }else
  442. {
  443. FHigh=1/(2*PI*RTrebleFreq*CTrebleFreq);
  444. printf("%s%f", MSG_DISPLAY_FHigh, FHigh );
  445. state=ST_MAIN;
  446. printf("%s", MSG_CONTINUE );
  447. scanf(" %c", any_key );
  448. }
  449. }while(try_again_flag);
  450. }while(try_again_flag);
  451. break;
  452. case ST_TREBLE_FREQ_RTrebleFreq:
  453. do
  454. {
  455. try_again_flag=0;
  456. printf("%s", MSG_REQ_FHigh);
  457. if(scanf("%f", &FHigh) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
  458. {
  459. try_again_flag=1;
  460. system(CLR_SCRN);
  461. printf("%s\n", MSG_ERR_TRY_AGAIN);
  462. }else
  463. do
  464. {
  465. try_again_flag=0;
  466. system(CLR_SCRN);
  467. printf("%s\n", MSG_REQ_CTrebleFreq);
  468. 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'))
  469. {
  470. try_again_flag=1;
  471. system(CLR_SCRN);
  472. printf("%s\n", MSG_ERR_TRY_AGAIN);
  473. }else
  474. {
  475. FLow=1/(2*PI*FHigh*FTrebleFreq);
  476. printf("%s%f", MSG_DISPLAY_RTrebleFreq, RTrebleFreq );
  477. state=ST_MAIN;
  478. printf("%s", MSG_CONTINUE );
  479. scanf(" %c", any_key );
  480. }
  481. }while(try_again_flag);
  482. }while(try_again_flag);
  483. break;
  484. case ST_TREBLE_FREQ_CTRebleFreq:
  485. do
  486. {
  487. try_again_flag=0;
  488. printf("%s", MSG_REQ_RTrebleFreq);
  489. if(scanf("%f",&RTrebleFreq) != 1 || scanf("%c", &R_multiplier) != 1 ||( R_multiplier!=FACTOR_E3 && R_multiplier !=FACTOR_E6 && R_multiplier != '\n'))
  490. {
  491. try_again_flag=1;
  492. system(CLR_SCRN);
  493. printf("%s\n", MSG_ERR_TRY_AGAIN);
  494. }else
  495. do
  496. {
  497. try_again_flag=0;
  498. system(CLR_SCRN);
  499. printf("%s\n", MSG_REQ_FHigh);
  500. if(scanf("%f", &FHigh) !=1 || scanf("%c", &F_multiplier) != 1 || ( F_multiplier!= FACTOR_E3 && F_multiplier!= '\n'))
  501. {
  502. try_again_flag=1;
  503. system(CLR_SCRN);
  504. printf("%s\n", MSG_ERR_TRY_AGAIN);
  505. }else
  506. {
  507. CBassFreq=1/(2*PI*RTrebleFreq*FHigh);
  508. printf("%s%f", MSG_DISPLAY_CBassFreq, CBassFreq );
  509. state=ST_MAIN;
  510. printf("%s", MSG_CONTINUE );
  511. scanf(" %c", any_key );
  512. }
  513. }while(try_again_flag);
  514. }while(try_again_flag);
  515. break;
  516. }
  517.  
  518. } while (MENU=!ST_EXIT);
  519. }
  520. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement