void Arponaut::ProcessDoubleReplacing(double** inputs, double** outputs, int nFrames) { // Mutex is already locked for us. ENoteLength noteLength = (ENoteLength) ((int(GetParam(kNoteLength)->Value())) + 1); EOctaves octaves = (EOctaves) ((int(GetParam(kOctaves)->Value())) + 1); EArpMode arpMode = (EArpMode) (int(GetParam(kArpMode)->Value())); EInsertMode insertMode = (EInsertMode) (int(GetParam(kInsertMode)->Value())); if (GetGUI()) { //GetGUI()->SetControlFromPlug(mMeterIdx_L, peakL); //GetGUI()->SetControlFromPlug(mMeterIdx_R, peakR); } int pos = GetSamplePos(); running_ = (pos != lastPos_); int tnum, tden; GetTimeSig(&tnum, &tden); if (keymap_.held() == 0) { NoteOff(); // only sent if a note is already playing } if (running_ && keymap_.held()) { sequence_->setOctaves(octaves); sequence_->setArpMode(arpMode); sequence_->setInsertMode(insertMode); double perBeat = GetSamplesPerBeat() / noteLength; // trigger? int ibar = static_cast<int>(double(pos) / perBeat); int ilastBar = static_cast<int>(double(lastPos_) / perBeat); if ((pos == 0 && ibar == 0) || (ibar != ilastBar)) { // Log("pos %d pb %f Num %d Den %d ibar %d lastbar %d\n", pos, perBeat, tnum, tden, ibar, ilastBar); NoteOff(); IMidiMsg* next = sequence_->next(); if (next && next->StatusMsg() == IMidiMsg::kNoteOn) { SendMidiMsg(next); playing_ = *next; } matrix->SetDirty(false); } } lastPos_ = pos; }
void IPlugChunks::ProcessDoubleReplacing(double** inputs, double** outputs, int nFrames) { // Mutex is already locked for us. double* in1 = inputs[0]; double* in2 = inputs[1]; double* out1 = outputs[0]; double* out2 = outputs[1]; int samplesPerBeat = (int) GetSamplesPerBeat(); int samplePos = (int) GetSamplePos(); int count = mCount; int prevcount = mPrevCount; for (int s = 0; s < nFrames; ++s, ++in1, ++in2, ++out1, ++out2) { int mod = (samplePos + s) % (samplesPerBeat * BEAT_DIV); count = mod / (samplesPerBeat / BEAT_DIV); if (count >= NUM_SLIDERS) { count = 0; } if (count != prevcount) { if (GetGUI()) { mMSlider->SetHighlight(count); } } prevcount = count; *out1 = *in1 * mSteps[count] * mGain; *out2 = *in2 * mSteps[count] * mGain; } mCount = count; mPrevCount = prevcount; }
int64_t AudioQueueStreamOut::GetTime() { return (int64_t) ((double)GetSamplePos() * 1000.0 / (double)mInfo.mDataFormat.mSampleRate ); }