mirror of
https://github.com/JorjBauer/aiie.git
synced 2024-10-12 07:23:43 +00:00
55 lines
1.0 KiB
C++
55 lines
1.0 KiB
C++
#include <Arduino.h>
|
|
#include "teensy-speaker.h"
|
|
|
|
extern int16_t g_volume;
|
|
|
|
TeensySpeaker::TeensySpeaker(uint8_t pinNum) : PhysicalSpeaker()
|
|
{
|
|
toggleState = false;
|
|
needsToggle = false;
|
|
speakerPin = pinNum;
|
|
pinMode(speakerPin, OUTPUT); // analog speaker output, used as digital volume control
|
|
mixerValue = numMixed = 0;
|
|
}
|
|
|
|
TeensySpeaker::~TeensySpeaker()
|
|
{
|
|
}
|
|
|
|
void TeensySpeaker::toggle()
|
|
{
|
|
needsToggle = true;
|
|
}
|
|
|
|
void TeensySpeaker::maintainSpeaker(uint32_t c)
|
|
{
|
|
if (needsToggle) {
|
|
toggleState = !toggleState;
|
|
needsToggle = false;
|
|
}
|
|
|
|
mixerValue += (toggleState ? 0xFFF : 0x00);
|
|
// FIXME: Temporarily disabling mixer
|
|
/* numMixed += 2;
|
|
|
|
if (numMixed > 1) {
|
|
mixerValue /= numMixed;
|
|
}*/
|
|
|
|
// FIXME: glad it's DAC0 and all, but... how does that relate to the pin passed in the constructor?
|
|
analogWriteDAC0(mixerValue); // FIXME: g_volume?
|
|
}
|
|
|
|
void TeensySpeaker::beginMixing()
|
|
{
|
|
mixerValue = 0;
|
|
numMixed = 0;
|
|
}
|
|
|
|
void TeensySpeaker::mixOutput(uint8_t v)
|
|
{
|
|
mixerValue += v;
|
|
numMixed++;
|
|
}
|
|
|