T40 with CPU Max >33%=> noise and stuttering

Status
Not open for further replies.

DragonSF

Well-known member
I'm working on a rather large project (6 voices with filters, vca, delay etc). When I'm using more than 1 voice at a given constellation (more than 10 sin osc at the same time), I'm getting louad noises and the audio stutters. The measure Memory max is 42 and CPU max is 34%. Is that a reasonable limit for the T40 CPU?
 
Hello, could we see your code please, particularly the audio objects and connections - having objects created in the 'wrong' order will cause unwanted noise.
 
I was able to reduce the effect by combining the original state var. filter and my moog filter into one object. That solved the problem in a way, that I can reach 65% now without troubles.
Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioSynthWaveform       lfo1;           //xy=70,460
AudioSynthWaveformDc     dc3;            //xy=254,327
AudioSynthWaveformDc     dc2;            //xy=255,178
AudioSynthWaveformDc     dc1;            //xy=258,46
AudioSynthWaveformHarmGen harm_fm3;       //xy=258,406
AudioSynthWaveformDc     dc4;            //xy=258,471
AudioSynthWaveformDc     dc6;            //xy=258,742
AudioSynthWaveformHarmGen harm_fm1;       //xy=264,88
AudioSynthWaveformDc     dc5;            //xy=262,590
AudioSynthWaveformHarmGen harm_fm2;       //xy=264,227
AudioSynthWaveformHarmGen harm_fm6;       //xy=266,790
AudioSynthWaveformHarmGen harm_fm4;       //xy=269,522
AudioSynthWaveformHarmGen harm_fm5;       //xy=269,661
AudioSynthWaveformDc     dc9;            //xy=418,411
AudioSynthWaveformDc     dc12;           //xy=423,814
AudioSynthWaveformDc     dc10;           //xy=428,536
AudioEffectMultiply      multiply4;      //xy=429,479
AudioSynthWaveformDc     dc11;           //xy=433,643
AudioSynthWaveformDc     dc8;            //xy=438,260
AudioEffectMultiply      multiply3;      //xy=441,315
AudioEffectMultiply      multiply5;      //xy=441,595
AudioSynthWaveformDc     dc7;            //xy=443,115
AudioEffectMultiply      multiply2;      //xy=444,185
AudioEffectMultiply      multiply1;      //xy=445,51
AudioEffectMultiply      multiply6;      //xy=444,749
AudioSynthWaveform       lfo2;           //xy=566,449
AudioEffectEnvelope      envelope6;      //xy=574,814
AudioEffectEnvelope      envelope5;      //xy=576,644
AudioEffectEnvelope      envelope3;      //xy=578,397
AudioEffectEnvelope      envelope1;      //xy=580,114
AudioEffectEnvelope      envelope4;      //xy=581,537
AudioEffectEnvelope      envelope2;      //xy=587,261
AudioMixer4              mixlfo1;        //xy=758.8888549804688,116.55555725097656
AudioMixer4              mixlfo3;        //xy=760.3333740234375,402.4444580078125
AudioMixer4              mixlfo4;        //xy=761.4444580078125,551.6666870117188
AudioMixer4              mixlfo2;        //xy=763.6666259765625,274.2222595214844
AudioMixer4              mixlfo6;        //xy=763.5556030273438,820.888916015625
AudioMixer4              mixlfo5;        //xy=771,689.5555419921875
AudioFilterMoog filter2;        //xy=914,78
AudioFilterMoog filter5;        //xy=914.5556030273438,384.5555419921875
AudioFilterMoog filter4;        //xy=921,218
AudioFilterMoog filter6;        //xy=922.3333740234375,518.5556030273438
AudioFilterMoog filter8;        //xy=924.4445190429688,783.0000610351562
AudioFilterMoog filter7;        //xy=925,664
AudioMixer4              mixfilter1;     //xy=1183.9998779296875,70
AudioMixer4              mixfilter2;     //xy=1187,212
AudioMixer4              mixfilter3;     //xy=1188.6666259765625,352.2221984863281
AudioSynthWaveform       lfo3;           //xy=1193.77783203125,437.33331298828125
AudioMixer4              mixfilter6;     //xy=1214.444580078125,768.7777709960938
AudioMixer4              mixfilter4;     //xy=1215.888671875,504.6666259765625
AudioMixer4              mixfilter5;     //xy=1215.8887939453125,629.2222290039062
AudioEffectEnvelope      envelope12;     //xy=1400.4444580078125,769.2222290039062
AudioEffectMultiply      multiply12;     //xy=1401.4444580078125,729.2222290039062
AudioEffectEnvelope      envelope11;     //xy=1405.4444580078125,661.2222290039062
AudioEffectMultiply      multiply11;     //xy=1405.6666259765625,623.7777709960938
AudioEffectMultiply      multiply8;      //xy=1408.4444580078125,263.22222900390625
AudioEffectMultiply      multiply9;      //xy=1408.4444580078125,357.22222900390625
AudioEffectMultiply      multiply7;      //xy=1409.4444580078125,173.2222442626953
AudioEffectMultiply      multiply10;     //xy=1408.4444580078125,516.2222290039062
AudioEffectEnvelope      envelope10;     //xy=1409.4444580078125,555.2222290039062
AudioEffectEnvelope      envelope7;      //xy=1412.4444580078125,215.22222900390625
AudioEffectEnvelope      envelope8;      //xy=1412.4444580078125,310.22222900390625
AudioEffectEnvelope      envelope9;      //xy=1412.4444580078125,401.22222900390625
AudioMixer4              vca6;           //xy=1539,756
AudioMixer4              vca5;           //xy=1550,661
AudioMixer4              vca4;           //xy=1552,550
AudioMixer4              vca3;           //xy=1559,395
AudioMixer4              vca1;           //xy=1562,216
AudioMixer4              vca2;           //xy=1564,294
AudioMixer4              vca5_6;         //xy=1719,657
AudioMixer4              vca1_4;         //xy=1722,327
AudioMixer4              part_1;         //xy=1843,476
AudioEffectFlange        flange1;        //xy=2066,483
AudioMixer4              leftDelayFB;    //xy=2386.66650390625,591.7777709960938
AudioMixer4              rightDelayFB;   //xy=2387.77783203125,658.8888549804688
AudioEffectDelayExternal delayLeft; //xy=2446.222412109375,478.66668701171875
AudioEffectDelayExternal delayRight;     //xy=2457.77783203125,751.666748046875
AudioMixer4              rightDelayHeads; //xy=2680.4442749023438,728.2222900390625
AudioMixer4              leftDelayHeads; //xy=2693.111083984375,456.11114501953125
AudioMixer4              leftDryWet;     //xy=2927.6668701171875,466.5555725097656
AudioMixer4              rightDryWet;    //xy=2929.4443359375,739.888916015625
AudioMixer4              echo_mix; //xy=3136.4443359375,610.3333740234375
AudioEffectFreeverbStereo freeverbs1;     //xy=3311.3334350585938,611.9999389648438
AudioMixer4              delay_revl; //xy=3512.888671875,507.77789306640625
AudioMixer4              delay_revr; //xy=3512.11083984375,766.8888549804688
AudioOutputI2S           i2s2;           //xy=3701.1110229492188,622.2222290039062
AudioConnection          patchCord1(lfo1, harm_fm1);
AudioConnection          patchCord2(lfo1, harm_fm2);
AudioConnection          patchCord3(lfo1, harm_fm3);
AudioConnection          patchCord4(lfo1, harm_fm4);
AudioConnection          patchCord5(lfo1, harm_fm5);
AudioConnection          patchCord6(lfo1, harm_fm6);
AudioConnection          patchCord7(dc3, 0, multiply3, 0);
AudioConnection          patchCord8(dc2, 0, multiply2, 0);
AudioConnection          patchCord9(dc1, 0, multiply1, 0);
AudioConnection          patchCord10(harm_fm3, 0, multiply3, 1);
AudioConnection          patchCord11(dc4, 0, multiply4, 0);
AudioConnection          patchCord12(dc6, 0, multiply6, 0);
AudioConnection          patchCord13(harm_fm1, 0, multiply1, 1);
AudioConnection          patchCord14(dc5, 0, multiply5, 0);
AudioConnection          patchCord15(harm_fm2, 0, multiply2, 1);
AudioConnection          patchCord16(harm_fm6, 0, multiply6, 1);
AudioConnection          patchCord17(harm_fm4, 0, multiply4, 1);
AudioConnection          patchCord18(harm_fm5, 0, multiply5, 1);
AudioConnection          patchCord19(dc9, envelope3);
AudioConnection          patchCord20(dc12, envelope6);
AudioConnection          patchCord21(dc10, envelope4);
AudioConnection          patchCord22(multiply4, 0, mixfilter4, 0);
AudioConnection          patchCord23(multiply4, 0, filter6, 0);
AudioConnection          patchCord24(dc11, envelope5);
AudioConnection          patchCord25(dc8, envelope2);
AudioConnection          patchCord26(multiply3, 0, mixfilter3, 0);
AudioConnection          patchCord27(multiply3, 0, filter5, 0);
AudioConnection          patchCord28(multiply5, 0, mixfilter5, 0);
AudioConnection          patchCord29(multiply5, 0, filter7, 0);
AudioConnection          patchCord30(dc7, envelope1);
AudioConnection          patchCord31(multiply2, 0, mixfilter2, 0);
AudioConnection          patchCord32(multiply2, 0, filter4, 0);
AudioConnection          patchCord33(multiply1, 0, mixfilter1, 0);
AudioConnection          patchCord34(multiply1, 0, filter2, 0);
AudioConnection          patchCord35(multiply6, 0, mixfilter6, 0);
AudioConnection          patchCord36(multiply6, 0, filter8, 0);
AudioConnection          patchCord37(lfo2, 0, mixlfo1, 1);
AudioConnection          patchCord38(lfo2, 0, mixlfo3, 1);
AudioConnection          patchCord39(lfo2, 0, mixlfo4, 1);
AudioConnection          patchCord40(lfo2, 0, mixlfo5, 1);
AudioConnection          patchCord41(lfo2, 0, mixlfo2, 1);
AudioConnection          patchCord42(lfo2, 0, mixlfo6, 1);
AudioConnection          patchCord43(envelope6, 0, mixlfo6, 0);
AudioConnection          patchCord44(envelope5, 0, mixlfo5, 0);
AudioConnection          patchCord45(envelope3, 0, mixlfo3, 0);
AudioConnection          patchCord46(envelope1, 0, mixlfo1, 0);
AudioConnection          patchCord47(envelope4, 0, mixlfo4, 0);
AudioConnection          patchCord48(envelope2, 0, mixlfo2, 0);
AudioConnection          patchCord49(mixlfo1, 0, filter2, 1);
AudioConnection          patchCord50(mixlfo3, 0, filter5, 1);
AudioConnection          patchCord51(mixlfo4, 0, filter6, 1);
AudioConnection          patchCord52(mixlfo2, 0, filter4, 1);
AudioConnection          patchCord53(mixlfo6, 0, filter8, 1);
AudioConnection          patchCord54(mixlfo5, 0, filter7, 1);
AudioConnection          patchCord55(filter2, 0, mixfilter1, 1);
AudioConnection          patchCord56(filter2, 1, mixfilter1, 2);
AudioConnection          patchCord57(filter2, 2, mixfilter1, 3);
AudioConnection          patchCord58(filter5, 0, mixfilter3, 1);
AudioConnection          patchCord59(filter5, 1, mixfilter3, 2);
AudioConnection          patchCord60(filter5, 2, mixfilter3, 3);
AudioConnection          patchCord61(filter4, 0, mixfilter2, 1);
AudioConnection          patchCord62(filter4, 1, mixfilter2, 2);
AudioConnection          patchCord63(filter4, 2, mixfilter2, 3);
AudioConnection          patchCord64(filter6, 0, mixfilter4, 1);
AudioConnection          patchCord65(filter6, 1, mixfilter4, 2);
AudioConnection          patchCord66(filter6, 2, mixfilter4, 3);
AudioConnection          patchCord67(filter8, 0, mixfilter6, 1);
AudioConnection          patchCord68(filter8, 1, mixfilter6, 2);
AudioConnection          patchCord69(filter8, 2, mixfilter6, 3);
AudioConnection          patchCord70(filter7, 0, mixfilter5, 1);
AudioConnection          patchCord71(filter7, 1, mixfilter5, 2);
AudioConnection          patchCord72(filter7, 2, mixfilter5, 3);
AudioConnection          patchCord73(mixfilter1, envelope7);
AudioConnection          patchCord74(mixfilter1, 0, multiply7, 0);
AudioConnection          patchCord75(mixfilter1, 0, vca1, 2);
AudioConnection          patchCord76(mixfilter2, 0, multiply8, 0);
AudioConnection          patchCord77(mixfilter2, envelope8);
AudioConnection          patchCord78(mixfilter2, 0, vca2, 2);
AudioConnection          patchCord79(mixfilter3, 0, multiply9, 0);
AudioConnection          patchCord80(mixfilter3, envelope9);
AudioConnection          patchCord81(mixfilter3, 0, vca3, 2);
AudioConnection          patchCord82(lfo3, 0, multiply7, 1);
AudioConnection          patchCord83(lfo3, 0, multiply8, 1);
AudioConnection          patchCord84(lfo3, 0, multiply9, 1);
AudioConnection          patchCord85(lfo3, 0, multiply10, 0);
AudioConnection          patchCord86(lfo3, 0, multiply11, 0);
AudioConnection          patchCord87(lfo3, 0, multiply12, 0);
AudioConnection          patchCord88(mixfilter6, 0, multiply12, 1);
AudioConnection          patchCord89(mixfilter6, envelope12);
AudioConnection          patchCord90(mixfilter6, 0, vca6, 2);
AudioConnection          patchCord91(mixfilter4, envelope10);
AudioConnection          patchCord92(mixfilter4, 0, multiply10, 1);
AudioConnection          patchCord93(mixfilter4, 0, vca4, 2);
AudioConnection          patchCord94(mixfilter5, 0, multiply11, 1);
AudioConnection          patchCord95(mixfilter5, envelope11);
AudioConnection          patchCord96(mixfilter5, 0, vca5, 2);
AudioConnection          patchCord97(envelope12, 0, vca6, 1);
AudioConnection          patchCord98(multiply12, 0, vca6, 0);
AudioConnection          patchCord99(envelope11, 0, vca5, 1);
AudioConnection          patchCord100(multiply11, 0, vca5, 0);
AudioConnection          patchCord101(multiply8, 0, vca2, 0);
AudioConnection          patchCord102(multiply9, 0, vca3, 0);
AudioConnection          patchCord103(multiply7, 0, vca1, 0);
AudioConnection          patchCord104(multiply10, 0, vca4, 0);
AudioConnection          patchCord105(envelope10, 0, vca4, 1);
AudioConnection          patchCord106(envelope7, 0, vca1, 1);
AudioConnection          patchCord107(envelope8, 0, vca2, 1);
AudioConnection          patchCord108(envelope9, 0, vca3, 1);
AudioConnection          patchCord109(vca6, 0, vca5_6, 1);
AudioConnection          patchCord110(vca5, 0, vca5_6, 0);
AudioConnection          patchCord111(vca4, 0, vca1_4, 3);
AudioConnection          patchCord112(vca3, 0, vca1_4, 2);
AudioConnection          patchCord113(vca1, 0, vca1_4, 0);
AudioConnection          patchCord114(vca2, 0, vca1_4, 1);
AudioConnection          patchCord115(vca5_6, 0, part_1, 1);
AudioConnection          patchCord116(vca1_4, 0, part_1, 0);
AudioConnection          patchCord117(part_1, flange1);
AudioConnection          patchCord118(flange1, 0, leftDelayFB, 0);
AudioConnection          patchCord119(flange1, 0, rightDelayFB, 0);
AudioConnection          patchCord120(flange1, 0, rightDryWet, 0);
AudioConnection          patchCord121(flange1, 0, leftDryWet, 0);
AudioConnection          patchCord122(leftDelayFB, delayLeft);
AudioConnection          patchCord123(rightDelayFB, delayRight);
AudioConnection          patchCord124(delayLeft, 0, leftDelayHeads, 0);
AudioConnection          patchCord125(delayLeft, 1, leftDelayHeads, 1);
AudioConnection          patchCord126(delayLeft, 2, leftDelayHeads, 2);
AudioConnection          patchCord127(delayLeft, 3, leftDelayHeads, 3);
AudioConnection          patchCord128(delayRight, 0, rightDelayHeads, 0);
AudioConnection          patchCord129(delayRight, 1, rightDelayHeads, 1);
AudioConnection          patchCord130(delayRight, 2, rightDelayHeads, 2);
AudioConnection          patchCord131(delayRight, 3, rightDelayHeads, 3);
AudioConnection          patchCord132(rightDelayHeads, 0, rightDryWet, 1);
AudioConnection          patchCord133(rightDelayHeads, 0, leftDelayFB, 1);
AudioConnection          patchCord134(rightDelayHeads, 0, rightDelayFB, 2);
AudioConnection          patchCord135(leftDelayHeads, 0, rightDelayFB, 1);
AudioConnection          patchCord136(leftDelayHeads, 0, leftDryWet, 1);
AudioConnection          patchCord137(leftDelayHeads, 0, leftDelayFB, 2);
AudioConnection          patchCord138(leftDryWet, 0, echo_mix, 0);
AudioConnection          patchCord139(leftDryWet, 0, delay_revl, 0);
AudioConnection          patchCord140(rightDryWet, 0, echo_mix, 1);
AudioConnection          patchCord141(rightDryWet, 0, delay_revr, 0);
AudioConnection          patchCord142(echo_mix, freeverbs1);
AudioConnection          patchCord143(freeverbs1, 0, delay_revl, 1);
AudioConnection          patchCord144(freeverbs1, 1, delay_revr, 1);
AudioConnection          patchCord145(delay_revl, 0, i2s2, 0);
AudioConnection          patchCord146(delay_revr, 0, i2s2, 1);
AudioControlSGTL5000     codec;          //xy=570,918
// GUItool: end automatically generated code
 
I'm concerned there many be some unknown bug. Teensy 4.0 is relatively new and while I've done quite a lot of testing with much smaller audio systems, I've not attempted anything this large.

But this list has at least 2 class names that aren't part of the official audio library. I also see 2 instances of the external delay, which could play havoc with anything else trying to use SPI.

If you believe this really may be a bug in the audio library or other core library software for Teensy 4.0, I hope you'll put some work into creating a reproducible test case. I'm guessing your code probably responds to buttons or knobs or MIDI messages or other input. That sort of input can be extremely difficult to reproduce the same way. To investigate a possible bug, I really need a test case that just uses delays or things like elapsedMillis to call the many audio library functions in a reproducible way. If I can reproduce a problem, I can usually dig into the code and figure out what's causing it and come up with a fix.
 
If you play all 6 voices/notes at once, do you get noises? The order of the audio objects needs to have objects created in order of audio signal flow and this includes objects feeding back to previous objects. I had noises appearing on my T3.6-based synth when playing two or more voices until I got the object creation order correct. Also, the external delay was significantly cpu heavy, which is why I decided not to use it.
Everything looks fine up to 'leftDelayHeads' and 'rightDelayHeads', which I think should come before 'leftDelayFB' and 'rightDelayFB', which they're feeding back into.
 
Sorry for my late reply: When I look at the web design, the head mixer is exactly after the delay and before the FB Mixer.
And I'm getting noise, the the system seems to be overloaded.
As Paul mentioned, the design depends on an external MIDI input (which comes from a PC based GUI via an USB-Router - actually a Teensy 3.2 which receives MIDI and sends OSC via Serial Wire to the T40).
At the Moment which my new design (i.e. a new filter class with Moog Filter), there is no noise.
 
Status
Not open for further replies.
Back
Top