Limits of delay effect in audio library

Frank's version 4 MemoryBoard just arrived from OSH Park!

Frank, do you have parts placement diagram I could print, so Erin can solder up one of these boards? If not, I can probably draw something.

One useful piece of info would be the order to populate the 6 memory chips. We'll probably build the first board with 1 or 2 chips, and if that works, another with all 6. I'm pretty sure I have only 8 memory chips left.
 
Wow cool, i still have to wait..

Sorry, have no diagrm. Aren't the IC# numbers printed on the board ?

On the backside (the 8-pin soic the RAMS, ascending numbers, pin 1 is marked),
on the top there is only one soic-16 and one soic-14 so nothing can not be confused.
All 'C' are 0.1uf, all R something like 10K or more..

Pls sorry, it's midnight, i can write details tomorrow. I hope it works!
 
Perhaps solder it without RAMs, and check wether all chipselect-pins are working before adding the RAMs!
 
Memoryboard3

Paul,

I built a memoryboard3 over the weekend -- parts placement was straightforward using the part id's printed on the board. It's up and running with no errors from the test program.

The design appears to be sound -- look forward to hearing how the memoryboard4 works.

Best regards,
Michael
 
Memoryboard4 is working with all 6 chips!

I've added support in the audio library. Anyone who builds on should be able to have it "just work" with the audio lib. Well, you do have to add the "AUDIO_MEMORY_MEMORYBOARD" parameter to the AudioEffectDelayExternal constructor. See the code below for an example.

In other news, 9 seconds is far beyond my "it's working" attention span for electronics....

Here's a little test program.

file.png
(click for full size)

Notice the horizontal scale is 1 second per division!

Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

AudioSynthWaveformSine     sine;
AudioEffectEnvelope        env;
AudioEffectDelayExternal   dly(AUDIO_MEMORY_MEMORYBOARD);
AudioMixer4                mix;
AudioOutputI2S             headphones;

AudioConnection            patchCord1(sine, env);
AudioConnection            patchCord2(env, dly);
AudioConnection            patchCord3(dly, 0, mix, 0);
AudioConnection            patchCord4(dly, 1, mix, 1);
AudioConnection            patchCord5(env, 0, headphones, 0);
AudioConnection            patchCord6(mix, 0, headphones, 1);
AudioControlSGTL5000 audioShield;

void setup() {
        AudioMemory(10);
        audioShield.enable();
        audioShield.volume(0.6);
        sine.amplitude(0.9);
        sine.frequency(800);
        dly.delay(0, 8000);
        dly.delay(1, 9000);
}

void loop() {
        env.noteOn();
        delay(450);
        env.noteOff();
        delay(10000);
        Serial.print("CPU: ");
        Serial.println(AudioProcessorUsageMax());
        AudioProcessorUsageMaxReset();
}
 
Are those memory chips: 23LC1024 ? Even with HiDef images my ChipID search_foo is lacking

<edit>: Also is there a drop in FLASH chip that would work interchangeably on this board as designed for static memory?
 
Last edited:
Frank --- would you mind posting the .sch file, too? i suppose it looks straightforward enough but just to make sure. (ie for people not wanting to stack too many boards or use other pins)
 
Last edited:
Are those memory chips: 23LC1024 ? Even with HiDef images my ChipID search_foo is lacking

<edit>: Also is there a drop in FLASH chip that would work interchangeably on this board as designed for static memory?
Yes, the RAMs are 23LC1024 SO-8
I think you can use all so-8 "jedec" compatible spi-memory chips for 3Volt - (= all which are ok for the audioboard)

And you could mix them, for example 5 x RAM + 1 x FLASH

Edit: Check the package-width of the chips.
 
