Ejemplo n.º 1
0
  @Override
  protected void uGenerate(float[] channels) {
    // make sure we are generating the correct number of channels
    if (m_tickBuffer.length != channels.length) {
      m_tickBuffer = new float[channels.length];
      // and propagate that to our list
      for (int i = 0; i < m_ugens.size(); ++i) {
        UGen u = m_ugens.get(i);

        if (u != null) {
          u.setAudioChannelCount(channels.length);
        } else // a null entry means it was unpatched, so go ahead and cull now
        {
          m_ugens.remove(i);
          --i;
        }
      }
    }

    // start with silence
    for (int i = 0; i < channels.length; ++i) {
      channels[i] = 0;
    }

    for (int i = 0; i < m_ugens.size(); ++i) {
      // m_tickBuffer should be filled with the correct audio
      // even if this ugen has generated audio already
      UGen u = m_ugens.get(i);

      if (u != null) {
        u.tick(m_tickBuffer);
        processSampleFrame(m_tickBuffer, channels);
      } else // a null entry means this ugen was unpatched, so we remove the entry
      {
        m_ugens.remove(i);
        --i;
      }
    }
  }