|
|
|
/*
|
|
|
|
* SerialManagerFormant_OA.h
|
|
|
|
* Demonstrate formant shifting via frequency domain processing
|
|
|
|
* Created: Chip Audette (OpenAudio) March 2019
|
|
|
|
*
|
|
|
|
* Moved to OpenAudio, removed Tympan dependencies, fixed for T4.x
|
|
|
|
* Bob Larkin June 2020
|
|
|
|
*
|
|
|
|
* MIT License. Use at your own risk.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _SerialManagerFormant_OA_h
|
|
|
|
#define _SerialManagerFormant_OA_h
|
|
|
|
|
|
|
|
#include <OpenAudio_ArduinoLibrary.h>
|
|
|
|
|
|
|
|
//now, define the Serial Manager class
|
|
|
|
class SerialManagerFormant_OA {
|
|
|
|
public:
|
|
|
|
void respondToByte(char c);
|
|
|
|
void printHelp(void);
|
|
|
|
int N_CHAN;
|
|
|
|
float channelGainIncrement_dB = 2.5f;
|
|
|
|
float formantScaleIncrement = powf(2.0,1.0/6.0);
|
|
|
|
};
|
|
|
|
|
|
|
|
void SerialManagerFormant_OA::printHelp(void) {
|
|
|
|
Serial.println();
|
|
|
|
Serial.println("SerialManager_OA Help: Available Commands:");
|
|
|
|
Serial.println(" h: Print this help");
|
|
|
|
Serial.println(" g: Print the gain settings of the device.");
|
|
|
|
Serial.println(" C: Toggle printing of CPU and Memory usage");
|
|
|
|
Serial.print(" k: Increase the audio by ");
|
|
|
|
Serial.print(channelGainIncrement_dB);
|
|
|
|
Serial.println(" dB");
|
|
|
|
Serial.print(" K: Decrease the audio gain by ");
|
|
|
|
Serial.print(-channelGainIncrement_dB);
|
|
|
|
Serial.println(" dB");
|
|
|
|
Serial.print(" f: Raise formant shifting (change by ");
|
|
|
|
Serial.print(formantScaleIncrement);
|
|
|
|
Serial.println("x)");
|
|
|
|
Serial.print(" F: Lower formant shifting (change by ");
|
|
|
|
Serial.print(1.0/formantScaleIncrement);
|
|
|
|
Serial.println("x)");
|
|
|
|
Serial.println();
|
|
|
|
}
|
|
|
|
|
|
|
|
//functions in the main sketch that I want to call from here
|
|
|
|
extern void incrementKnobGain(float);
|
|
|
|
extern void printGainSettings(void);
|
|
|
|
extern void togglePrintMemoryAndCPU(void);
|
|
|
|
extern float incrementFormantShift(float);
|
|
|
|
//extern void switchToPCBMics(void);
|
|
|
|
//extern void switchToMicInOnMicJack(void);
|
|
|
|
//extern void switchToLineInOnMicJack(void);
|
|
|
|
|
|
|
|
//switch yard to determine the desired action
|
|
|
|
void SerialManagerFormant_OA::respondToByte(char c) {
|
|
|
|
//float old_val = 0.0, new_val = 0.0;
|
|
|
|
switch (c) {
|
|
|
|
case 'h': case '?':
|
|
|
|
printHelp(); break;
|
|
|
|
case 'g': case 'G':
|
|
|
|
printGainSettings(); break;
|
|
|
|
case 'k':
|
|
|
|
incrementKnobGain(channelGainIncrement_dB); break;
|
|
|
|
case 'K': //which is "shift k"
|
|
|
|
incrementKnobGain(-channelGainIncrement_dB); break;
|
|
|
|
case 'C': case 'c':
|
|
|
|
Serial.println("Received: toggle printing of memory and CPU usage.");
|
|
|
|
togglePrintMemoryAndCPU(); break;
|
|
|
|
case 'f':
|
|
|
|
{ float new_val = incrementFormantShift(formantScaleIncrement);
|
|
|
|
Serial.print("Recieved: new formant scale = "); Serial.println(new_val);}
|
|
|
|
break;
|
|
|
|
case 'F':
|
|
|
|
{ float new_val = incrementFormantShift(1./formantScaleIncrement);
|
|
|
|
Serial.print("Recieved: new formant scale = "); Serial.println(new_val);}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|