Last edited:
Hi,
Trying to do digital delay for guitar. Delay work's fine at long delay times and external memory also. But if I'll try to adjust delay time with potentiometer, there is crunching and crackling constantly. Also there is huge amount of background noise. Initial test code:

Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
//const int myInput = AUDIO_INPUT_MIC;
const int myInput = AUDIO_INPUT_LINEIN;
// GUItool: begin automatically generated code
AudioInputI2S            i2s1;           //xy=221,271
AudioMixer4              mixer1;         //xy=388,160
AudioEffectDelayExternal delayExt1;      //xy=528,436
AudioMixer4              mixer2;         //xy=545,175
AudioOutputI2S           i2s2;           //xy=813,254
AudioConnection          patchCord1(i2s1, 0, mixer1, 0);
AudioConnection          patchCord2(i2s1, 1, mixer1, 1);
AudioConnection          patchCord3(mixer1, 0, mixer2, 0);
AudioConnection          patchCord4(mixer1, delayExt1);
AudioConnection          patchCord5(delayExt1, 6, mixer2, 2);
AudioConnection          patchCord6(delayExt1, 7, mixer1, 2);
AudioConnection          patchCord7(mixer2, 0, i2s2, 0);
AudioConnection          patchCord8(mixer2, 0, i2s2, 1);

AudioControlSGTL5000 audioShield;
// GUItool: end automatically generated code

int delayt;

void setup() {
        AudioMemory(10);
        audioShield.enable();
        audioShield.volume(1);
        audioShield.inputSelect(myInput);

   
  mixer1.gain(0, 0.5);
  mixer1.gain(1, 0.5);
  mixer1.gain(2, 0.5);
 // mix1.gain(3, 0.4);
  mixer2.gain(0, 0.5);
  mixer2.gain(2, 0.5);
        delayExt1.delay(6, 1500);
        delayExt1.delay(7, 1500);
        
}


void loop() {
   int n = analogRead(15);
  if (n != delayt) {
    
   delayt= n;
     delayExt1.delay(6, delayt*2);
        delayExt1.delay(7, delayt*2);
 
  }
       int vol = analogRead(15);
   
    
        delay(250);
}
 
Last edited:
Yes, changing the delay while the delay loop is runing will create bad effects unless you are very careful. The sample point of the delay will make big jumps that are not phase adjusted, and the result will be like ripping the sound apart. You can add code to move the delay time smoothly, giving a phasor effect, or setting up a new delay with the modified delay time and make some kind of smoth transition, crossfade, between delay times.
 
[spam] ;-) Teensy + Connectorboard + Memoryboard = almost same size, only some mm higher, and two rows longer
20150922_224919.jpg
 
I've got a spare Memoryboard 4 from my OSH Park order, if anyone UK based wants it drop me a note and I'll pop it in the posts (free to a good home). Cheers, Paul

PS many thanks to Frank and Paul S for sharing their work on these these excellent tools.
 
Is there any chance to find someone who provides a fully assembled memory-board at an reasonable price? I would like to assemble it myself, but despite I earned some money with soldering earlier in my student days, my abilities in soldering SMD stuff are quite inexistent ... so I'm hoping some enthusiast might help me with this problem ... because I would like to use the teensy board (my favorite among all "Arduino like programmable" boards!) for some audio experiments like crossover-network for a little Loudspeaker-Box or even to create an individual synthesizer. So some fast accessible memory will be helpful in this matter ... :cool:

THX, Manfred
 
I don't know of anyone selling the memory shield.

Before you put too much time and money into pursuing a memory shield, you might ask whether it'll really do you much (or any) good. Currently the audio library has only 1 object which uses the memory shield, for long delays. If you're building real-time effects that need a delay more than about 0.3 to 0.5 second, the memory shield could really help. Otherwise, nothing else in the library makes use of its memory.

You can get short but very useful delays without the memory shield. For example, see the new tutorial video starting at 16:55. There's also a filter demo right after the two delay demos.

https://www.youtube.com/watch?v=wqt55OAabVs

Most of the things you'd do with synthesis just don't need lengthy delays. Likewise, filters you'd use for speaker crossover applications don't use external memory.

Building a memory shield will only help if you use the external memory delay object. Of course, if you're doing something really strange that needs long delay, it's pretty awesome!
 
Back
Top