Browse Source

Merge pull request #12 from robsoles/master

fixed updateCoefs(..) for other than set 0 coefficients
dds
Paul Stoffregen 11 years ago
parent
commit
b8e4ce85ca
4 changed files with 126 additions and 4 deletions
  1. +1
    -0
      Audio.h
  2. +72
    -0
      analyze_peakdetect.cpp
  3. +50
    -0
      analyze_peakdetect.h
  4. +3
    -4
      filter_biquad.cpp

+ 1
- 0
Audio.h View File

@@ -48,6 +48,7 @@
#include "analyze_fft256.h"
#include "analyze_print.h"
#include "analyze_tonedetect.h"
#include "analyze_peakdetect.h"
#include "control_sgtl5000.h"
#include "control_wm8731.h"
#include "effect_chorus.h"

+ 72
- 0
analyze_peakdetect.cpp View File

@@ -0,0 +1,72 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include "analyze_peakdetect.h"

// #define PEAKREPORTVERBS

void AudioPeak::update(void)
{
audio_block_t *block;
const int16_t *p, *end;
block = receiveReadOnly();
if (!block) {
#ifdef PEAKREPORTVERBS
Serial.println("AudioPeak !block");
#endif
return;
}
if (!m_enabled) {
release(block);
return;
}
p = block->data;
end = p + AUDIO_BLOCK_SAMPLES;
do {
int16_t d=*p++;
if(d<min) min=d;
if(d>max) max=d;
} while (p < end);
#ifdef PEAKREPORTVERBS
Serial.println("AudioPeak ran");
#endif
release(block);
}

void AudioPeak::begin(bool noReset)
{
if(!noReset)
{
min=0;
max=0;
}
m_enabled=true;
}
uint16_t AudioPeak::Dpp(void)
{
return max-min;
}


+ 50
- 0
analyze_peakdetect.h View File

@@ -0,0 +1,50 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef analyze_peakdetect_h_
#define analyze_peakdetect_h_

#include "AudioStream.h"

class AudioPeak : public AudioStream
{
public:
AudioPeak(void) : AudioStream(1, inputQueueArray) { }

virtual void update(void);

void begin(bool noReset);
void begin(void) { begin(false); }
void stop(void) { m_enabled=false; }
uint16_t Dpp(void);
private:
audio_block_t *inputQueueArray[1];
bool m_enabled;
int16_t max;
int16_t min;
};

#endif

+ 3
- 4
filter_biquad.cpp View File

@@ -36,8 +36,7 @@ void AudioFilterBiquad::update(void)
int32_t *state;
block = receiveWritable();
if (!block) return;
data = (uint32_t *)(block->data);
end = data + AUDIO_BLOCK_SAMPLES/2;
end = (uint32_t *)(block->data) + AUDIO_BLOCK_SAMPLES/2;
state = (int32_t *)definition;
do {
a0 = *state++;
@@ -48,6 +47,7 @@ void AudioFilterBiquad::update(void)
aprev = *state++;
bprev = *state++;
sum = *state & 0x3FFF;
data = end - AUDIO_BLOCK_SAMPLES/2;
do {
in2 = *data;
sum = signed_multiply_accumulate_32x16b(sum, a0, in2);
@@ -72,7 +72,6 @@ void AudioFilterBiquad::update(void)
*state++ = sum | flag;
*(state-2) = bprev;
*(state-3) = aprev;
data = (uint32_t *)(block->data); // needs to be reset, may as well be done here
} while (flag);
transmit(block);
release(block);
@@ -84,7 +83,7 @@ void AudioFilterBiquad::updateCoefs(uint8_t set,int *source, bool doReset)
while(set)
{
*dest+=7;
if(!(*dest&0x80000000)) return;
if(!(*dest)&0x80000000) return;
*dest++;
set--;
}

Loading…
Cancel
Save