From 976a1554a629f7183732f25ba33a77c8628ce04a Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Tue, 11 Jan 2005 14:20:00 +0000 Subject: modified doxygen comments, added automatic input gain control --- Graphic_Equalizer/src/audio.hcc | 92 +++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 35 deletions(-) diff --git a/Graphic_Equalizer/src/audio.hcc b/Graphic_Equalizer/src/audio.hcc index b461812..2a65700 100644 --- a/Graphic_Equalizer/src/audio.hcc +++ b/Graphic_Equalizer/src/audio.hcc @@ -46,6 +46,7 @@ ram signed 16 audio_buffer_out[128] with { block = "BlockRAM"}; ram unsigned 4 EQ_info[128] with { block = "BlockRAM"}; //EQ settings received from the display +chan 1 event_notification; #if HARDWARE_MULTIPLY signed 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4; @@ -94,17 +95,17 @@ macro proc audio_init(input_source, sample_rate, AUDIOIN, AUDIOOUT) { #if !USE_RUNFFT -/*! @fn macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); +/*! /fn macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); * - * @brief Main audiodriver. This function never returns! It copies the audio + * /brief Main audiodriver. This function never returns! It copies the audio * input directly to the audio output * - * @param *audiodata pointer to audio information structure. - * @param AUDIOIN Audio Input Handler - * @param AUDIOOUT Audio Output Handler + * /param *audiodata pointer to audio information structure. + * /param AUDIOIN Audio Input Handler + * /param AUDIOOUT Audio Output Handler * - * @return Never Returns. - * @retval void + * /return Never Returns. + * /retval void */ macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) { /* @@ -123,20 +124,20 @@ macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) { } /* --- audio_main() --- */ #else -/*! @fn macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); +/*! /fn macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); * - * @brief Main audiodriver. This function never returns! It calls the + * /brief Main audiodriver. This function never returns! It calls the * audiohandlers and stores samples into a global array. Once 64 * Samples are collected it raises a signal AUDIO_READY to let * other processes know it's ready. We use quadruple buffering for * audio input and double buffering for audio output. * - * @param audiodata pointer to audio information structure. - * @param AUDIOIN Audio Input Handler - * @param AUDIOOUT Audio Output Handler + * /param audiodata pointer to audio information structure. + * /param AUDIOIN Audio Input Handler + * /param AUDIOOUT Audio Output Handler * - * @return Never Returns. - * @retval void + * /return Never Returns. + * /retval void */ macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) { @@ -157,24 +158,24 @@ macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) FFT_Sync=0; par { - runfft(audiodata); - sample_audio(AUDIOOIN); + run_fft(audiodata); + sample_audio(audiodata, AUDIOOIN); output_audio(AUDIOOOUT); }//end par } /* --- audio_main() --- */ #endif -/*! @fn macro proc run_fft(audiodata); +/*! /fn macro proc run_fft(audiodata); * - * @brief FFT loop, waits until 64 samples are read from the audio input + * /brief FFT loop, waits until 64 samples are read from the audio input * before switching the pointers needed for double and quadruple buffering, * after that sequentially calling the perform_fft, equalize_audio and * perform_ifft functions. * - * @param audiodata pointer to audio information structure. + * /param audiodata pointer to audio information structure. * - * @return Never Returns. - * @retval void + * /return Never Returns. + * /retval void */ macro proc run_fft(audiodata) { @@ -216,20 +217,23 @@ macro proc run_fft(audiodata) } } /* --- run_fft() --- */ -/*! @fn macro proc sample_audio(ADUIOIN); +/*! /fn macro proc sample_audio(ADUIOIN); * - * @brief Sampling loop, fills the audio input and output arrays and uses FFT_Sync + * /brief Sampling loop, fills the audio input and output arrays and uses FFT_Sync * to notify the FFT when 64 samples are read from the audio input. * - * @param audiodata pointer to audio information structure. + * /param audiodata pointer to audio information structure. * - * @return Never Returns. - * @retval void + * /return Never Returns. + * /retval void */ -macro proc sample_audio(AUDIOOIN) +macro proc sample_audio(audiodata, AUDIOOIN) { macro expr IW = PalAudioInGetMaxDataWidthCT(); - signed LeftNew, RightNew; + signed IW LeftNew, RightNew; + + unsigned 8 not_saturated; + unsigned 2 saturation; for(sample_count=0;;)//store the samples in the inputbuffer { @@ -245,7 +249,24 @@ macro proc sample_audio(AUDIOOIN) #else audioptr_in1[sample_count] = (LeftNew\\2);//drop 2 LSB's #endif - sample_count++; + if (LeftNew > 130000) { + saturation++; + if (!saturation) { + audiodata.saturated = TRUE; + event_notification ! TRUE; + } else { + audiodata.saturated = FALSE; + } + } else { + not_saturated++; + if (!not_saturated) { + audiodata.saturated = FALSE; + saturation = 0; + event_notification ! TRUE; + } + } + + sample_count++; if (!sample_count) { FFT_Sync = 1; @@ -264,18 +285,19 @@ macro proc sample_audio(AUDIOOIN) } }/* --- sample_audio() --- */ -/*! @fn macro proc output_audio(ADUIOOUT); +/*! /fn macro proc output_audio(ADUIOOUT); * - * @brief Sampling loop, fills the audio input and output arrays and uses FFT_Sync + * /brief Sampling loop, fills the audio input and output arrays and uses FFT_Sync * to notify the FFT when 64 samples are read from the audio input. * - * @param audiodata pointer to audio information structure. + * /param audiodata pointer to audio information structure. * - * @return Never Returns. - * @retval void + * /return Never Returns. + * /retval void */ -macro proc output_audio(AUDIOOUT) +macro proc output_audio(AUDIOOUT) { + macro expr OW = PalAudioOutGetMaxDataWidthCT(); /* * Audio output loop, writes the modified audio samples to the audio output. */ -- cgit v0.12