Ejemplo n.º 1
0
void JuceDemoPluginAudioProcessor::applyGain (AudioBuffer<FloatType>& buffer, AudioBuffer<FloatType>& delayBuffer)
{
	ignoreUnused (delayBuffer);
    const float gainLevel = *gainParam;

    for (int channel = 0; channel < getNumInputChannels(); ++channel)
        buffer.applyGain (channel, 0, buffer.getNumSamples(), gainLevel);
}
Ejemplo n.º 2
0
void JackLayer::fillWithUrgent(AudioBuffer &buffer, size_t samplesToGet)
{
    // Urgent data (dtmf, incoming call signal) come first.
    samplesToGet = std::min(samplesToGet, hardwareBufferSize_);
    buffer.resize(samplesToGet);
    urgentRingBuffer_.get(buffer, RingBufferPool::DEFAULT_ID);
    buffer.applyGain(isPlaybackMuted_ ? 0.0 : playbackGain_);

    // Consume the regular one as well (same amount of samples)
    Manager::instance().getRingBufferPool().discard(samplesToGet, RingBufferPool::DEFAULT_ID);
}
Ejemplo n.º 3
0
size_t OpenSLLayer::audioPlaybackFillWithVoice(AudioBuffer &buffer)
{
    RingBufferPool &mainBuffer = Manager::instance().getRingBufferPool();
    size_t got = mainBuffer.getAvailableData(buffer, RingBufferPool::DEFAULT_ID);
    buffer.resize(got);
    buffer.applyGain(isPlaybackMuted_ ? 0.0 : playbackGain_);
    if (audioFormat_.sample_rate != mainBuffer.getInternalSamplingRate()) {
        DEBUG("OpenSLLayer::audioPlaybackFillWithVoice sample_rate != mainBuffer.getInternalSamplingRate() \n");
        AudioBuffer out(buffer, false);
        out.setSampleRate(audioFormat_.sample_rate);
        resampler_->resample(buffer, out);
        buffer = out;
    }
    return buffer.size();
}
Ejemplo n.º 4
0
void JackLayer::fillWithVoice(AudioBuffer &buffer, size_t samplesAvail)
{
    RingBufferPool &mainBuffer = Manager::instance().getRingBufferPool();

    buffer.resize(samplesAvail);
    mainBuffer.getData(buffer, RingBufferPool::DEFAULT_ID);
    buffer.applyGain(isPlaybackMuted_ ? 0.0 : playbackGain_);

    if (audioFormat_.sample_rate != (unsigned) mainBuffer.getInternalSamplingRate()) {
        RING_DBG("fillWithVoice sample_rate != mainBuffer.getInternalSamplingRate() \n");
        AudioBuffer out(buffer, false);
        out.setSampleRate(audioFormat_.sample_rate);
        resampler_->resample(buffer, out);
        buffer = out;
    }
}
Ejemplo n.º 5
0
void OpenSLLayer::audioCaptureFillBuffer(AudioBuffer &buffer)
{
    RingBufferPool &mbuffer = Manager::instance().getRingBufferPool();
    const AudioFormat mainBufferFormat = mbuffer.getInternalAudioFormat();
    const bool resample = mainBufferFormat.sample_rate != audioFormat_.sample_rate;

    buffer.applyGain(isCaptureMuted_ ? 0.0 : captureGain_);

    if (resample) {
        int outSamples = buffer.frames() * (static_cast<double>(audioFormat_.sample_rate) / mainBufferFormat.sample_rate);
        AudioBuffer out(outSamples, mainBufferFormat);
        resampler_->resample(buffer, out);
        dcblocker_.process(out);
        mainRingBuffer_->put(out);
    } else {
        dcblocker_.process(buffer);
        mainRingBuffer_->put(buffer);
    }
}
void PolyWavegeneratorProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& midiBuffer)
{
  // clear all the midibuffers of the voices because they still contain the events from the last process Block
  for(int index = 0; index < voices.size(); index++)
  {
    voices[index]->clearMidiBuffer();
  }
  
  // Midi and Voice Handler this is not correct yet i need to watch out for different note ons of the same note in one buffer and other stuff
  if(takesMidi && !midiBuffer.isEmpty())
  {
    MidiMessage& message1 = *new MidiMessage();
    ScopedPointer<MidiBuffer::Iterator> iterator = new MidiBuffer::Iterator(midiBuffer);
    int sampleInBuffer = 0;
    while(iterator->getNextEvent(message1, sampleInBuffer))
    {
      if(message1.isNoteOn())
      {
        // always take the first one and move it to the back => the oldest voice will be "overwritten"
        voices[0]->setIsOn(true);
        voices[0]->setMidiNote(message1.getNoteNumber());
        voices[0]->addMidiEvent(message1, sampleInBuffer);
        
        voices.move(0, voices.size()-1);
      }
      else if(message1.isNoteOff())
      {
        for(int index = 0; index < voices.size(); index++)
        {
          if(voices[index]->getMidiNote() == message1.getNoteNumber())
          {
            ScopedPointer<Voice> tempVoice = voices[index];
            
            tempVoice->setIsOn(false);
            tempVoice->addMidiEvent(message1, sampleInBuffer);
            tempVoice->setMidiNote(-1); // this should be removed but just in case for now
            
            break;
          }
        }
      }
    }
  }
  
  
  
  // Audio Handling of the voices
  AudioBuffer<float> outBuffer = getBusBuffer(buffer, false, 0);
  
  int numActive = 0; // eventually this could be a member variable
  for(int index = 0; index < voices.size(); index++)
  {
    if(voices[index]->getIsOn())
    {
      numActive++;
      
      voices[index]->clearAudioBuffer();
      voices[index]->fillBufferEnvelope();
      voices[index]->fillBufferAudio();
      
      outBuffer.addFrom(0, 0, voices[index]->getOutBuffer(), 0, 0, outBuffer.getNumSamples());
    }
  }
  
  outBuffer.applyGain(1.0f/numActive);
  
  
}
void DaalDelAudioProcessor::applyDryWetToBuffer(AudioBuffer<float>& buffer, const int channel, const int bufferLength, float* dryBuffer) {
    // buffer.addFromWithRamp(channel, 0, dryBuffer, bufferLength, _delayDryWetGain, _delayDryWetGain); // If we're adding after delay
    buffer.applyGain(channel, 0, bufferLength, _delayDryWetGain);
}