/**************************************************************** * * * Copyright (C) 1991-2003 Celoxica Ltd. All rights reserved. * * * ***************************************************************** * * * Project : PAL * * Date : 31 JAN 2003 * * File : reverb.hcc * * Author : Matthew Aubury (MA) * * Contributors: * * * * Description: * * Simple audio reverb. * * * * Date Version Author Reason for change * * * * 29 OCT 2002 1.00 MA Created * * * ****************************************************************/ #include #include "pal_master.hch" #include "debug.hch" #include "fft.hch" #include "runfft.hch" #include "presets.hch" #include "config.hch" /* * Forward declarations */ static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE; //input buffer ram signed 16 audio_buffer_in[256] with { block = "BlockRAM"}; //output buffer ram signed 16 audio_buffer_out[128] with { block = "BlockRAM"}; //EQ settings for the FFT ram unsigned 4 EQ_info[128] with { block = "BlockRAM"}; //EQ settings received from the display mpram { ram unsigned 4 write[768]; rom unsigned 4 read[768]; }EQ_level with { block = "BlockRAM"}; mpram { ram unsigned 7 write[256]; rom unsigned 7 read[256]; }fft_info with { block = "BlockRAM"}; signed 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4; signed 16 *audioptr_out1,*audioptr_out2; signed 16 *audioptr_temp; unsigned 3 active_preset; shared expr preset_address = (0@(active_preset-1))<<7; void LoadPresets() { unsigned 16 temp; unsigned 10 count; unsigned 8 index; count=0; do { par { temp = presets[index]; index++; } par { EQ_level.write[count] = temp[7:4]; count++; } par { EQ_level.write[count] = temp[3:0]; count++; } par { EQ_level.write[count] = temp[15:12]; count++; } par { EQ_level.write[count] = temp[11:8]; count++; } } while (count<768); } /* * FFT routine */ static macro proc RunFFT (AudioIn, AudioOut) { unsigned 6 sample_count; unsigned 8 count, i; // unsigned 16 scount, temp; unsigned 1 FFT_Sync; macro expr OW = PalAudioOutGetMaxDataWidthCT(); macro expr IW = PalAudioInGetMaxDataWidthCT(); signed LeftNew, RightNew; signed Output_sample; //pointers for double and quadruple buffering: audioptr_in1=&audio_buffer_in[0]; audioptr_in2=&audio_buffer_in[64]; audioptr_in3=&audio_buffer_in[128]; audioptr_in4=&audio_buffer_in[192]; audioptr_out1=&audio_buffer_out[0]; audioptr_out2=&audio_buffer_out[64]; audio_buffer_in[0] = 128; audio_buffer_in[1] = 197; audio_buffer_in[2] = 244; audio_buffer_in[3] = 254; audio_buffer_in[4] = 224; audio_buffer_in[5] = 164; audio_buffer_in[6] = 92; audio_buffer_in[7] = 31; audio_buffer_in[8] = 1; audio_buffer_in[9] = 11; audio_buffer_in[10] = 58; audio_buffer_in[11] = 127; audio_buffer_in[12] = 196; audio_buffer_in[13] = 244; audio_buffer_in[14] = 254; audio_buffer_in[15] = 225; audio_buffer_in[16] = 164; audio_buffer_in[17] = 92; audio_buffer_in[18] = 31; audio_buffer_in[19] = 1; audio_buffer_in[20] = 11; audio_buffer_in[21] = 57; audio_buffer_in[22] = 126; audio_buffer_in[23] = 196; audio_buffer_in[24] = 243; audio_buffer_in[25] = 254; audio_buffer_in[26] = 225; audio_buffer_in[27] = 165; audio_buffer_in[28] = 93; audio_buffer_in[29] = 32; audio_buffer_in[30] = 1; audio_buffer_in[31] = 10; audio_buffer_in[32] = 57; audio_buffer_in[33] = 126; audio_buffer_in[34] = 195; audio_buffer_in[35] = 243; audio_buffer_in[36] = 254; audio_buffer_in[37] = 226; audio_buffer_in[38] = 165; audio_buffer_in[39] = 93; audio_buffer_in[40] = 32; audio_buffer_in[41] = 1; audio_buffer_in[42] = 10; audio_buffer_in[43] = 56; audio_buffer_in[44] = 125; audio_buffer_in[45] = 195; audio_buffer_in[46] = 243; audio_buffer_in[47] = 255; audio_buffer_in[48] = 226; audio_buffer_in[49] = 166; audio_buffer_in[50] = 94; audio_buffer_in[51] = 33; audio_buffer_in[52] = 1; audio_buffer_in[53] = 10; audio_buffer_in[54] = 56; audio_buffer_in[55] = 125; audio_buffer_in[56] = 194; audio_buffer_in[57] = 243; audio_buffer_in[58] = 255; audio_buffer_in[59] = 226; audio_buffer_in[60] = 167; audio_buffer_in[61] = 95; audio_buffer_in[62] = 33; audio_buffer_in[63] = 1; audio_buffer_in[64] = 10; audio_buffer_in[65] = 55; audio_buffer_in[66] = 124; audio_buffer_in[67] = 194; audio_buffer_in[68] = 242; audio_buffer_in[69] = 255; audio_buffer_in[70] = 227; audio_buffer_in[71] = 167; audio_buffer_in[72] = 95; audio_buffer_in[73] = 33; audio_buffer_in[74] = 1; audio_buffer_in[75] = 9; audio_buffer_in[76] = 55; audio_buffer_in[77] = 123; audio_buffer_in[78] = 193; audio_buffer_in[79] = 242; audio_buffer_in[80] = 255; audio_buffer_in[81] = 227; audio_buffer_in[82] = 168; audio_buffer_in[83] = 96; audio_buffer_in[84] = 34; audio_buffer_in[85] = 2; audio_buffer_in[86] = 9; audio_buffer_in[87] = 54; audio_buffer_in[88] = 123; audio_buffer_in[89] = 193; audio_buffer_in[90] = 242; audio_buffer_in[91] = 255; audio_buffer_in[92] = 227; audio_buffer_in[93] = 168; audio_buffer_in[94] = 96; audio_buffer_in[95] = 34; audio_buffer_in[96] = 2; audio_buffer_in[97] = 9; audio_buffer_in[98] = 54; audio_buffer_in[99] = 122; audio_buffer_in[100] = 192; audio_buffer_in[101] = 242; audio_buffer_in[102] = 255; audio_buffer_in[103] = 228; audio_buffer_in[104] = 169; audio_buffer_in[105] = 97; audio_buffer_in[106] = 35; audio_buffer_in[107] = 2; audio_buffer_in[108] = 9; audio_buffer_in[109] = 53; audio_buffer_in[110] = 122; audio_buffer_in[111] = 192; audio_buffer_in[112] = 241; audio_buffer_in[113] = 255; audio_buffer_in[114] = 228; audio_buffer_in[115] = 169; audio_buffer_in[116] = 97; audio_buffer_in[117] = 35; audio_buffer_in[118] = 2; audio_buffer_in[119] = 9; audio_buffer_in[120] = 53; audio_buffer_in[121] = 121; audio_buffer_in[122] = 191; audio_buffer_in[123] = 241; audio_buffer_in[124] = 255; audio_buffer_in[125] = 228; audio_buffer_in[126] = 170; audio_buffer_in[127] = 98; audio_buffer_in[128] = 35; audio_buffer_in[129] = 2; audio_buffer_in[130] = 8; audio_buffer_in[131] = 53; audio_buffer_in[132] = 120; audio_buffer_in[133] = 191; audio_buffer_in[134] = 241; audio_buffer_in[135] = 255; audio_buffer_in[136] = 229; audio_buffer_in[137] = 170; audio_buffer_in[138] = 99; audio_buffer_in[139] = 36; audio_buffer_in[140] = 2; audio_buffer_in[141] = 8; audio_buffer_in[142] = 52; audio_buffer_in[143] = 120; audio_buffer_in[144] = 190; audio_buffer_in[145] = 241; audio_buffer_in[146] = 255; audio_buffer_in[147] = 229; audio_buffer_in[148] = 171; audio_buffer_in[149] = 99; audio_buffer_in[150] = 36; audio_buffer_in[151] = 2; audio_buffer_in[152] = 8; audio_buffer_in[153] = 52; audio_buffer_in[154] = 119; audio_buffer_in[155] = 190; audio_buffer_in[156] = 240; audio_buffer_in[157] = 255; audio_buffer_in[158] = 230; audio_buffer_in[159] = 172; audio_buffer_in[160] = 100; audio_buffer_in[161] = 37; audio_buffer_in[162] = 2; audio_buffer_in[163] = 8; audio_buffer_in[164] = 51; audio_buffer_in[165] = 119; audio_buffer_in[166] = 189; audio_buffer_in[167] = 240; audio_buffer_in[168] = 255; audio_buffer_in[169] = 230; audio_buffer_in[170] = 172; audio_buffer_in[171] = 100; audio_buffer_in[172] = 37; audio_buffer_in[173] = 2; audio_buffer_in[174] = 8; audio_buffer_in[175] = 51; audio_buffer_in[176] = 118; audio_buffer_in[177] = 189; audio_buffer_in[178] = 240; audio_buffer_in[179] = 255; audio_buffer_in[180] = 230; audio_buffer_in[181] = 173; audio_buffer_in[182] = 101; audio_buffer_in[183] = 37; audio_buffer_in[184] = 3; audio_buffer_in[185] = 7; audio_buffer_in[186] = 50; audio_buffer_in[187] = 118; audio_buffer_in[188] = 188; audio_buffer_in[189] = 239; audio_buffer_in[190] = 255; audio_buffer_in[191] = 231; audio_buffer_in[192] = 173; audio_buffer_in[193] = 101; audio_buffer_in[194] = 38; audio_buffer_in[195] = 3; audio_buffer_in[196] = 7; audio_buffer_in[197] = 50; audio_buffer_in[198] = 117; audio_buffer_in[199] = 188; audio_buffer_in[200] = 239; audio_buffer_in[201] = 255; audio_buffer_in[202] = 231; audio_buffer_in[203] = 174; audio_buffer_in[204] = 102; audio_buffer_in[205] = 38; audio_buffer_in[206] = 3; audio_buffer_in[207] = 7; audio_buffer_in[208] = 49; audio_buffer_in[209] = 116; audio_buffer_in[210] = 187; audio_buffer_in[211] = 239; audio_buffer_in[212] = 255; audio_buffer_in[213] = 231; audio_buffer_in[214] = 174; audio_buffer_in[215] = 103; audio_buffer_in[216] = 39; audio_buffer_in[217] = 3; audio_buffer_in[218] = 7; audio_buffer_in[219] = 49; audio_buffer_in[220] = 116; audio_buffer_in[221] = 187; audio_buffer_in[222] = 239; audio_buffer_in[223] = 255; audio_buffer_in[224] = 232; audio_buffer_in[225] = 175; audio_buffer_in[226] = 103; audio_buffer_in[227] = 39; audio_buffer_in[228] = 3; audio_buffer_in[229] = 7; audio_buffer_in[230] = 48; audio_buffer_in[231] = 115; audio_buffer_in[232] = 186; audio_buffer_in[233] = 238; audio_buffer_in[234] = 255; audio_buffer_in[235] = 232; audio_buffer_in[236] = 175; audio_buffer_in[237] = 104; audio_buffer_in[238] = 40; audio_buffer_in[239] = 3; audio_buffer_in[240] = 6; audio_buffer_in[241] = 48; audio_buffer_in[242] = 115; audio_buffer_in[243] = 186; audio_buffer_in[244] = 238; audio_buffer_in[245] = 255; audio_buffer_in[246] = 232; audio_buffer_in[247] = 176; audio_buffer_in[248] = 104; audio_buffer_in[249] = 40; audio_buffer_in[250] = 3; audio_buffer_in[251] = 6; audio_buffer_in[252] = 47; audio_buffer_in[253] = 114; audio_buffer_in[254] = 185; audio_buffer_in[255] = 238; perform_fft(audioptr_in1); perform_ifft(audioptr_out1); i=0; do { print_hex_value((unsigned)audio_buffer_in[i]); print_string(" "); print_hex_value((unsigned)audioptr_in1[i]); print_eol(); i++; }while(i); }// end function