You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.2 KiB
102 lines
3.2 KiB
8 years ago
|
|
||
|
#include "AudioControlTester.h"
|
||
|
|
||
|
void AudioTestSignalGenerator_F32::update(void) {
|
||
|
//receive the input audio data
|
||
|
audio_block_f32_t *in_block = AudioStream_F32::receiveReadOnly_f32();
|
||
|
if (!in_block) return;
|
||
|
|
||
|
//if we're not testing, just transmit the block
|
||
|
if (!is_testing) {
|
||
|
AudioStream_F32::transmit(in_block); // send the FIR output
|
||
|
AudioStream_F32::release(in_block);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//if we are testing, we're going to substitute a new signal,
|
||
|
//so we can release the block for the original signal
|
||
|
AudioStream_F32::release(in_block);
|
||
|
|
||
|
//allocate memory for block that we'll send
|
||
|
audio_block_f32_t *out_block = allocate_f32();
|
||
|
if (!out_block) return;
|
||
|
|
||
|
//now generate the new siginal
|
||
|
sine_gen.begin(); record_queue.begin(); //activate
|
||
|
sine_gen.update(); sine_gen.end();
|
||
|
gain_alg.update();
|
||
|
record_queue.update(); record_queue.end();
|
||
|
audio_block_f32_t *queue_block = record_queue.getAudioBlock();
|
||
|
|
||
|
//copy to out_block (why can't I just send the queue_block? I tried. It doesn't seem to work. try it again later!
|
||
|
for (int i=0; i < queue_block->length; i++) out_block->data[i] = queue_block->data[i];
|
||
|
record_queue.freeAudioBlock();
|
||
|
|
||
|
//send the data
|
||
|
AudioStream_F32::transmit(out_block); // send the FIR output
|
||
|
AudioStream_F32::release(out_block);
|
||
|
}
|
||
|
|
||
|
|
||
|
void AudioTestSignalMeasurement_F32::update(void) {
|
||
|
|
||
|
//if we're not testing, just return
|
||
|
if (!is_testing) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//receive the input audio data...the baseline and the test
|
||
|
audio_block_f32_t *in_block_baseline = AudioStream_F32::receiveReadOnly_f32(0);
|
||
|
if (!in_block_baseline) return;
|
||
|
audio_block_f32_t *in_block_test = AudioStream_F32::receiveReadOnly_f32(1);
|
||
|
if (!in_block_test) {
|
||
|
AudioStream_F32::release(in_block_baseline);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//compute the rms of both signals
|
||
|
float baseline_rms = computeRMS(in_block_baseline->data, in_block_baseline->length);
|
||
|
float test_rms = computeRMS(in_block_test->data, in_block_test->length);
|
||
|
|
||
|
//Release memory
|
||
|
AudioStream_F32::release(in_block_baseline);
|
||
|
AudioStream_F32::release(in_block_test);
|
||
|
|
||
|
//notify controller
|
||
|
if (testController != NULL) testController->transferRMSValues(baseline_rms, test_rms);
|
||
|
}
|
||
|
|
||
|
void AudioTestSignalMeasurementMulti_F32::update(void) {
|
||
|
|
||
|
//if we're not testing, just return
|
||
|
if (!is_testing) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//receive the input audio data...the baseline and the test
|
||
|
audio_block_f32_t *in_block_baseline = AudioStream_F32::receiveReadOnly_f32(0);
|
||
|
if (in_block_baseline==NULL) return;
|
||
|
float baseline_rms = computeRMS(in_block_baseline->data, in_block_baseline->length);
|
||
|
AudioStream_F32::release(in_block_baseline);
|
||
|
|
||
|
//loop over each of the test data connections
|
||
|
float test_rms[num_test_values];
|
||
|
int n_with_data = 0;
|
||
|
for (int Ichan=0; Ichan < num_test_values; Ichan++) {
|
||
|
audio_block_f32_t *in_block_test = AudioStream_F32::receiveReadOnly_f32(1+Ichan);
|
||
|
if (in_block_test==NULL) {
|
||
|
//no data
|
||
|
test_rms[Ichan]=0.0f;
|
||
|
} else {
|
||
|
//process data
|
||
|
n_with_data = Ichan+1;
|
||
|
test_rms[Ichan]=computeRMS(in_block_test->data, in_block_test->length);
|
||
|
AudioStream_F32::release(in_block_test);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//notify controller
|
||
|
if (testController != NULL) testController->transferRMSValues(baseline_rms, test_rms, n_with_data);
|
||
|
}
|