Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Error when changing input of P5.Amplitude() with p5.sound.js

I Have this simple code which is supposed to show the amplitude of a signal from an oscillator, before and after passing it through a passBand filter. It looks like the error appears when I try to change the input of the p5.Amplitude object when I use p5.Amplitude.setInput(). What am I doing wrong here ?

Here the error message :

Uncaught TypeError: Cannot read properties of undefined (reading 'length')
    at RingBuffer.push (ae4c7513-7172-4e09-988d-70743483fbb1:75:45)
    at AmplitudeProcessor.process (ae4c7513-7172-4e09-988d-70743483fbb1:193:28)

And here is my code : (I made my bandPass filter by adding a lowPass and an highPass, I don't use the bandPass object on purpose)

let cnv, soundOnCheckbox, filterOnCheckbox
let osc;
let OscAmpIn, OscAmpOut
let filterTab = []

function setup() {
  cnv = createCanvas(windowWidth, windowHeight); 

  //Signal and Amplitudes
  OscAmpIn = new p5.Amplitude(0.9)
  OscAmpOut = new p5.Amplitude(0.9)

  osc = new p5.Oscillator('sine');
  osc.freq(700)
  
 //Checkbox to turn sound and filters on/off
  soundOnCheckbox = createCheckbox('Sound On/Off', false)
  soundOnCheckbox.changed(soundOn);
  soundOnCheckbox.position(width/2,height/2)


  filterOnCheckbox = createCheckbox('Filter On/Off', false)
  filterOnCheckbox.changed(filterOn);
  filterOnCheckbox.position(width/2,height/2+20)


  creationFilter()
}

function draw() {
  background(55);
  translate(width/2, height/2)
  noStroke()
  fill(255)
  textSize(20)
  text("AmpIn = " + OscAmpIn.getLevel(),0,100)
  text("AmpOut = " + OscAmpOut.getLevel(),0,120)
}


//Turn the sound on/off
function soundOn() {
  userStartAudio();
  if(!soundOnCheckbox.checked()){
    osc.stop()
  }else{
    osc.start()
  }
} 


//Create two filters (lowpass and highpass) to create a passBand 
function creationFilter(){
      let lowPass = new p5.LowPass()
      let highPass = new p5.HighPass()
      lowPass.set(15000)
      highPass.set(10000)
      filterTab.push({lowPass,highPass})
}


//Turn the filter on/off
function filterOn(){
  if(filterOnCheckbox.checked()){
    osc.disconnect() //disconnect the osc from the main output
    osc.connect(filterTab[0].highPass) //Connect the osc to highpass
    filterTab[0].lowPass.connect(filterTab[0].highPass) //Connect the lowpass to the highpass. So we eventually have the osc connected to a bandpass
    setAmpInput()
  }else{ //If no filter, osc is linked to main output and AmpIn and AmpOut input are the same
    osc.connect()
    OscAmpIn.setInput(osc)
    OscAmpOut.setInput(osc)
  }
}

//Set the input of the amplitudes 
function setAmpInput(){
    OscAmpIn.setInput(osc) //Set input of the amp as the sound before the filter
    OscAmpOut.setInput(filterTab[0].lowPass) //Set input of the amp as the sound after the filter
}
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

I think this might be a bug and you could post an issue on the p5.sound github. You should be able to connected a filter to the Amplitude...

OscAmpOut.setInput(filterTab[0].lowPass); isn't connecting the Amplitude to the output of the filter correctly. You have two options;

You can do OscAmpOut.setInput(); so that the Amplitude connects to the main output, which is the same as the output of the filter.

Or, if you want to use the actual output of this osc/filter configuration, you should add a Gain node. It connects after the filter, osc -> lowPass -> highPass -> gain -> main output.

let cnv, soundOnCheckbox, filterOnCheckbox;
let osc;
let OscAmpIn, OscAmpOut;
let filterTab = [];

function setup() {
  cnv = createCanvas(windowWidth, windowHeight);

  //Signal and Amplitudes
  OscAmpIn = new p5.Amplitude(0.9);
  OscAmpOut = new p5.Amplitude(0.9);

  osc = new p5.Oscillator("sine");
  osc.freq(700);

  //Checkbox to turn sound and filters on/off
  soundOnCheckbox = createCheckbox("Sound On/Off", false);
  soundOnCheckbox.changed(soundOn);
  soundOnCheckbox.position(width / 2, height / 2);

  filterOnCheckbox = createCheckbox("Filter On/Off", false);
  filterOnCheckbox.changed(filterOn);
  filterOnCheckbox.position(width / 2, height / 2 + 20);

  creationFilter();
}

function draw() {
  background(55);
  translate(width / 2, height / 2);
  noStroke();
  fill(255);
  textSize(20);
  text("AmpIn = " + OscAmpIn.getLevel(), 0, 100);
  text("AmpOut = " + OscAmpOut.getLevel(), 0, 120);
}

//Turn the sound on/off
function soundOn() {
  userStartAudio();
  if (!soundOnCheckbox.checked()) {
    osc.stop();
  } else {
    osc.start();
  }
}

//Create two filters (lowpass and highpass) to create a passBand
function creationFilter() {
  let lowPass = new p5.LowPass();
  let highPass = new p5.HighPass();
  let gain = new p5.Gain(); // setup a gain node

  //connect filter to gain
  lowPass.set(680);
  highPass.set(720);
  lowPass.disconnect();
  highPass.disconnect();

  lowPass.connect(highPass); //output from lowPass -> highPass
  highPass.connect(gain); //output from highpass -> gain
  gain.connect(); //output from gain -> main output

  filterTab.push({ lowPass, highPass, gain });
}

//Turn the filter on/off
function filterOn() {
  if (filterOnCheckbox.checked()) {
    //disconnect osc from main output
    osc.disconnect();
    //connect osc to filter
    //output from osc -> lowpass -> highpass -> gain
    osc.connect(filterTab[0].lowPass);    
    //set amplitude inputs
    OscAmpIn.setInput(osc);
    OscAmpOut.setInput(filterTab[0].gain);
  } else {
    //connect osc to main output
    osc.disconnect();
    osc.connect();
    //set amplitude inputs
    OscAmpIn.setInput(osc);
    OscAmpOut.setInput(osc);
  }
}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda