Hello,
i am a professional bass player from Berlin and i m trying to upgrade my guitar by adding a teensy 3.6 and trellis (look here ). Everything works fine exept the the beginFreeze() . It work on 3.2 but i want to work with samples this is why i decided to use the 3.6 (more memory, faster). Any why nothing is happening when i am activating beginFreeze()? Do i need somthing like a debounce function for the trellis pad? if so do you know how to write that? here is the code. THX hottib
i am a professional bass player from Berlin and i m trying to upgrade my guitar by adding a teensy 3.6 and trellis (look here ). Everything works fine exept the the beginFreeze() . It work on 3.2 but i want to work with samples this is why i decided to use the 3.6 (more memory, faster). Any why nothing is happening when i am activating beginFreeze()? Do i need somthing like a debounce function for the trellis pad? if so do you know how to write that? here is the code. THX hottib
Code:
// Granular Effect Example - Pitch shift or freeze sgt input and samples
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
#include "Adafruit_Trellis.h"
#include "AudioSampleLang.h"
#include "AudioSampleKurz.h"
#include "Bounce.h"
// GUItool: begin automatically generated code
AudioPlayMemory playMem1; //xy=146.1666717529297,193.1666717529297
//AudioSynthWavetable wavetable1; //xy=146.74998474121094,134.75
AudioInputI2S i2s2; //xy=156.1666717529297,163.1666717529297
AudioMixer4 mixer1; //xy=413.16668701171875,141
AudioEffectGranular granular1; //xy=563.1666870117188,117.00000762939453
AudioOutputI2S i2s1; //xy=728.1666870117188,146
AudioConnection patchCord1(playMem1, 0, mixer1, 2);
//AudioConnection patchCord2(wavetable1, 0, mixer1, 0);
AudioConnection patchCord3(i2s2, 0, mixer1, 1);
AudioConnection patchCord4(mixer1, granular1);
AudioConnection patchCord5(granular1, 0, i2s1, 0);
AudioConnection patchCord6(granular1, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=482.75,296.75
// GUItool: end automatically generated code
Adafruit_Trellis matrix0 = Adafruit_Trellis();
Adafruit_TrellisSet trellis = Adafruit_TrellisSet(&matrix0);
#define NUMTRELLIS 1
#define numKeys (NUMTRELLIS * 16)
#define INTPIN A2
Bounce button0 = Bounce(0, 15);
Bounce button1 = Bounce(1, 15);
Bounce button2 = Bounce(2, 15);
#define GRANULAR_MEMORY_SIZE 12800 // enough for 290 ms at 44.1 kHz
int16_t granularMemory[GRANULAR_MEMORY_SIZE];
const int myInput = AUDIO_INPUT_LINEIN;
boolean compressorOn = false; // default this to off.
void setup() {
Serial.begin(9600);
AudioMemory(80);
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
sgtl5000_1.inputSelect(myInput);
mixer1.gain(0, 0.5);
mixer1.gain(1, 0.5);
mixer1.gain(2, 0.5);
mixer1.gain(3, 0.5);
trellis.begin(0x70);
for (uint8_t i=0; i<numKeys; i++) {
trellis.setLED(i);
trellis.writeDisplay();
delay(50);
}
// then turn them off
for (uint8_t i=0; i<numKeys; i++) {
trellis.clrLED(i);
trellis.writeDisplay();
delay(50);
analogRead(A1);
analogRead(A2);
analogRead(A0);
}
// the Granular effect requires memory to operate
granular1.begin(granularMemory, GRANULAR_MEMORY_SIZE);
}
void updateKnob() {
// read pushbuttons
button0.update();
button1.update();
button2.update();
// read knobs, scale to 0-1.0 numbers
float knobA0 = (float)analogRead(A0) / 1023.0;
float knobA1 = (float)analogRead(A1) / 1023.0;
// Button 0 starts Freeze effect
if (button0.fallingEdge()) {
float msec = 100.0 + (knobA1 * 190.0);
granular1.beginFreeze(msec);
Serial.print("Begin granular freeze using ");
Serial.print(msec);
Serial.println(" grains");
}
if (button0.risingEdge()) {
granular1.stop();
}
// Button 1 starts Pitch Shift effect
if (button1.fallingEdge()) {
float msec = 25.0 + (knobA1 * 75.0);
granular1.beginPitchShift(msec);
Serial.print("Begin granular pitch phift using ");
Serial.print(msec);
Serial.println(" grains");
}
if (button1.risingEdge()) {
granular1.stop();
}
if (button1.risingEdge()) {
granular1.stop();}
// Button 2 starts sample
if (button2.fallingEdge()) {
playMem1.play(AudioSampleLang);
}
// Continuously adjust the speed, based on the A1 pot
#
float ratio;
//ratio = powf(2.0, knobA0 * 2.0 - 1.0); // 0.5 to 2.0
ratio = powf(2.0, knobA0 * 6.0 - 3.0); // 0.125 to 8.0 -- uncomment for far too much range!
granular1.setSpeed(ratio);
}
void updateTrellis() {
trellis.readSwitches();
if (trellis.justPressed(0))
{
playMem1.play(AudioSampleKurz);
}
if (trellis.justPressed(1))
{
playMem1.play(AudioSampleLang);
}
if (trellis.isKeyPressed(1)){
}
// 8-11 Freeze mit unterschidlichen Längen
if (trellis.justPressed(4))
{
granular1.beginFreeze(250);
}
if (trellis.justReleased(4))
{
granular1.stop();
}
if (trellis.justPressed(9))
{
granular1.beginFreeze(180);
}
if (trellis.justReleased(9))
{
granular1.stop();
}
if (trellis.justPressed(10))
{
granular1.beginFreeze(110);
}
if (trellis.justReleased(10))
{
granular1.stop();
}
if (trellis.justPressed(11))
{
granular1.beginFreeze(60);
}
if (trellis.justReleased(11))
{
granular1.stop();
}
// 12-15 Pitchshift when pressed mit unterschidlichen Längen
if (trellis.justPressed(12))
{
granular1.beginPitchShift(8);
}
if (trellis.justReleased(12))
{
granular1.stop();
}
if (trellis.justPressed(13))
{
granular1.beginPitchShift(6);
}
if (trellis.justReleased(13))
{
granular1.stop();
}
if (trellis.justPressed(14))
{
granular1.beginPitchShift(0.8);
}
if (trellis.justReleased(14))
{
granular1.stop();
}
if (trellis.justPressed(15))
{
granular1.beginPitchShift(0.4);
}
if (trellis.justReleased(15))
{
granular1.stop();
}
}
/*void updateTrellisLED()
{
for (uint8_t i=0; i<numKeys; i++) {
if (trellis.justPressed(i)){trellis.setLED(i);
}
for (uint8_t i=0; i<numKeys; i++) {
if (trellis.justReleased(i)){trellis.clrLED(i);
}
trellis.writeDisplay();
}
}
}
*/
void loop()
{
// capture the latest value of millis()
// this is equivalent to noting the time from a clock
// use the same time for all LED flashes to keep them synchronized
// call the functions that do the work
updateTrellis();
updateKnob();
delay(10);
// updateTrellisLED();
}
Last edited by a moderator: