sounds w/o guitar/piano (sointu.c)
Tommi V. Kaikkonen ti
tommi at stekt.oulu.fi
Mon Sep 3 11:04:17 AEST 1990
/**************************************************************************
* *
* sointu.c - to examine sounds of guitar with or without one *
* (C) Tommi Kaikkonen 1990 *
* InterNet: tommi at 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 at 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");
}
More information about the Alt.sources
mailing list