Browse Source

Add 8 channel input example

dds
PaulStoffregen 4 years ago
parent
commit
ec21e95c85
1 changed files with 149 additions and 0 deletions
  1. +149
    -0
      examples/Analysis/PeakAndRMSMeter8Channel/PeakAndRMSMeter8Channel.ino

+ 149
- 0
examples/Analysis/PeakAndRMSMeter8Channel/PeakAndRMSMeter8Channel.ino View File

@@ -0,0 +1,149 @@
/* Show levels (RMS & Peak) for 8 I2S microphone inputs
*
* Connect 8 INMP411 I2S microphones to Teensy 4.0
* Pin 8 SD on mics #1 and #2
* Pin 6 SD on mics #3 and #4
* Pin 9 SD on mics #5 and #6
* Pin 32 SD on mics #7 and #8
* Pin 20 WS on all mics
* Pin 21 SCK on all mics
*
* Each mic needs GND to Teensy GND, VCC to Teensy 3.3V.
* Connect L/R to GND on the odd numbered mics
* and L/R to 3.3V on the even numbered mics.
*
* Optional - connect a Teensy Audio Shield or other I2S
* output device, but do not connect it to pin 8, because
* the INMP411 mics #1 & #2 send their signal to pin 8.
*
* This example code is in the public domain
*/

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// If INMP411 mics are not available, the audio shield mic can
// be used, but it will send a single signal to inputs #1 & #2
// (if connected to pin 8).
//const int myInput = AUDIO_INPUT_LINEIN;
const int myInput = AUDIO_INPUT_MIC;

AudioInputI2SOct audioInput; // audio shield: mic or line-in
AudioAmplifier amp1;
AudioAmplifier amp2;
AudioAmplifier amp3;
AudioAmplifier amp4;
AudioAmplifier amp5;
AudioAmplifier amp6;
AudioAmplifier amp7;
AudioAmplifier amp8;
AudioAnalyzeRMS rms1;
AudioAnalyzeRMS rms2;
AudioAnalyzeRMS rms3;
AudioAnalyzeRMS rms4;
AudioAnalyzeRMS rms5;
AudioAnalyzeRMS rms6;
AudioAnalyzeRMS rms7;
AudioAnalyzeRMS rms8;
AudioAnalyzePeak peak1;
AudioAnalyzePeak peak2;
AudioAnalyzePeak peak3;
AudioAnalyzePeak peak4;
AudioAnalyzePeak peak5;
AudioAnalyzePeak peak6;
AudioAnalyzePeak peak7;
AudioAnalyzePeak peak8;
AudioOutputI2S audioOutput; // audio shield: headphones & line-out

// Send all microphone signals to amps
AudioConnection r1(audioInput, 0, amp1, 0);
AudioConnection r2(audioInput, 1, amp2, 0);
AudioConnection r3(audioInput, 2, amp3, 0);
AudioConnection r4(audioInput, 3, amp4, 0);
AudioConnection r5(audioInput, 4, amp5, 0);
AudioConnection r6(audioInput, 5, amp6, 0);
AudioConnection r7(audioInput, 6, amp7, 0);
AudioConnection r8(audioInput, 7, amp8, 0);

// Connect the amps to RMS and Peak analyzers
AudioConnection a1(amp1, 0, rms1, 0);
AudioConnection a2(amp2, 0, rms2, 0);
AudioConnection a3(amp3, 0, rms3, 0);
AudioConnection a4(amp4, 0, rms4, 0);
AudioConnection a5(amp5, 0, rms5, 0);
AudioConnection a6(amp6, 0, rms6, 0);
AudioConnection a7(amp7, 0, rms7, 0);
AudioConnection a8(amp8, 0, rms8, 0);
AudioConnection p1(amp1, 0, peak1, 0);
AudioConnection p2(amp2, 0, peak2, 0);
AudioConnection p3(amp3, 0, peak3, 0);
AudioConnection p4(amp4, 0, peak4, 0);
AudioConnection p5(amp5, 0, peak5, 0);
AudioConnection p6(amp6, 0, peak6, 0);
AudioConnection p7(amp7, 0, peak7, 0);
AudioConnection p8(amp8, 0, peak8, 0);

// Also connect 2 of the amps to an I2S output (Pin 8)
// to be able to listen to the sound.
AudioConnection c10(amp1, 0, audioOutput, 0);
AudioConnection c11(amp2, 0, audioOutput, 1);
AudioControlSGTL5000 audioShield;


void setup() {
AudioMemory(26);
audioShield.enable();
audioShield.inputSelect(myInput);
audioShield.micGain(12);
audioShield.volume(0.5);
const float microphoneAmplification = 72.0;
amp1.gain(microphoneAmplification);
amp2.gain(microphoneAmplification);
amp3.gain(microphoneAmplification);
amp4.gain(microphoneAmplification);
amp5.gain(microphoneAmplification);
amp6.gain(microphoneAmplification);
amp7.gain(microphoneAmplification);
amp8.gain(microphoneAmplification);
Serial.begin(9600);
}

elapsedMillis fps;

void loop() {
if (fps > 24) {
fps = 0;
const int digits = 8;
print_bar(1, rms1.read(), peak1.readPeakToPeak()/2, digits);
print_bar(2, rms2.read(), peak2.readPeakToPeak()/2, digits);
print_bar(3, rms3.read(), peak3.readPeakToPeak()/2, digits);
print_bar(4, rms4.read(), peak4.readPeakToPeak()/2, digits);
print_bar(5, rms5.read(), peak5.readPeakToPeak()/2, digits);
print_bar(6, rms6.read(), peak6.readPeakToPeak()/2, digits);
print_bar(7, rms7.read(), peak7.readPeakToPeak()/2, digits);
print_bar(8, rms8.read(), peak8.readPeakToPeak()/2, digits);
Serial.println();
}
}

void print_bar(int in, float rms, float peak, int digits) {
Serial.print(in);
Serial.print(":");
int num_rms = roundf(rms * digits);
int num_peak = roundf(peak * digits);
for (int i=0; i < digits; i++) {
if (i < num_rms) {
Serial.print("*");
} else if (i < num_peak) {
Serial.print(">");
} else {
Serial.print(" ");
}
}
Serial.print(" ");
}

Loading…
Cancel
Save