|
- // MemoryAndCpuUsage
- //
- // This example demonstrates how to monitor CPU and memory
- // usage by the audio library. You can see the total memory
- // used at any moment, and the maximum (worst case) used.
- //
- // The total CPU usage, and CPU usage for each object can
- // be monitored. Reset functions clear the maximums.
- //
- // Use the Arduino Serial Monitor to view the usage info
- // and control ('F', 'S', and 'R' keys) this program.
- //
- // This example code is in the public domain.
-
-
- #include <Audio.h>
- #include <Wire.h>
- #include <SPI.h>
- #include <SD.h>
- #include <SerialFlash.h>
-
- // GUItool: begin automatically generated code
- AudioSynthWaveformSine sine1; //xy=125,221
- AudioSynthNoisePink pink1; //xy=133,121
- AudioEffectEnvelope envelope1; //xy=298,133
- AudioEffectEnvelope envelope2; //xy=302,197
- AudioAnalyzeFFT256 fft256_1; //xy=304,272
- AudioMixer4 mixer1; //xy=486,163
- AudioOutputI2S i2s1; //xy=640,161
- AudioConnection patchCord1(sine1, envelope2);
- AudioConnection patchCord2(sine1, fft256_1);
- AudioConnection patchCord3(pink1, envelope1);
- AudioConnection patchCord4(envelope1, 0, mixer1, 0);
- AudioConnection patchCord5(envelope2, 0, mixer1, 1);
- AudioConnection patchCord6(mixer1, 0, i2s1, 0);
- AudioConnection patchCord7(mixer1, 0, i2s1, 1);
- AudioControlSGTL5000 sgtl5000_1; //xy=517,297
- // GUItool: end automatically generated code
-
-
- void setup() {
- // give the audio library some memory. We'll be able
- // to see how much it actually uses, which can be used
- // to reduce this to the minimum necessary.
- AudioMemory(20);
-
- // enable the audio shield
- sgtl5000_1.enable();
- sgtl5000_1.volume(0.6);
-
- // create a simple percussive sound using pink noise
- // and an envelope to shape it.
- pink1.amplitude(0.5);
- envelope1.attack(1.5);
- envelope1.hold(5);
- envelope1.decay(20);
- envelope1.sustain(0);
-
- // create a simple bass note using a sine wave
- sine1.frequency(120);
- sine1.amplitude(0.6);
- envelope2.attack(6.5);
- envelope2.hold(25);
- envelope2.decay(70);
- envelope2.sustain(0);
-
- // add both the note together, so we can hear them
- mixer1.gain(0, 0.5);
- mixer1.gain(1, 0.5);
- }
-
-
- int count = 0;
- int speed = 60;
-
-
- void loop() {
- // a simple sequencer, count goes from 0 to 15
- count = count + 1;
- if (count >= 16) count = 0;
-
- // play percussive sounds every 4th time
- if (count == 0) envelope1.noteOn();
- if (count == 4) envelope1.noteOn();
- if (count == 8) envelope1.noteOn();
- if (count == 12) envelope1.noteOn();
-
- // play the bass tone every 8th time
- if (count == 4) {
- sine1.amplitude(0.6);
- sine1.frequency(100);
- envelope2.noteOn();
- }
- if (count == 12) {
- sine1.amplitude(0.3);
- sine1.frequency(120);
- envelope2.noteOn();
- }
-
- // turn off the sine wave, which saves
- // CPU power (especially since the sine goes
- // to a CPU-hungry FFT analysis)
- if (count == 6) {
- sine1.amplitude(0);
- }
-
- // check for incoming characters from the serial monitor
- if (Serial.available()) {
- char c = Serial.read();
- if ((c == 'r' || c == 'R')) {
- pink1.processorUsageMaxReset();
- fft256_1.processorUsageMaxReset();
- AudioProcessorUsageMaxReset();
- AudioMemoryUsageMaxReset();
- Serial.println("Reset all max numbers");
- }
- if ((c == 'f' || c == 'F') && speed > 16) {
- speed = speed - 2;
- }
- if ((c == 's' || c == 'S') && speed < 250) {
- speed = speed + 2;
- }
- }
-
- // print a summary of the current & maximum usage
- Serial.print("CPU: ");
- Serial.print("pink=");
- Serial.print(pink1.processorUsage());
- Serial.print(",");
- Serial.print(pink1.processorUsageMax());
- Serial.print(" ");
- Serial.print("fft=");
- Serial.print(fft256_1.processorUsage());
- Serial.print(",");
- Serial.print(fft256_1.processorUsageMax());
- Serial.print(" ");
- Serial.print("all=");
- Serial.print(AudioProcessorUsage());
- Serial.print(",");
- Serial.print(AudioProcessorUsageMax());
- Serial.print(" ");
- Serial.print("Memory: ");
- Serial.print(AudioMemoryUsage());
- Serial.print(",");
- Serial.print(AudioMemoryUsageMax());
- Serial.print(" ");
- Serial.print("Send: (R)eset, (S)lower, (F)aster");
- Serial.println();
-
- // very simple timing :-)
- delay(speed);
-
- }
|