/*
----------------------------------------------------------------------------------------
TABLA   DB #A0,#A1,#A1,#A2,#A3,#A3
DS 3,#A4
DS 3,#A5
DS 5,#A6
DS 7,#A7
DS 8,#A8
DS #D,#A9
DS #F,#AA
DS #1A,#AB
DS #1E,#AC
DS #31,#AD
DS #36,#AE
DS #25,#AF

  на входе (L) байт исходной громкости, из таблицы берём значение, кидаемое в AY
   (#a0 можешь игнорировать, это для программирования AY через порт #fd :)).
   ----------------------------------------------------------------------------------------
*/


bool FindSign(unsigned char *data,int &ptr,int size,const char *sign)
{
	unsigned int aa,len;
	
	len=strlen(sign);
	
	for(aa=0;aa<size-len;aa++)
	{
		if(!memcmp(&data[aa],sign,len))
		{
			ptr=aa;
			return true;
		}
	}
	return false;
}


      #include "_log.h"

bool ImportWAV(int fxn,const char *filename)
{
	//грузим wav, берём амплитуду
	//также попытаться поюзать анализ спектра для доминирующей частоты
	//конвертить не больше. чем; учитывая частоту прерываний
	FILE *file;
	unsigned char *data;
	int aa,bb,size,ptr,pd;
    	int samples,chans,bits,rate;
        long int smp,vol,ifrq,icnt;
	
	file=fopen(filename,"rb");
	if(!file) return false;
	fseek(file,0,SEEK_END);
	size=ftell(file);
	fseek(file,0,SEEK_SET);
	data=(unsigned char*)malloc(size);
	fread(data,size,1,file);
	fclose(file);
	
	//парсинг заголовка
	
	ptr=0;
	
	if(!FindSign(data,ptr,size,"RIFF"))
	{
		Application->MessageBox("This is not WAVE file","Error",MB_OK);
		free(data);
		return false;
	}
	
	ptr+=4;
	if(!FindSign(data,ptr,size,"WAVEfmt "))
	{
		Application->MessageBox("This is not WAVE file","Error",MB_OK);
		free(data);
		return false;
	}
	
	if(RdWordLH(&data[ptr+12])!=1)
	{
		Application->MessageBox("Only unpacked PCM files supported","Error",MB_OK);
		free(data);
		return false;
	}
	
	chans=RdWordLH(&data[ptr+14]);
	rate=RdDWordLH(&data[ptr+16]);
	bits=RdWordLH(&data[ptr+26]);
	
	if(bits!=8&&bits!=16)
	{
		Application->MessageBox("Only 8/16bit samples supported","Error",MB_OK);
		free(data);
		return false;
	}
	
	ptr+=28;
	
	if(!FindSign(data,ptr,size,"data"))
	{
		Application->MessageBox("No DATA chunk in file","Error",MB_OK);
		free(data);
		return false;
	}
	
	samples=RdDWordLH(&data[ptr+4])/(bits>>3);
	ptr+=8;

	
	//конверсия
	EffectInit(fxn);

	ifrq=rate/50;  //? и что получится?
	
	vol=0;
	icnt=0;
	pd=0;

        //log_open("importer.txt");

	for(aa=0;aa<samples;aa++)
	{
		smp=0;
		for(bb=0;bb<chans;bb++)
		{
			if(bits==8)
			{
				smp+=((int(data[ptr++])-128)<<8);
			}
			else
			{
				smp+=((short int)RdWordLH(&data[ptr]));
				ptr+=2;
			}
		}
		vol+=(labs(smp)/chans);

		icnt++;
		if(icnt>=ifrq)
		{
			icnt=0;
			vol/=ifrq;

                       // char str[128];
                       // sprintf(str,"%i\n",vol);
                       // log_add(str);

			//сейчас у нас в vol накопленная громкость, и наступило прерывание
			vol/=1024;
			if(vol>15) vol=15;
			
			ayBank[fxn].ayEffect[pd].t=true;
			ayBank[fxn].ayEffect[pd].n=true;
			ayBank[fxn].ayEffect[pd++].volume=vol;

			
			if(pd>=max_fx_len) break;
			
			vol=0;
		}
	}
        //log_close();
	
	free(data);
	strcpy(ayBank[fxn].name,NameTrimPath(filename).c_str());
	
	return true;
}