Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Music Teacher - music_teacher.c

music_teacher.c

Caricato da:
Scarica il programma completo

  1. /*      File:   music_teacher.c
  2.         Autore: Stefano - ste_funk
  3.         Anno:   2006
  4.         Vers:   0.0.1
  5.         Info:   Realizzato su piattaforma GNU/LInux, ma portabile
  6.                 senza problemi su Windows o altri.
  7.                 Music Teacher possiede un algoritmo per il calcolo dinamico delle scale Maggiori
  8.                 e relative Minori. Utilizza la notazione estera:
  9.                 C: do - D: re - E: mi - F: fa - G: sol
  10.                 A: la - B: si                  
  11.                 Su Linux compilate con:
  12.                 gcc music_teacher.c -o music_teacher
  13.                 gcc music_teacher -c
  14.                 Ed eseguite con:
  15.                 ./music_teacher
  16.         Note:   This program is free software; you can redistribute it and/or modify
  17.                 it under the terms of the GNU General Public License as published by
  18.                 the Free Software Foundation.
  19. */
  20.  
  21. #include <stdio.h>
  22.  
  23. float cod_note[]={67,68,69,70,71,65,66}, scala_utilizz[]={67,68,69,70,71,65,66};
  24. int int_scala_mag[]={ 2,2,1,2,2,2,1};
  25.  
  26.  
  27. void stampa_menu(int option[]);
  28. void stampa_note(int option[]);
  29. int crea_scala(int option[]);
  30. void stampa_variazione(int indice, int option[]);
  31.  
  32. int main(){
  33. int scelte[3], *pnt_to_scelte;
  34. pnt_to_scelte=scelte;
  35. stampa_menu(pnt_to_scelte);
  36. crea_scala(pnt_to_scelte);
  37. stampa_note(pnt_to_scelte);
  38.                
  39. return 0;
  40. }
  41.  
  42. int crea_scala(int option[]){
  43.  
  44. float array_note[7];
  45. int n, i, k, grado=0;
  46.  
  47.         for(n=0;n<option[0];n++){
  48.                 for(i=0;i<7;i++){
  49.                         if(int_scala_mag[i]!=int_scala_mag[grado] && int_scala_mag[grado]==option[1])
  50.                                 array_note[i]=scala_utilizz[grado]+0.5;
  51.                
  52.                         else
  53.                                 array_note[i]=scala_utilizz[grado];
  54.                        
  55.                         grado++;
  56.                         if(grado>6)
  57.                                 grado=0;
  58.                 }
  59.        
  60.         grado=option[2];
  61.  
  62.         for(k=0;k<7;k++)
  63.                 scala_utilizz[k]=array_note[k];
  64.         }
  65. return 0;
  66. }              
  67. void stampa_menu(int option[]){
  68. printf("\n\n\t******************************************************\n");
  69. printf("\t**                Music Theacher v0.0.1             **\n");
  70. printf("\t******************************************************\n\n");
  71. printf("\t1 - C Maggiore (A minore)\t2 - G Maggiore(E minore)\n");
  72. printf("\t3 - D Maggiore (B minore)\t4 - A Maggiore(F# minore)\n");
  73. printf("\t5 - E Maggiore (C# minore)\t6 - B Maggiore(G# minore)\n");
  74. printf("\t7 - F# Maggiore (D# minore)\t8 - C# Maggiore(A# minore)\n\n");
  75. printf("\t9 - F Maggiore (D minore)\t10 - Bb Maggiore(G minore)\n");
  76. printf("\t11 - Eb Maggiore (C minore)\t12 - Ab Maggiore(F minore)\n");
  77. printf("\t13 - Db Maggiore (Bb minore)\t14 - Gb Maggiore(Eb minore)\n");
  78. printf("\t15 - Cb Maggiore (Ab minore)\n\n");
  79. printf("\tInserisci il numero della scala maggiore: ");
  80. scanf("%d \n", &option[0]);
  81.  
  82. if(option[0]<9){
  83.         option[1]=2;
  84.         option[2]=4;
  85. }
  86. else if(option[0]>8){
  87.         option[0]=option[0]-7;
  88.         option[1]=1;
  89.         option[2]=3;
  90. }
  91.  
  92. }
  93. void stampa_note(int option[]){
  94. int j=0,k=5;
  95.  
  96.        
  97.        
  98.         printf("\n\tScala di ");
  99.         stampa_variazione(j, option);
  100.         printf("maggiore:\t");
  101.         for(j=0;j<7;j++){
  102.                 stampa_variazione(j, option);
  103. }
  104.         printf("\n\t\tRelativa ");
  105.         stampa_variazione(k, option);
  106.         printf("minore: \t");
  107.         for(j=0;j<7;j++){
  108.                 stampa_variazione(k, option);  
  109.                 k++;
  110.                 if(k>6)
  111.                         k=0;
  112.         }
  113.         printf("\n\n");
  114. }
  115.  
  116. void stampa_variazione(int indice, int option[]){
  117. int parte;
  118.  
  119.         parte=scala_utilizz[indice];
  120.  
  121.                 if((scala_utilizz[indice]- parte)!=0 && option[2]==4)
  122.                         printf("%c# ", parte);
  123.                 else if((scala_utilizz[indice]- parte)!=0 && option[2]==3)
  124.                         printf("%cb ", parte);
  125.                 else
  126.                         printf("%c ", parte);  
  127. }