|
- // 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;
- }
- }
-
-
|