//============================================================================== void dRowTremoloEditorComponent::updateParametersFromFilter() { dRowTremoloFilter* const filter = getFilter(); // we use this lock to make sure the processBlock() method isn't writing to the // lastMidiMessage variable while we're trying to read it, but be extra-careful to // only hold the lock for a minimum amount of time.. filter->getCallbackLock().enter(); // take a local copy of the info we need while we've got the lock.. const AudioPlayHead::CurrentPositionInfo positionInfo (filter->lastPosInfo); const float newGain = filter->getParameter (TremoloInterface::Parameters::Gain); const float newRate = filter->getParameter (TremoloInterface::Parameters::Rate); const float newTremDepth = filter->getParameter (TremoloInterface::Parameters::Depth); // ..release the lock ASAP filter->getCallbackLock().exit(); // ..and after releasing the lock, we're free to do the time-consuming UI stuff.. String infoText; infoText << String (positionInfo.bpm, 2) << T(" bpm, ") << positionInfo.timeSigNumerator << T("/") << positionInfo.timeSigDenominator << T(" - ") << timeToTimecodeString (positionInfo.timeInSeconds) << T(" - ") << ppqToBarsBeatsString (positionInfo.ppqPosition, positionInfo.ppqPositionOfLastBarStart, positionInfo.timeSigNumerator, positionInfo.timeSigDenominator); if (positionInfo.isPlaying) infoText << T(" (playing)"); infoLabel->setText (infoText, false); /* Update our slider. (note that it's important here to tell the slider not to send a change message, because that would cause it to call the filter with a parameter change message again, and the values would drift out. */ gainSlider->setValue (newGain, false); rateSlider->setValue (newRate, false); depthSlider->setValue (newTremDepth, false); setSize (filter->lastUIWidth, filter->lastUIHeight); }
// Updates the text in our position label. void JuceDemoPluginAudioProcessorEditor::displayPositionInfo (const AudioPlayHead::CurrentPositionInfo& pos) { lastDisplayedPosition = pos; String displayText; displayText.preallocateBytes (128); displayText << String (pos.bpm, 2) << " bpm, " << pos.timeSigNumerator << '/' << pos.timeSigDenominator << " - " << timeToTimecodeString (pos.timeInSeconds) << " - " << ppqToBarsBeatsString (pos.ppqPosition, pos.ppqPositionOfLastBarStart, pos.timeSigNumerator, pos.timeSigDenominator); if (pos.isRecording) displayText << " (recording)"; else if (pos.isPlaying) displayText << " (playing)"; infoLabel.setText (displayText, false); }
// Updates the text in our position label. void SignalProcessorAudioProcessorEditor::displayPositionInfo (const AudioPlayHead::CurrentPositionInfo& pos) { lastDisplayedPosition = pos; String displayText; displayText.preallocateBytes (128); displayText << String (pos.bpm, 2) << " bpm, " << pos.timeSigNumerator << '/' << pos.timeSigDenominator << " - " << timeToTimecodeString (pos.timeInSeconds) << " - " << ppqToBarsBeatsString (pos.ppqPosition, pos.ppqPositionOfLastBarStart, pos.timeSigNumerator, pos.timeSigDenominator); if (pos.isRecording) displayText << " (recording)"; else if (pos.isPlaying) displayText << " (playing)"; infoLabel.setText ("[" + SystemStats::getJUCEVersion() + "] " + displayText, dontSendNotification); }
// Updates the text in our position label. void JuceDemoPluginAudioProcessorEditor::updateTimecodeDisplay (AudioPlayHead::CurrentPositionInfo pos) { MemoryOutputStream displayText; displayText << "[" << SystemStats::getJUCEVersion() << "] " << String (pos.bpm, 2) << " bpm, " << pos.timeSigNumerator << '/' << pos.timeSigDenominator << " - " << timeToTimecodeString (pos.timeInSeconds) << " - " << quarterNotePositionToBarsBeatsString (pos.ppqPosition, pos.timeSigNumerator, pos.timeSigDenominator); if (pos.isRecording) displayText << " (recording)"; else if (pos.isPlaying) displayText << " (playing)"; timecodeDisplayLabel.setText (displayText.toString(), dontSendNotification); }