home *** CD-ROM | disk | FTP | other *** search
- From: tommi@stekt.oulu.fi (Tommi V. Kaikkonen ti)
- Newsgroups: alt.sources
- Subject: sounds w/o guitar/piano (sointu.c)
- Message-ID: <TOMMI.90Sep3040820@stekt.oulu.fi>
- Date: 3 Sep 90 01:04:17 GMT
-
- /**************************************************************************
- * *
- * sointu.c - to examine sounds of guitar with or without one *
- * (C) Tommi Kaikkonen 1990 *
- * InterNet: tommi@stekt.oulu.fi *
- * *
- **************************************************************************/
- #define C0Frequency (261.6250)
- #define MFrequency (1.05946309434)
- char Frequency[56][10];
-
- #include <stdio.h>
- int String[6]={4, 9, 14, 19, 23, 28 };
- int BinPow[8]={1, 2, 4, 8, 16, 32, 64, 128 };
-
- int abs(i1)
- int i1;
- {
- int r=0;
- if(i1<0) r=-i1;
- if(i1>0) r=i1;
- return(r);
- }
-
- char sgn(i1)
- int i1;
- {
- char r;
- if(i1<0) r='-';
- if(i1>=0) r='+';
- return(r);
- }
-
- pianok(i1,i2,c1)
- int i1;
- char *c1;
- {
- c1[0]=' ';
- if(i1&BinPow[i2]) c1[0]='O';
- else if(i1) c1[0]='.';
- }
-
- add_oct(s1,i1)
- char *s1;
- int i1;
- {
- int i;
- i=strlen(s1);
- s1[i]='1'+i1;
- s1[i+1]='\000';
- }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int i,j;
- int previous;
- char abuffer[80];
- char m;
- int piano[12];
- float freq;
- int Note[56][6];
- /* #C #D #F #G #A */
- /* C D E F G A B */
- /* 0 2 4 5 7 9 11 */
- for(i=0;i<12;i++) piano[i]=0;
- for(i=0;i<55;i++)
- {
- j=i%12;
- switch(j)
- {
- case 0:strcpy(Note[i],"C");
- break;
- case 1:strcpy(Note[i],"#C");
- break;
- case 2:strcpy(Note[i],"D");
- break;
- case 3:strcpy(Note[i],"#D");
- break;
- case 4:strcpy(Note[i],"E");
- break;
- case 5:strcpy(Note[i],"F");
- break;
- case 6:strcpy(Note[i],"#F");
- break;
- case 7:strcpy(Note[i],"G");
- break;
- case 8:strcpy(Note[i],"#G");
- break;
- case 9:strcpy(Note[i],"A");
- break;
- case 10:strcpy(Note[i],"#A");
- break;
- case 11:strcpy(Note[i],"B");
- break;
- default:perror("sointu: Strange error...");
- exit(3);
- }
- add_oct(Note[i],i/12);
- }
- freq=C0Frequency;
- for(i=0;i<55;i++)
- {
- sprintf(abuffer,"%4.4f",freq);
- strncpy(Frequency[i]," ",9-strlen(abuffer));
- strcat(Frequency[i],abuffer);
- freq=freq*MFrequency;
- }
-
- if(argc<7)
- {
- puts("sointu - (C) Tommi Kaikkonen 1990, tommi@stekt.oulu.fi");
- puts(" Usage:");
- puts("sointu <E1-string> <A1-string> <D2-string> <G2-string> <B2-string> <E2-string>");
- puts(" If the string is played freely give 0 as input for it.");
- puts(" If the string is not played at all give X or - as input for it.");
- puts(" For example sound C is entered for this program in the following way:");
- puts("sointu 0 3 2 0 1 0");
- perror("sointu: Not enough input for the strings.");
- exit(1);
- }
- for(i=1;i<7;i++)
- {
- if(argv[i][0]!='X'&&argv[i][0]!='x'&&argv[i][0]!='-'&&
- argv[i][0]!='0'&&(atoi(argv[i])<1||atoi(argv[i])>24))
- {
- sprintf(abuffer,"sointu: Incorrect formula of the state of a string.");
- for(j=1;j<7;j++)
- {
- strcat(abuffer," ");
- if(j==i) strcat(abuffer,"(_");
- strcat(abuffer,argv[j]);
- if(j==i) strcat(abuffer,"_)");
- }
- strcat(abuffer,"\"");
- perror(abuffer);
- exit(2);
- }
- }
- puts("The sound with guitar:");
- previous=0;
- for(i=1;i<7;i++)
- {
- if(argv[i][0]!='x'&&argv[i][0]!='X'&&argv[i][0]!='-')
- {
- printf
- (
- " \"%s\": %2d %c %2d = %2d (%3s) / %4s Hz\n",
- Note[String[i-1]],
- previous,
- sgn(String[i-1]+atoi(argv[i])-previous),
- abs(String[i-1]+atoi(argv[i])-previous),
- String[i-1]+atoi(argv[i]),
- Note[String[i-1]+atoi(argv[i])],
- Frequency[String[i-1]+atoi(argv[i])]
- );
- piano
- [
- (String[i-1]+atoi(argv[i]))%12]|=BinPow[(String[i-1]+atoi(argv[i]))/12
- ];
- previous=String[i-1]+atoi(argv[i]);
- }
- }
- puts("The sound on piano keyboard;");
- printf("_C1_D__E__F__G__A__B__C2_D__E__F__G__A__B__C3_D__E__F__G__A__B_\n");
- printf("| | || | | | || || | | | || | | | || || | | | || | | | || || | \n");
- /* |1|1||3| | |6||8||1| |2|1||3| | |6||8||1| |3|1||3| | |6||8||1| */
- /* |O|_||_| | |_||_||0| |O|_||_| | |_||_||0| |O|_||_| | |_||_||0| */
- /* |0 |2 |4 |5 |7 |9 |11|0 |2 |4 |5 |7 |9 |11|0 |2 |4 |5 |7 |9 |11 */
- /* |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__ */
- for(i=0;i<3;i++)
- {
- pianok(piano[1],i,&m);
- printf("| |%c",m);
- pianok(piano[3],i,&m);
- printf("||%c",m);
- pianok(piano[6],i,&m);
- printf("| | |%c",m);
- pianok(piano[8],i,&m);
- printf("||%c",m);
- pianok(piano[10],i,&m);
- printf("||%c| ",m);
- }
- printf("\n| |_||_| | |_||_||_| | |_||_| | |_||_||_| | |_||_| | |_||_||_| \n");
- for(i=0;i<3;i++)
- {
- for(j=0;j<12;j+=2)
- {
- if(j==6) j--;
- pianok(piano[j],i,&m);
- printf("|%c ",m);
- }
- }
- printf("\n|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__\n");
- }
-