/* STM32 Blue Pill project using the STM32 Arduino Core (stm32duino) */
#include "leaf.h"
#include "leaf-oscillators.h"
#include "leaf-analysis.h"
#define SAMPLING_RATE 2560 /* Keep sampling rate low to save RAM */
#define MEM_SIZE 16384
#define LED PB9 /* LED show when detector is ready */
char mempool[MEM_SIZE];
LEAF leaf;
tPitchDetector pitchDetector;
float generateRandomFloat() {
return ((float)rand()/(float)(RAND_MAX));
}
float mapToFloat(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void setup() {
Serial.begin(9600); //115200);
Serial.println("Hello STM32!");
LEAF_init(&leaf, SAMPLING_RATE, mempool, MEM_SIZE, &generateRandomFloat);
tPitchDetector_init(&pitchDetector, 82.0, 1320.0, &leaf);
Serial.println("Welcome to LEAF :-)");
pinMode(LED, OUTPUT);
}
void loop() {
delay(.09);
float sampleOut = mapToFloat(256 * analogRead(A0), 0.0f, 1023.0f, -1.0f, 1.0f);
int detectorReady = tPitchDetector_tick(&pitchDetector, sampleOut);
Serial.print((int) (sampleOut * 512));
Serial.print("\t");
Serial.print(detectorReady);
Serial.print("\t");
Serial.print(tPitchDetector_getPeriodicity(&pitchDetector), 1);
Serial.print("\t");
float detectedFreq = min(max(82, (int) tPitchDetector_predictFrequency(&pitchDetector)), 1320);
Serial.print(detectedFreq, 1);
Serial.print("\t");
Serial.println(max(0, (int) LEAF_frequencyToMidi(detectedFreq)));
digitalWrite(LED, detectorReady);
}
Loading
stm32-bluepill
stm32-bluepill