Temperiranje zvuka - programi
//Program 1. //C++, znakovna konstanta \a , preko ASCII koda #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ cout << char(7)<< " "; sleep(1); return 0; }
//Program 2. //C++, znakovna konstanta \a #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ cout << "\a"; sleep(1); return 0; }
//Program 3. //C++, naredba beep #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ Beep(440, 1000);//440Hz, u trajanju 1000 milisekundi sleep(1); return 0; }
//Program 4. //C++, mis kao glazbeni instrument //treba ga pomicati "vodoravno" #include <iostream> #include <windows.h> using namespace std; int main(){ float x = 1; float sirina = GetSystemMetrics(SM_CXSCREEN); const double k = 19980 / sirina; POINT cursorPos; while(1){ GetCursorPos(&cursorPos); Beep(cursorPos.x * k + 20,1000); } return 0; }
//Program 5. //C++, brza proporcionalna setnja (sa preskakanjem) kroz frekvencije (od 0 do 30KHz) #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ int i=0; while(i<30000){ i=i+1000; Beep(i, 1000); sleep(1); } return 0; }
//Program 6. //C++, samo oktave (2/1) #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ int i; int osnova=55; int a=osnova; i=0; while(a<20000){ cout << a << endl; Beep(a,700); sleep(1); a=a*2; i++; } return 0; }
//Program 7. //C++, samo kvinte (3/2) #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ int i; float osnova=440; float a=osnova; i=0; while(a<20000){ cout << a << endl; Beep(a,700); sleep(1); a=a*3/2; i++; } return 0; }
//Program 8. //C++, kvinte koje prebacujemo u osnovnu oktavu (cim "izadu" iz nje) #include <iostream> using namespace std; #include <windows.h> #include <unistd.h> int main(){ int i; float osnova=440; float a=osnova; i=0; while(i<=12){ cout << a << endl; Beep(a,700); sleep(1); a=a*3/2; if(a>2*osnova){a=a/2;} i++; } return 0; }
//Program 9. //C++, kvinte kopiramo u polje t #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ int i; float osnova=440; float a=osnova; float t[13]; i=0; while(i<=12){ cout << a << endl; Beep(a,700); sleep(1); t[i]=a; a=a*3/2; if(a>2*osnova){a=a/2;} i++; } t[12]=2*t[12];//kraj cout << t[12] << " kraj" <<endl; return 0; }
//Program 10. //C++, kvinte odsvirane i kao ljestvica #include <iostream> #include <windows.h> #include <unistd.h> using namespace std; int main(){ int i,j; float osnova=440; float a=osnova; float m; float t[13]; i=0; while(i<=12){ Beep(a,700); sleep(1); t[i]=a; a=a*3/2; if(a>2*osnova){a=a/2;} i++; } t[12]=2*t[12];//kraj, tu je samo radi muzickog ugodjaja //posložimo od manje ka vecoj frekvenciji for(i=0;i<=11;i++) { for(j=i+1;j<=12;j++) { if(t[i]>t[j]) { m=t[i]; t[i]=t[j]; t[j]=m; } } } sleep(2); //i ljestvica je: for(i=0;i<=12;i++) { cout << i << char(9) << t[i] << " Hz"<< endl; Beep(t[i],700); sleep(1); } return 0; }
//Program 11. //C++, prikaz Lissajoues krivulja //-koristi se osnovna formula //y=a*sin(w*t+fi),w=2*pi*f //-za ovaj program treba i grafički dodatak za C++ #include <windows.h> #include <math.h> #include <graphics.h> #include <iostream> using namespace std; int main(){ //float yg,vg,ag,v,vs,a,as; float sirina = GetSystemMetrics(SM_CXSCREEN); const double k = 19980 / sirina; float visina = GetSystemMetrics(SM_CYSCREEN); POINT cursorPos; GetCursorPos(&cursorPos); visina=visina-160; float x, y, xs,ys; int i; float a,j,fi,koef; initwindow(sirina,visina); //line(sirina/2-250,visina/2,sirina/2+250,visina/2); //line(sirina/2-250,visina/2,sirina/2-250,visina/2-200); //float prva = sirina/2-250; a=100; fi=0;//3.1419/2 koef=0;//koeficijent vise frekvencija na x osi while(1) { koef=koef+1; i=0; j=i; x = a*sin(koef*2*3.1419*j+fi)+sirina/2; y = a*sin(2*3.1419*j)+visina/2; while(i<100*koef){ i++; j=i; //GetCursorPos(&cursorPos); xs=x; ys=y; x = a*sin(koef*2*3.1419*j/(100*koef)+fi)+sirina/2; y = a*sin(2*3.1419*j/(100*koef))+visina/2; line(xs,ys,x,y); //putpixel(x,y,WHITE); Sleep(1);//? } //closegraph(); cleardevice(); i=0; } }
//Program 12. //C++, oktave tonova a #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ int i,d; float osnova=440; d=700;//duljina trajanja i=-4; while(i<6){ Beep(osnova*pow(2,i),d); sleep(1); i++; } return 0; }
//Program 13. //C++, kromatska ljestvica - proporcionalizacija izmedju oktava //(naivni linearni pristup) #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=440; float d; int i; int j; i=-4; while(i<6){ d=(osnova*pow(2,(i+1))-osnova*pow(2,i))/12; //iskoristio sam prolazak pravca kroz dvije tocke j=0; while(j<12){ cout << osnova*pow(2,i)+j*d << " Hz" << endl; Beep(osnova*pow(2,i)+j*d,200); sleep(1); j++; } i++; } return 0; }
//Program 14. //C++, kromatska ljestvica - eksponencijalni pristup #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=440; int i; i=-4*12; while(i<6*12){ cout << 440*pow(2,float(i)/12)<< " Hz" << endl; Beep(440*pow(2,float(i)/12),200); sleep(1); i++; } return 0; }
//Program 15. //C++, tetrakord, jedan od tetrakorda #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=440; int i; float ton; i=3; while(i<9){ if((i%12!=4)&&(i%12!=6)) { ton=osnova*pow(2,float(i)/12); cout << ton << endl; Beep(ton,700); sleep(1); } i++; } return 0; }
//Program 16. //C++, pentatonska ljestvica, jedna od pentatonskih ljestvica #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=440; int i; float ton; i=0; while(i<13){ if((i%12==0)||(i%12==2) ||(i%12==4)||(i%12==7)||(i%12==9)) { ton=osnova*pow(2,float(i)/12); cout << ton << endl; Beep(ton,700); sleep(1); } i++; } return 0; }
//Program 17. //C++, C dur ; A1(440Hz) je osnovna frekvencija #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=440; int i; float ton; i=3; while(i<16){ if((i%12!=4)&&(i%12!=6) &&(i%12!=9)&&(i%12!=11)&&(i%12!=1)) { ton=osnova*pow(2,float(i)/12); cout << ton << " Hz" << endl; Beep(ton,700); sleep(1); } i++; } return 0; }
//Program 18. //C++, C dur ; C2(523.3Hz) je osnovna frekvencija #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=523.3; int i; i=0; while(i<13){ if((i%12!=1)&&(i%12!=3) &&(i%12!=6)&&(i%12!=8)&&(i%12!=10)) { cout << osnova*pow(2,float(i)/12) << " Hz" << endl; Beep(osnova*pow(2,float(i)/12),700); sleep(1); } i++; } return 0; }
//Program 19. //C++, a mol ; A1(440) je osnovna frekvencija #include <windows.h> #include <unistd.h> #include <iostream> #include <tgmath.h> using namespace std; int main(){ float osnova=440; int i; i=0; while(i<13){ if((i%12!=1)&&(i%12!=4) &&(i%12!=6)&&(i%12!=9)&&(i%12!=11)) { cout << osnova*pow(2,float(i)/12) << " Hz" << endl; Beep(osnova*pow(2,float(i)/12),700); sleep(1); } i++; } return 0; }
//Program 20. //Arduino, kromatika //koristi se MKR1000, sa //slusalicama(ili zvucnikom) kao izlazom na pin 6 int i,j,t; double ii,e,f; double f0=220; void setup() { Serial.begin(9600); //while(!Serial); pinMode(6, OUTPUT); // X } void loop() { for(i=1;i<=72;i++) { ii=i; e=ii/12; f=f0*pow(2,e); t=int(1/f/2*1000000); if(i%12==1){Serial.print("AIS");} if(i%12==2){Serial.print("H ");} if(i%12==3){Serial.print("C ");} if(i%12==4){Serial.print("CIS");} if(i%12==5){Serial.print("D ");} if(i%12==6){Serial.print("DIS");} if(i%12==7){Serial.print("E ");} if(i%12==8){Serial.print("F ");} if(i%12==9){Serial.print("FIS");} if(i%12==10){Serial.print("G ");} if(i%12==11){Serial.print("GIS");} if(i%12==0){Serial.print("A ");} Serial.print(i/12); Serial.print( " , frekvencija: "); Serial.print(f); Serial.print(", perioda: "); Serial.println(t); for(j=1;j<=f;j++) { digitalWrite(6, true); delayMicroseconds(t); digitalWrite(6, false); delayMicroseconds(t); } } }
//Program 21. //Arduino, dijatonska ljestvica, C dur //koristi se MKR1000, sa //slusalicama(ili zvucnikom) kao izlazom na pin 6 int i,j,t; double ii,e,f; double f0=220; void setup() { Serial.begin(9600); //while(!Serial); pinMode(6, OUTPUT); // X } void loop() { //C dur for(i=3;i<=72;i++) { if((i%12!=1)and(i%12!=4)and(i%12!=6)and(i%12!=9)and(i%12!=11)) { ii=i; e=ii/12; f=f0*pow(2,e); t=int(1/f/2*1000000); Serial.print(i/12); Serial.print( " , frekvencija: "); Serial.print(f); Serial.print(", perioda: "); Serial.println(t); for(j=1;j<=f;j++) { digitalWrite(6, true); delayMicroseconds(t); digitalWrite(6, false); delayMicroseconds(t); } } } }
//Program 22. //Arduino, ulazne frekvencije, proporcionalni pristup //koristi se MKR1000, sa potenciometrom kao ulazom na A1 i //slusalicama(ili zvucnikom) kao izlazom na pin 6 float data; int analogChannel1=A1; bool x; float fmaxx=440; float fminn=220; float f; float datamax=500; int t; void setup() { Serial.begin(9600); //while(!Serial); pinMode(6, OUTPUT); // X } void loop() { data = analogRead(analogChannel1); //Serial.println(data); //delay(1000); f=(fmaxx-fminn)*data/datamax+fminn; t=int(1/f/2*1000000); //Serial.println(t); digitalWrite(6, true); delayMicroseconds(t); digitalWrite(6, false); delayMicroseconds(t); //delay(1000); }
//Program 23. //Arduino, ulazne valne duljine(violina) //koristi se MKR1000, sa potenciometrom kao ulazom na A1 i //slusalicama(ili zvucnikom) kao izlazom na pin 6 float data; int analogChannel1=A1; bool x; float max; float min; float f; float datamax=500; int t; void setup() { // Serial.begin(9600); //while(!Serial); pinMode(6, OUTPUT); // X } void loop() { data = analogRead(analogChannel1); f=440/(1+data/datamax); t=int(1/f/2*1000000); //Serial.println(t); digitalWrite(6, true); delayMicroseconds(t); digitalWrite(6, false); delayMicroseconds(t); }
//Program 24. //Arduino, ulazne valne duljine(gitara) //koristi se MKR1000, sa potenciometrom kao ulazom na A1 i //slusalicama(ili zvucnikom) kao izlazom na pin 6 float data; int analogChannel1=A1; bool x; float max; float min; float f; float datamax=500; int t; void setup() { // Serial.begin(9600); //while(!Serial); pinMode(6, OUTPUT); // X } void loop() { data = analogRead(analogChannel1); f=440/(1+data/datamax);//prava formula if(f>415.3)f=440; else if(f>392.0)f=415.3; else if(f>370.0)f=392.0; else if(f>349.2)f=370.0; else if(f>329.6)f=349.2; else if(f>311.1)f=329.6; else if(f>293.7)f=311.1; else if(f>277.2)f=293.7; else if(f>261.6)f=277.2; else if(f>246.9)f=261.6; else if(f>233.1)f=246.9; else if(f>220.0)f=233.1; else if(f>207.7)f=220; t=int(1/f/2*1000000); Serial.println(f); digitalWrite(6, true); delayMicroseconds(t); digitalWrite(6, false); delayMicroseconds(t); }
//Program 25. //Arduino, ulazni polutonski razmaci(kromatski pristup, jedna oktava) //koristi se MKR1000, sa potenciometrom kao ulazom na A1 i //slusalicama(ili zvucnikom) kao izlazom na pin 6 float data, sdata; int analogChannel1=A1; bool x; float max; float min; float f; float f0=440; float datamax=500;//500 ili 1023 int t; float e; void setup() { // Serial.begin(9600); //while(!Serial); pinMode(6, OUTPUT); // X } void loop() { sdata=data; data = analogRead(analogChannel1); f=f0*pow(2,(roundf(12*data/datamax)/12));//prava formula //f=f0*pow(2,(roundf(12*((data+sdata)/2)/datamax)/12));//izbjegavanje smetnji t=int(1/f/2*1000000); //Serial.print(data); //Serial.print(" "); //Serial.println(f);//rondf(12*data/datamax)); digitalWrite(6, true); delayMicroseconds(t); digitalWrite(6, false); delayMicroseconds(t); //delay(1000); }
//Program 26. //Arduino, testiranje duljina trajanja naredbi //koristi se Serial monitor long int i; bool a[1001]; int j=0; unsigned long ttime[1001]; unsigned long t1,t2; void setup() { Serial.begin(9600); while(!Serial); pinMode(6, INPUT_PULLUP); //while(!Serial); Serial.println("Pocetak"); t1=micros(); for(i=1;i<=1000;i++) { // a[i]=digitalRead(6);//1 us //ttime[i] = micros();//2 us } t2=micros(); Serial.println("Kraj"); Serial.println((t2-t1)/1000); }
//Program 27. //Arduino, sinus; svakih 70 minuta ima gresku, //jer brojilo za micros() ide u 0 //-koristi se MKR1000, sa //slusalicama(ili zvucnikom) kao izlazom //na analogni izlaz A0 (ili pin 6 ?) int y; void setup() { pinMode(6, OUTPUT); // X } void loop() { y=128+127*sin(2*3.1419*440*micros()/1000000);//y=A*sin(wt) //analogWrite(6, y); analogWrite(A0, y); }