clear all;
clc;

gain=1.0; % SW nastaveni zisku
max_len = 31200; % maximalni delka zaznamu

[datain, fs, nbits]=wavread('medical006.wav'); %nactu wav - tady zmente jmeno souboru
[length,width]=size(datain); % zjistim velikost wav

% detekce sterea
if width>1
 printf("Stereo - orezavam jeden kanal\n\r");
else
 printf("Mono\n\r");
end 

% pokud je to stereo, vyhodim jeden kanal
% orezani dlouhych dat na max_len
if length>max_len
  data(1:max_len,1)=datain(1:max_len,1);
  printf("dlouha wav (%u) - orezavam na %u kB\n\r",length,max_len);
else
  data(1:length,1)=datain(1:length,1);
  printf("kratka wav %u kB\n\r",length);
end


printf("Samplovaci frekvence WAV souboru je %u Sps",fs);
% pokud je vysoka frekvence (vetsi jak 23k - typicky 44.1k) , snizime ji na polovinu (uspora pameti)
if fs>23000
 printf(" ... resampluji na %u",fs/2);
data=data(1:2:end); % pevzorkovat (ber kazdy druhy vzorek)
fs=fs/2; % frekvence je ted polovicni
end
printf("\n\r");
% pokud je frekvence nizka neni potreba prevzorkovavat

% mùžeme prozkoumat jak je na tom hlasitost
printf("uroven hlasitosti: max = %u, min = %u\n\r",max(data),min(data));



timer=floor(16e6/fs-1); % perioda pro timer v atmelu (nastavuje rychlost prehravani)
fid=fopen('sample.h','w'); % sem budeme zapisovat vytup
[length,w]=size(data); % nacteme rozmery pole po upravach (prevzorkovani, orezani atd)
printf("delka wav %u\n\rsampling %u\n\rtimer %u\n\r",length,fs,timer); % shrnuti parametru

fprintf(fid,"\n#define PER %u\n\r",timer); % kusy C kodu pro atmel
fprintf(fid,"\n#define SAMPLES %u\n\r",length);
fprintf(fid,"\nconst char data[SAMPLES] PROGMEM = {\n");

for i=1:1:length % projed cele pole dat
  tmp=floor((gain*128*data(i))+128); % roztahneme data na rozsah 0-255 + aplikujeme SW zisk
  if tmp>255 % drobna ochrana vystupnich dat (neni vhodne aby uint8 byl vetsi jak 255 ;)
    tmp=255;
  end
  if tmp<0 % ochrana vystupnich dat (program neni dost testovan abych mu veril)
    tmp=0;
  end
  if i!=length % hledame posledni polozku v poli, za ni totiz nebude carka :D
    fprintf(fid,"%u,",tmp); % zapisujeme do textoveho souboru prvky pole
  else
    fprintf(fid,"%u",tmp); % poslednÃ­ prvek za sebou nema carku !
  end
  
  if mod(i,8)==0  % slusne formatovani textu (v radcich po 8mi zaznamech)
    fprintf(fid,"\n"); 
  endif
endfor

fprintf(fid,"};\n\r") % posledni kus C kodu pro atmel

fclose(fid); % zavreni souboru

printf("samples: %u\n\r",length); % maly report