Grain duration

Status
Not open for further replies.

Antonis

Member
Hello ! I am trying to use Granular and two Freverbs in an audio effect that I want to build on Teensy 4 . I made a small experiment to see the limits of the memory of Teensy 4. I create this Screen Shot 2020-02-17 at 01.53.56.jpg The results for me is that the longest duration of a grain that Teensy 4. can handle is about 32640(samples), AudioMemory(255) that is 740msec long . Is this correct or am I doing something wrong ? My code is this :

Code:
// Advanced Microcontroller-based Audio Workshop
//
// http://www.pjrc.com/store/audio_tutorial_kit.html
// https://hackaday.io/project/8292-microcontroller-audio-workshop-had-supercon-2015
// 
// Part 1-2: Test Hardware
//
// Simple beeping is pre-loaded on the Teensy, so
// it will create sound and print info to the serial
// monitor when plugged into a PC.
//
// This program is supposed to be pre-loaded before
// the workshop, so Teensy+Audio will beep when
// plugged in.

#include <Audio.h>
#include <Wire.h>
#include <SD.h>
#include <SPI.h>
#include <SerialFlash.h>
#include <Bounce.h>

// GUItool: begin automatically generated code
AudioInputI2S            i2s2;           //xy=92,464
AudioAmplifier           amp1;           //xy=244.28573608398438,447.1427917480469
AudioAmplifier           amp2;           //xy=244.28573608398438,495.7143249511719
AudioEffectFreeverb      freeverb2;      //xy=366,530
AudioEffectGranular      granular2;      //xy=381,471
AudioEffectFreeverb      freeverb1;      //xy=387.28570556640625,298.4285888671875
AudioEffectGranular      granular1;      //xy=398,376
AudioMixer4              mixer1;         //xy=562.8571166992188,357.14276123046875
AudioMixer4              mixer2;         //xy=565.7142944335938,443.4285583496094
AudioOutputI2S           i2s1;           //xy=750.7142333984375,416.142822265625
AudioConnection          patchCord1(i2s2, 0, amp1, 0);
AudioConnection          patchCord2(i2s2, 1, amp2, 0);
AudioConnection          patchCord3(amp1, freeverb1);
AudioConnection          patchCord4(amp1, granular1);
AudioConnection          patchCord5(amp2, freeverb2);
AudioConnection          patchCord6(amp2, granular2);
AudioConnection          patchCord7(freeverb2, 0, mixer2, 0);
AudioConnection          patchCord8(granular2, 0, mixer2, 1);
AudioConnection          patchCord9(freeverb1, 0, mixer1, 0);
AudioConnection          patchCord10(granular1, 0, mixer1, 1);
AudioConnection          patchCord11(mixer1, 0, i2s1, 0);
AudioConnection          patchCord12(mixer2, 0, i2s1, 1);
AudioControlSGTL5000     sgtl5000_1;     //xy=741.3571166992188,458.21435546875
// GUItool: end automatically generated code




Bounce button0 = Bounce(0, 15);
Bounce button1 = Bounce(1, 15);
Bounce button2 = Bounce(2, 15);

const int myInput = AUDIO_INPUT_LINEIN;
#define GRANULAR_MEMORY_SIZE 32640  // 200AM 25600smpls 580ms
int16_t granularMemory[GRANULAR_MEMORY_SIZE];


void setup() {
  AudioMemory(255);
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  //pinMode(3, OUTPUT);
  //pinMode(4, OUTPUT);
  //pinMode(5, OUTPUT);
  delay(2000);
  
  Serial.begin(115200);
  sgtl5000_1.enable();
  sgtl5000_1.volume(0.5);

  

  granular1.begin(granularMemory, GRANULAR_MEMORY_SIZE);
  granular2.begin(granularMemory, GRANULAR_MEMORY_SIZE);
  

  amp1.gain(1);
  amp2.gain(1);

}
 

void loop() {
  
  button0.update();
  button1.update();
  button2.update();

  float knobA2 = ((float)analogRead(A2) / 1023.0);
  //float knobA1 = (float)analogRead(A1) / 1023.0;

   freeverb1.roomsize(knobA2);
   freeverb2.roomsize(knobA2);
   
   //freeverb1.damping(knobA3);

  float knobA1 = analogRead(A1);
  float gain1 = (float)knobA1 / 1023.0;
  float gain2 = 1.0 - gain1;
    mixer1.gain(0, gain1);
    mixer1.gain(1, gain2);
    mixer2.gain(0, gain1);
    mixer2.gain(1, gain2);
  
  if (button2.fallingEdge()){
    amp1.gain(0);
    amp2.gain(0);
  }

  if (button2.risingEdge()){
    amp1.gain(1);
    amp2.gain(1);
  }

  if (button0.fallingEdge()) {
    //float msec = 100.0 + (knobA4 * 190.0);
    granular1.beginFreeze(740); //580
    granular2.beginFreeze(740); // 580
    //granular1.beginFreeze(310);
    //granular2.beginFreeze(300);
//    delay1.delay(0, 0); 
    Serial.print("Begin granular freeze using ");
    //Serial.print(msec);
    Serial.println(" grains");
    
  }
  if (button0.risingEdge()) {
    granular1.stop();
    granular2.stop();
    //delay1.disable(200); 
  }

}
 
Status
Not open for further replies.
Back
Top