101 lines
2.7 KiB
C++
Executable file
101 lines
2.7 KiB
C++
Executable file
// The SGTL5000 has a secondard "dacVolume" setting, in addition to normal volume.
|
|
//
|
|
// Normally dacVolume defaults to 1.0, to pass your sound directly to the normal
|
|
// volume control. The actual volume you hear depends on both settings.
|
|
//
|
|
// The dacVolume control has an option to gracefully ramp (change) its setting over
|
|
// time, to prevent a sudden pop or click sound. You could achieve this by adding
|
|
// code to change the volume setting in very small steps over time, but the
|
|
// SGTL5000 can do it for you automatically.
|
|
//
|
|
// This example was originally contributed by Hedde Bosman
|
|
|
|
#include <Audio.h>
|
|
#include <Wire.h>
|
|
#include <SPI.h>
|
|
#include <SD.h>
|
|
#include <SerialFlash.h>
|
|
|
|
// GUItool: begin automatically generated code
|
|
AudioSynthWaveformSine sine1; //xy=203,233
|
|
AudioOutputI2S i2s1; //xy=441,233
|
|
AudioConnection patchCord1(sine1, 0, i2s1, 0);
|
|
AudioConnection patchCord2(sine1, 0, i2s1, 1);
|
|
AudioControlSGTL5000 sgtl5000_1; //xy=452,162
|
|
// GUItool: end automatically generated code
|
|
|
|
|
|
elapsedMillis msec;
|
|
float vol;
|
|
float inc;
|
|
int rampType;
|
|
const char *rampName[] = {
|
|
"No Ramp (instant)", // loud pop due to instant change
|
|
"Normal Ramp", // graceful transition between volume levels
|
|
"Linear Ramp" // slight click/chirp
|
|
};
|
|
|
|
void setup(void) {
|
|
Serial.begin(9600);
|
|
|
|
AudioMemory(4);
|
|
vol = 0.0;
|
|
inc = 0.2;
|
|
|
|
rampType = 0;
|
|
|
|
sine1.amplitude(1.0);
|
|
sine1.frequency(440);
|
|
|
|
sgtl5000_1.enable();
|
|
sgtl5000_1.volume(0.5); // set the main volume...
|
|
sgtl5000_1.dacVolume(0); // set the "dac" volume (extra control)
|
|
sgtl5000_1.dacVolumeRampDisable();
|
|
|
|
Serial.println("setup done");
|
|
}
|
|
|
|
void loop(void) {
|
|
if (msec > 1000) { // change the volume every second
|
|
|
|
// increment or decrement the volume variable
|
|
vol += inc;
|
|
if (vol >= 1.0) {
|
|
vol = 1.0;
|
|
inc = -inc;
|
|
}
|
|
if (vol < 0.01) {
|
|
vol = 0.0;
|
|
inc = -inc;
|
|
}
|
|
Serial.print("Volume: ");
|
|
Serial.print(vol);
|
|
Serial.print(" ");
|
|
Serial.println(rampName[rampType]);
|
|
|
|
// configure which type of volume transition to use
|
|
if (rampType == 0) {
|
|
sgtl5000_1.dacVolumeRampDisable();
|
|
} else if (rampType == 1) {
|
|
sgtl5000_1.dacVolumeRamp();
|
|
} else {
|
|
sgtl5000_1.dacVolumeRampLinear();
|
|
}
|
|
|
|
// set the dacVolume. The actual change make take place over time, if ramping
|
|
// this is a logarithmic volume,
|
|
// that is, the range 0.0 to 1.0 gets converted to -90dB to 0dB in 0.5dB steps
|
|
sgtl5000_1.dacVolume(vol);
|
|
|
|
// if we turned the volume off, advance to the next ramp type
|
|
if (vol < 0.01) {
|
|
rampType = rampType + 1;
|
|
if (rampType > 2) rampType = 0;
|
|
}
|
|
msec = 0;
|
|
}
|
|
}
|
|
|
|
|
|
|