- #include <stdio.h> 
- #include <stdarg.h> 
- #include <stdint.h> 
- #include <limits.h> 
- #include <math.h> 
- #include <stdlib.h> 
- #include <string.h> 
- #define C 0 
- #define D 2 
- #define E 4 
- #define A 9 
- struct _WaveHeader_ 
- { 
-   char     chunk_id_[4]; 
-   uint32_t chunk_size_; 
-   char     riff_type_[4]; 
-   
-   char     fmt_header_[4]; 
-   uint32_t fmt_length_; 
-   uint16_t format_tag_; 
-   uint16_t channels_; 
-   uint32_t sample_rate_; 
-   uint32_t bytes_per_sec; 
-   uint16_t frame_size_; 
-   uint16_t bits_per_sample_; 
-   
-   char     data_header_[4]; 
-   uint32_t data_length_; 
- } __attribute__((packed)); 
-   
-   
- //main funkcija 
- int main(int argc, char *argv[]) 
- { 
-   char msg1[] = "Usage: ./assa [-bpm <beats_per_min>] [-o <output_file>] <input_files>\n"; 
-   char msg2[] = "Error: can not read input file.\n"; 
-   char msg3[] = "Error: invalid input file.\n"; 
-   char msg4[] = "Error: can not write output file.\n"; 
-   char msg5[] = "Error: out of memory.\n"; 
-   
-   char *filename = "out.wav"; 
-   int bpm = 120; 
-   char *p_bpm = NULL; 
-   char *p_o = NULL; 
-   int i,k; 
-   char** text = ".txt"; 
-   printf("%s",text); 
-   for(i=1; i<argc; i++) 
-   { 
-   
-   } 
-   
-  for(i=1; i<argc; i++) 
-   { 
-    if (strcmp(argv[i],"-bpm")==0)//          || 
-    { 
-     if(i+1==argc) 
-      { 
-       printf(msg1); 
-       return 1; 
-      } 
-      else 
-       {bpm=atoi(argv[i+1]);} 
-    } 
-   
-   if(strcmp(argv[i],"-o")==0) 
-   { 
-    if(i+1==argc) 
-    { 
-     printf(msg1); 
-     return 1; 
-    } 
-    else 
-    {filename = argv[i+1];} 
-   } 
-   } 
-   
-   
-   FILE *file = fopen(filename, "wb"); 
-   if (file == NULL) 
-     return 2; 
-   
-    uint32_t sample_rate = 44100; 
-    uint32_t sample_full_note = (sample_rate * 60 * 4)/bpm; //88200 na 120 bpm 
-    //float duratation = 0.5; 
-    uint32_t total_samples = 10 * sample_full_note; 
-   
-    writeWaveHeader(file, total_samples); 
-   
-   
-     makeTone(file, frequency(D,2), sample_full_note/8);//D----EXAMPLE----- 
-     makeTone(file, frequency(-1,4), sample_full_note/8);//E 
-     makeTone(file, frequency(-1,5), sample_full_note/8);//F 
-     makeTone(file, frequency(-1,7), sample_full_note/8);//G 
-     makeTone(file, frequency(-1,9), sample_full_note/8);//A 
-     makeTone(file, frequency(-1,4), sample_full_note/8);//E 
-     makeTone(file, frequency(-1,9), sample_full_note/4);//A 
-     makeTone(file, frequency(-1,8), sample_full_note/8);//G# 
-     makeTone(file, frequency(-1,4), sample_full_note/8);//E 
-     makeTone(file, frequency(-1,8), sample_full_note/4);//G# 
-     makeTone(file, frequency(-1,7), sample_full_note/8);//G 
-     makeTone(file, frequency(-1,3), sample_full_note/8);//Eb 
-   
-   
-   
-   
-   //} 
-   fclose(file); 
-   
-   return 0; 
- } 
-   
- int open_txt(char* text_name) 
- { 
-  char chars = 0; 
-  FILE *text_file; 
-  text_file = fopen("mountain1.txt","r"); 
-  if(text_file==0) 
-  { 
-   printf("Error: can not read input file.\n"); 
-   return 2; 
-  } 
- } 
-   
-   
- int writeWaveHeader(FILE *file, uint32_t total_samples) 
- { 
-   struct _WaveHeader_ header; 
-   strcpy(header.chunk_id_, "RIFF"); 
-   header.chunk_size_ = 2 * total_samples + 8 + 24 + 4; 
-   strcpy(header.riff_type_, "WAVE"); 
-   strcpy(header.fmt_header_, "fmt "); 
-   header.fmt_length_ = 16; 
-   header.format_tag_ = 1; // PCM 
-   header.channels_ = 1; // mono channel 
-   header.sample_rate_ = 44100; 
-   header.bits_per_sample_ = 16; // short type 
-   header.frame_size_ = header.channels_ * ((header.bits_per_sample_ + 7) / 8); 
-   header.bytes_per_sec = header.sample_rate_ * header.frame_size_; 
-   strcpy(header.data_header_, "data"); 
-   header.data_length_ = 2*total_samples; 
-   
-   if (fwrite(&header, sizeof(header), 1, file) != 1) 
-     return 4; 
-   
-   return 0; 
- } 
-   
-   
-   
- int frequency(int octave,int offset) 
- { 
-  int note_num; 
-  note_num = (5 + octave) * 12 + offset; 
-  printf(" midi je %d\n",note_num); 
-   
-  float offset_num = 12; 
-  float exp = (note_num - 69) / offset_num; 
-  float f; 
-  f = pow(2,exp)*440; 
-  printf("frekvencija je %f",f); 
-  return f; 
- } 
-   
-   
- int makeTone(FILE *file, uint32_t freq, uint32_t ton_duratation) 
- { 
-  printf("%d\n",freq); 
-   uint32_t sample_count; 
-   for (sample_count = 1; sample_count <= ton_duratation; sample_count++) 
-   { 
-     double time = ((sample_count) / (44100.00)) * freq; 
-     short int buff = (65535) * (0.5 * sin(time * 2.0 * M_PI) + 0.5); 
-     fwrite(&buff, sizeof(buff), 1, file); 
-   
-   } 
-   return 0; 
- }