/*******************************************************************************
 * Aleix Riera                                                                 *
 * www.fjarre.com/~aleix                                                       *
 * aleix@fjarre.com                                                            *
 *******************************************************************************/
void prepare_and_send_DSP(){
	//DATA BUFFER TRANSFER:
	//--------------------
	//	GlobalVolume
	//   	DelayTimeL
	//	DelayTimeR
	//	DelayFeedBack
	//   	MixThru
	//	MixLines
	//	MixDelay
	//EACH LINE:
	//	Volume0
	//	LFO0CutAmp
	//	LFO0ResAmp
	//	LFO0PanAmp
	//	LFO0iCutFreq
	//	LFO0fCutFreq
	//	LFO0iResFreq
	//	LFO0fResFreq
	//	LFO0iPanFreq
	//	LFO0fPanFreq
	//	K0Cut
	//	K0Res
	//	K0Pan
	//    	Send0
	//      LPFLevel
	//	BPFLevel
	//	HPFLevel
	//   	Sat0
	//---------------------

	//globalvolume
	dspData[0]=log_table[Volume];
	//delay
	dspData[1]=delaytime_table[Actual.D[0]];
	dspData[2]=delaytime_table[(int)(Actual.D[0]+Actual.D[2])/2];
	dspData[3]=nolog_table[Actual.D[1]];
	//global mix
	dspData[4]=nolog_table[Actual.Mix[0]];
	dspData[5]=nolog_table[Actual.Mix[1]];
	dspData[6]=nolog_table[Actual.Mix[2]];
	
	//****** LINE0 ******
	//LINE VOLUME
	dspData[7]=log_table[Actual.Line[0].Vol];
	if(!Actual.Line[0].Active)
		dspData[7]=log_table[0];
	//AMPLITUDES: 3 OSC PER LINE
	dspData[8]=amp_table[Actual.Line[0].Amp[0]];
	dspData[9]=amp_table[Actual.Line[0].Amp[1]];
	dspData[10]=amp_table[Actual.Line[0].Amp[2]];
	//FREQUENCIES: 3 OSC PER LINE
	dspData[11]=ifreq_table_LFO[Actual.Line[0].Freq[0]];
	dspData[12]=ffreq_table_LFO[Actual.Line[0].Freq[0]];
	dspData[13]=ifreq_table_LFO[Actual.Line[0].Freq[1]];
	dspData[14]=ffreq_table_LFO[Actual.Line[0].Freq[1]];
	dspData[15]=ifreq_table_LFO[Actual.Line[0].Freq[2]];
	dspData[16]=ffreq_table_LFO[Actual.Line[0].Freq[2]];
	//AMPLITUDES OFFSETS
	dspData[17]=offset_table_cutoff[Actual.Line[0].K[0]];
	dspData[18]=offset_table[Actual.Line[0].K[1]];
	dspData[19]=offset_table[Actual.Line[0].K[2]];
	//FILTERS SEND TO DELAY
	dspData[20]=nolog_table[Actual.Line[0].Send];
	//FILTERS VOLUMES
	dspData[21]=nolog_table[Actual.Line[0].Filtlvl[0]];
	dspData[22]=nolog_table[Actual.Line[0].Filtlvl[1]];
	dspData[23]=nolog_table[Actual.Line[0].Filtlvl[2]];
	//SATURATION
	dspData[24]=nolog_table[Actual.Line[0].Sat];
	
	//****** LINE1 ******
	dspData[25]=log_table[Actual.Line[1].Vol];
	if(!Actual.Line[1].Active)
		dspData[25]=log_table[0];
	dspData[26]=amp_table[Actual.Line[1].Amp[0]];
	dspData[27]=amp_table[Actual.Line[1].Amp[1]];
	dspData[28]=amp_table[Actual.Line[1].Amp[2]];
	dspData[29]=ifreq_table_LFO[Actual.Line[1].Freq[0]];
	dspData[30]=ffreq_table_LFO[Actual.Line[1].Freq[0]];
	dspData[31]=ifreq_table_LFO[Actual.Line[1].Freq[1]];
	dspData[32]=ffreq_table_LFO[Actual.Line[1].Freq[1]];
	dspData[33]=ifreq_table_LFO[Actual.Line[1].Freq[2]];
	dspData[34]=ffreq_table_LFO[Actual.Line[1].Freq[2]];
	dspData[35]=offset_table_cutoff[Actual.Line[1].K[0]];
	dspData[36]=offset_table[Actual.Line[1].K[1]];
	dspData[37]=offset_table[Actual.Line[1].K[2]];
	dspData[38]=nolog_table[Actual.Line[1].Send];
	dspData[39]=nolog_table[Actual.Line[1].Filtlvl[0]];
	dspData[40]=nolog_table[Actual.Line[1].Filtlvl[1]];
	dspData[41]=nolog_table[Actual.Line[1].Filtlvl[2]];
	dspData[42]=nolog_table[Actual.Line[1].Sat];

	//****** LINE2 ******
	dspData[43]=log_table[Actual.Line[2].Vol];
	if(!Actual.Line[2].Active)
		dspData[43]=log_table[0];
	dspData[44]=amp_table[Actual.Line[2].Amp[0]];
	dspData[45]=amp_table[Actual.Line[2].Amp[1]];
	dspData[46]=amp_table[Actual.Line[2].Amp[2]];
	dspData[47]=ifreq_table_LFO[Actual.Line[2].Freq[0]];
	dspData[48]=ffreq_table_LFO[Actual.Line[2].Freq[0]];
	dspData[49]=ifreq_table_LFO[Actual.Line[2].Freq[1]];
	dspData[50]=ffreq_table_LFO[Actual.Line[2].Freq[1]];
	dspData[51]=ifreq_table_LFO[Actual.Line[2].Freq[2]];
	dspData[52]=ffreq_table_LFO[Actual.Line[2].Freq[2]];
	dspData[53]=offset_table_cutoff[Actual.Line[2].K[0]];
	dspData[54]=offset_table[Actual.Line[2].K[1]];
	dspData[55]=offset_table[Actual.Line[2].K[2]];
	dspData[56]=nolog_table[Actual.Line[2].Send];
	dspData[57]=nolog_table[Actual.Line[2].Filtlvl[0]];
	dspData[58]=nolog_table[Actual.Line[2].Filtlvl[1]];
	dspData[59]=nolog_table[Actual.Line[2].Filtlvl[2]];
	dspData[60]=nolog_table[Actual.Line[2].Sat];
			
	//****** LINE3 ******
	dspData[61]=log_table[Actual.Line[3].Vol];
	if(!Actual.Line[3].Active)
		dspData[61]=log_table[0];
	dspData[62]=amp_table[Actual.Line[3].Amp[0]];
	dspData[63]=amp_table[Actual.Line[3].Amp[1]];
	dspData[64]=amp_table[Actual.Line[3].Amp[2]];
	dspData[65]=ifreq_table_LFO[Actual.Line[3].Freq[0]];
	dspData[66]=ffreq_table_LFO[Actual.Line[3].Freq[0]];
	dspData[67]=ifreq_table_LFO[Actual.Line[3].Freq[1]];
	dspData[68]=ffreq_table_LFO[Actual.Line[3].Freq[1]];
	dspData[69]=ifreq_table_LFO[Actual.Line[3].Freq[2]];
	dspData[70]=ffreq_table_LFO[Actual.Line[3].Freq[2]];
	dspData[71]=offset_table_cutoff[Actual.Line[3].K[0]];
	dspData[72]=offset_table[Actual.Line[3].K[1]];
	dspData[73]=offset_table[Actual.Line[3].K[2]];
	dspData[74]=nolog_table[Actual.Line[3].Send];
	dspData[75]=nolog_table[Actual.Line[3].Filtlvl[0]];
	dspData[76]=nolog_table[Actual.Line[3].Filtlvl[1]];
	dspData[77]=nolog_table[Actual.Line[3].Filtlvl[2]];
	dspData[78]=nolog_table[Actual.Line[3].Sat];
		
	dsp_write_data(dsp,dspData,DSP_DATA_LEN);
}