How to write Wav files in c++ 2011View more random threads:
- const. pointer or pointer to const. char
- many Header Files and which Header Files are being...
- what is the basic purpose of object oriented...
- using namespace std;"in the code can we compile the...
- forward declaration instead of header files in c++ 2011
- What is the object state. in c++ 2011
- virtual function and virtual inheritence
- Threaded Binary Tree? in C++ 2012
- Dangling Pointers Explain in C++
- ASCII code is binary numbers of 0 and 1 in C++ 2012
Code:#include <iostream> #include <math.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #define SECONDS 10 /* produce 10 second(s) of noise */ #define PI 3.14159265358979 using namespace std; int put_little_short(char *t, unsigned int value) { *(unsigned char *)(t++)=value&255; *(unsigned char *)(t)=(value/256)&255; return 2; } int put_little_long(char *t, unsigned int value) { *(unsigned char *)(t++)=value&255; *(unsigned char *)(t++)=(value/256)&255; *(unsigned char *)(t++)=(value/(256*256))&255; *(unsigned char *)(t)=(value/(256*256*256))&255; return 4; } /* returns the number of bytes written. skips two bytes after each write */ int fill_data(char *start, int frequency, int seconds) { int i, len=0; double value; for(i=0; i<seconds*44100; i++) { value=32767.0 * sin(2.0*PI*((double)(i))*(double)(frequency)/44100.0); put_little_short(start,int(value)); start += 4; len+=2; } return len; } int power(int a , int b) { int i=0; int product=1; for(i=0;i<b;i++) product*=a; return product; } int main() { int heblen,switchlen=0,gemarray[1000],shellinput=0,shellarray[10000],shelloutput=0,sshelloutput=0,sshellinput=0,sshellarray[100000]; string heb; cout<< "This is the hebrew letter scheme \t"; cout<< "A-Alef \t"; cout<< "B-Beth \t"; cout<< "G-Gyml \t"; cout<< "D-Dalet \t"; cout<< "H-He \t"; cout<< "V-Vau \t"; cout<< "Z-Zain \t"; cout<< "C-Chet \t"; cout<< "T-Teth \t"; cout<< "Y-Yod \t"; cout<< "K-Kaf \t"; cout<< "L-Lamed \t"; cout<< "M-Mem \t"; cout<< "N-Nun \t"; cout<< "S-Samek \t"; cout<< "I-Ain \t"; cout<< "P-Pey \t"; cout<< "O-Tsadhe \t"; cout<< "Q-Qof \t"; cout<< "R-Resh \t"; cout<< "E-Shin \t"; cout<< "F-Tav \t"; cout<< "k-final Kaf\t"; cout<< "m-final Mem\t"; cout<< "n-final Nun\t"; cout<< "p-final Pey\t"; cout<< "o-final Tsadhe\t"; cout<< "Input Hebrew phrase->\t"; getline(cin,heb); heblen=(sizeof heb)/(sizeof heb[0]); while (switchlen<=heblen) { switch(heb[switchlen]) { case 'A': gemarray[switchlen]=1000; break; case 'B': gemarray[switchlen]=2; break; case 'G': gemarray[switchlen]=3; break; case 'D': gemarray[switchlen]=4; break; case 'H': gemarray[switchlen]=5; break; case 'V': gemarray[switchlen]=6; break; case 'Z': gemarray[switchlen]=7; break; case 'C': gemarray[switchlen]=8; break; case 'T': gemarray[switchlen]=9; break; case 'Y': gemarray[switchlen]=10; break; case 'K': gemarray[switchlen]=20; break; case 'L': gemarray[switchlen]=30; break; case 'M': gemarray[switchlen]=40; break; case 'N': gemarray[switchlen]=50; break; case 'S': gemarray[switchlen]=60; break; case 'I': gemarray[switchlen]=70; break; case 'P': gemarray[switchlen]=80; break; case 'O': gemarray[switchlen]=90; break; case 'Q': gemarray[switchlen]=100; break; case 'R': gemarray[switchlen]=200; break; case 'E': gemarray[switchlen]=300; break; case 'F': gemarray[switchlen]=400; break; case 'k': gemarray[switchlen]=500; break; case 'm': gemarray[switchlen]=600; break; case 'n': gemarray[switchlen]=700; break; case 'p': gemarray[switchlen]=800; break; case 'o': gemarray[switchlen]=900; break; default: gemarray[switchlen]=0; break; } switchlen++; } while (shellinput<=switchlen) { int n=0, halfshell=gemarray[shellinput]/2,shell; if (gemarray[shellinput]<2) { shellarray[shelloutput]=gemarray[shellinput]; gemarray[shellinput]-=shellarray[shelloutput]; if (shellarray[shelloutput]>=1) { shellarray[shelloutput]=gemarray[shellinput]; } } if (gemarray[shellinput]>=2) { do { shell=2*power(n,2); if (gemarray[shellinput]<shell) { break; } gemarray[shellinput]-=shell; if (shell>=1) { shellarray[shelloutput]=shell; } n++; shelloutput++; } while (gemarray[shellinput]>=halfshell); while (gemarray[shellinput]-shell>=1) { shell=2*power(n,2); if (gemarray[shellinput]<shell) { break; } gemarray[shellinput]-=shell; if (shell>=1) { shellarray[shelloutput]=shell; } n--; shelloutput++; } } shell=gemarray[shellinput]; if (shell>=1) { shellarray[shelloutput]=shell; } shellinput++; } while (sshellinput<=shelloutput) { int l=0,sshell=0,sshelloutput=0,; if (shellarray[sshellinput]<2) { sshellarray[sshelloutput]=shellarray[sshellinput]; shellarray[sshellinput]-=sshellarray[sshelloutput]; if (sshellarray[shelloutput]>=1) { sshellarray[sshelloutput]=shellarray[sshelloutput]; } } if (shellarray[sshellinput]>=2) { do { sshell=2*((2*l)+1); if (shellarray[sshellinput]<sshell) { break; } shellarray[sshellinput]-=sshell; if (sshell>=1) { sshellarray[sshelloutput]=sshell; } l++; sshelloutput++; } while (shellarray[sshellinput]-sshell>=1); } if (shellarray[sshellinput]<sshell) { sshell=shellarray[sshellinput]; if (sshell>=1) { sshellarray[sshelloutput]=sshell; } } sshelloutput++; } { char *buffer=(char *)malloc(SECONDS*44100*4+1000); char *t=buffer; int len,wavindex=0; int fd; *t++='R'; *t++='I'; *t++='F'; *t++='F'; t+=4; /* total length will be put in later */ *t++='W'; *t++='A'; *t++='V'; *t++='E'; /* format chunk, 8 bytes header and 16 bytes payload */ *t++='f'; *t++='m'; *t++='t'; *t++=' '; t+=put_little_long(t,16); /* I know the length of the fmt_ chunk*/ t+=put_little_short(t,1); /* chunk type is always one */ t+=put_little_short(t,2); /* two channels */ t+=put_little_long(t,44100); /* samples per second */ t+=put_little_long(t,44100*2*2); /* bytes per second */ t+=put_little_short(t,4); /* bytes pro sample (all channels) */ t+=put_little_short(t,16); /* bits per sample */ /* data chunk, 8 bytes header and XXX bytes payload */ *t++='d'; *t++='a'; *t++='t'; *t++='a'; while (sshellarray[wavindex]>=1) { len=fill_data(t+4,(528*sshellarray[wavindex]),(SECONDS/sshelloutput)); /* left channel, 528Hz sine */ len+=fill_data(t+6,(528*sshellarray[wavindex]),(SECONDS/sshelloutput)); /* right channel, 528Hz sine */ put_little_long(t,len); put_little_long(buffer+4,len+8+16+8); wavindex++; } fd=open("test.wav", O_RDWR|O_CREAT|ios::app, 0644); write(fd,buffer,len+8+16+8+8); close(fd); return 0; } }
Sponsored Links
There are currently 1 users browsing this thread. (0 members and 1 guests)