Skip to content

Commit

Permalink
iOS-only: add input gain slider to Input Mixer when audio interface s…
Browse files Browse the repository at this point in the history
…upports it
  • Loading branch information
paulreimer committed Sep 29, 2024
1 parent c8d5a02 commit c35879b
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 6 deletions.
78 changes: 72 additions & 6 deletions Source/SonobusPluginEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#include "LatencyMatchView.h"
#include "SuggestNewGroupView.h"
#include "SonoCallOutBox.h"
#include "CrossPlatformUtils.h"

#include <sstream>

#if JUCE_ANDROID
Expand Down Expand Up @@ -423,12 +425,18 @@ SonobusAudioProcessorEditor::SonobusAudioProcessorEditor (SonobusAudioProcessor&
mPeerLayoutMinimalButton->setRadioGroupId(PeerLayoutRadioGroupId);


#if JUCE_IOS
mInGainSlider = std::make_unique<Slider>(Slider::LinearHorizontal, Slider::TextBoxAbove);
mInGainSlider->setName("ingain");
mInGainSlider->setTitle(TRANS("In Level"));
mInGainSlider->addListener(this);
mInGainSlider->setSliderSnapsToMousePosition(processor.getSlidersSnapToMousePosition());
mInGainSlider->setTextBoxIsEditable(true);
mInGainSlider->setScrollWheelEnabled(false);
mInGainSlider->setRange(0.0, 1.0);
mInGainSlider->setNumDecimalPlacesToDisplay(2);
mInGainSlider->setValue(getInputGain());
#endif


mInMixerButton = std::make_unique<TextButton>("mix");
Expand Down Expand Up @@ -630,25 +638,31 @@ SonobusAudioProcessorEditor::SonobusAudioProcessorEditor (SonobusAudioProcessor&
mOutGainSlider->setSliderSnapsToMousePosition(processor.getSlidersSnapToMousePosition());
mOutGainSlider->setScrollWheelEnabled(false);

#if JUCE_IOS
configLevelSlider(mInGainSlider.get());
#endif
configLevelSlider(mDrySlider.get());
configLevelSlider(mOutGainSlider.get());

mOutGainSlider->setTextBoxIsEditable(true);
mDrySlider->setTextBoxIsEditable(true);
#if JUCE_IOS
//mInGainSlider->setTextBoxIsEditable(true);
#endif

mDrySlider->setWantsKeyboardFocus(true);
mOutGainSlider->setWantsKeyboardFocus(true);



#if JUCE_IOS
mInGainLabel = std::make_unique<Label>(SonobusAudioProcessor::paramDry, TRANS("In Level"));
configLabel(mInGainLabel.get(), false);
mInGainLabel->setJustificationType(Justification::topLeft);
mInGainLabel->setTooltip(TRANS("This reduces or boosts the level of your own audio input, and it will affect the level of your audio being sent to others and your own monitoring"));
mInGainLabel->setInterceptsMouseClicks(true, false);
mInGainLabel->setAccessible(false);
#endif

mDryLabel = std::make_unique<Label>(SonobusAudioProcessor::paramDry, TRANS("Monitor"));
configLabel(mDryLabel.get(), false);
Expand Down Expand Up @@ -805,6 +819,13 @@ SonobusAudioProcessorEditor::SonobusAudioProcessorEditor (SonobusAudioProcessor&

mMainContainer->addAndMakeVisible(mPeerContainer.get());

#if JUCE_IOS
mInGainContainer = std::make_unique<Component>();
mInGainContainer->addAndMakeVisible(mInGainLabel.get());
mInGainContainer->addAndMakeVisible(mInGainSlider.get());
mMainContainer->addChildComponent(mInGainContainer.get());
#endif

mInputChannelsContainer = std::make_unique<ChannelGroupsView>(processor, false);
mMainContainer->addChildComponent(mInputChannelsContainer.get());
mInputChannelsContainer->addListener(this);
Expand Down Expand Up @@ -1169,7 +1190,9 @@ SonobusAudioProcessorEditor::SonobusAudioProcessorEditor (SonobusAudioProcessor&

mTopLevelContainer->addAndMakeVisible(mDrySlider.get());
mTopLevelContainer->addAndMakeVisible(mOutGainSlider.get());
#if JUCE_IOS
//mTopLevelContainer->addAndMakeVisible(mInGainSlider.get());
#endif
mTopLevelContainer->addAndMakeVisible(mMainMuteButton.get());
mTopLevelContainer->addAndMakeVisible(mMainRecvMuteButton.get());
mTopLevelContainer->addAndMakeVisible(mMainPushToTalkButton.get());
Expand Down Expand Up @@ -1245,7 +1268,9 @@ SonobusAudioProcessorEditor::SonobusAudioProcessorEditor (SonobusAudioProcessor&



#if JUCE_IOS
//mTopLevelContainer->addAndMakeVisible(mInGainLabel.get());
#endif
mTopLevelContainer->addAndMakeVisible(mDryLabel.get());
mTopLevelContainer->addAndMakeVisible(mOutGainLabel.get());
mTopLevelContainer->addAndMakeVisible(inputMeter.get());
Expand Down Expand Up @@ -1937,6 +1962,8 @@ void SonobusAudioProcessorEditor::timerCallback(int timerid)

#if JUCE_IOS
if (JUCEApplicationBase::isStandaloneApp()) {
getAudioDeviceManager()->addChangeListener(this);

bool iaaconn = isInterAppAudioConnected();
if (iaaconn != iaaConnected) {
iaaConnected = iaaconn;
Expand Down Expand Up @@ -2040,6 +2067,10 @@ void SonobusAudioProcessorEditor::buttonClicked (Button* buttonThatWasClicked)
}
else if (buttonThatWasClicked == mInMixerButton.get()) {

#if JUCE_IOS
mInGainContainer->setVisible(getIsInputGainSettable() && mInMixerButton->getToggleState());
#endif

mInputChannelsContainer->setVisible(mInMixerButton->getToggleState());
mInputChannelsContainer->rebuildChannelViews();
resized();
Expand Down Expand Up @@ -2805,7 +2836,9 @@ void SonobusAudioProcessorEditor::updateSliderSnap()
slider->setSliderSnapsToMousePosition(slider->getWidth() > minsize && snap);
};

//snapset(mInGainSlider.get());
#if JUCE_IOS
snapset(mInGainSlider.get());
#endif
snapset(mOutGainSlider.get());
snapset(mDrySlider.get());
//snapset(mOptionsDefaultLevelSlider.get());
Expand Down Expand Up @@ -3206,6 +3239,14 @@ void SonobusAudioProcessorEditor::showConnectPopup(bool flag)

void SonobusAudioProcessorEditor::sliderValueChanged (Slider* slider)
{
#if JUCE_IOS
if (slider == mInGainSlider.get()) {
if (getIsInputGainSettable()) {
setInputGain(slider->getValue());
}
return;
}
#endif
}

void SonobusAudioProcessorEditor::mouseDown (const MouseEvent& event)
Expand Down Expand Up @@ -4524,10 +4565,22 @@ void SonobusAudioProcessorEditor::resized()
Rectangle<int> peersminbounds = mPeerContainer->getMinimumContentBounds();
Rectangle<int> inmixminbounds = mInputChannelsContainer->getMinimumContentBounds();

Rectangle<int> ingainactualbounds = Rectangle<int>(0,0,0,0);
Rectangle<int> inmixactualbounds = Rectangle<int>(0,0,0,0);

#if JUCE_IOS
if (mInGainContainer->isVisible()) {
ingainactualbounds = Rectangle<int>(0, 5,
std::max(inmixminbounds.getWidth(), inchantargwidth),
45);

mInGainSlider->setBounds(ingainactualbounds);
mInGainContainer->setBounds(ingainactualbounds);
}
#endif

if (mInputChannelsContainer->isVisible()) {
inmixactualbounds = Rectangle<int>(0, 0,
inmixactualbounds = Rectangle<int>(0, ingainactualbounds.getBottom() + 5,
std::max(inmixminbounds.getWidth(), inchantargwidth),
inmixminbounds.getHeight() + 5);

Expand Down Expand Up @@ -4601,11 +4654,15 @@ void SonobusAudioProcessorEditor::resized()

mDrySlider->setMouseDragSensitivity(jmax(128, mDrySlider->getWidth()));
mOutGainSlider->setMouseDragSensitivity(jmax(128, mOutGainSlider->getWidth()));
//mInGainSlider->setMouseDragSensitivity(jmax(128, mInGainSlider->getWidth()));
#if JUCE_IOS
mInGainSlider->setMouseDragSensitivity(jmax(128, mInGainSlider->getWidth()));
#endif

mDryLabel->setBounds(mDrySlider->getBounds().removeFromTop(17).removeFromLeft(mDrySlider->getWidth() - mDrySlider->getTextBoxWidth() + 3).translated(4, -2));
//mInGainLabel->setBounds(mInGainSlider->getBounds().removeFromTop(14).removeFromLeft(mInGainSlider->getWidth() - mInGainSlider->getTextBoxWidth() + 3).translated(4, 0));
mOutGainLabel->setBounds(mOutGainSlider->getBounds().removeFromTop(17).removeFromLeft(mOutGainSlider->getWidth() - mOutGainSlider->getTextBoxWidth() + 3).translated(4, -2));
mDryLabel->setBounds(mDrySlider->getBounds().removeFromTop(14).removeFromLeft(mDrySlider->getWidth() - mDrySlider->getTextBoxWidth() + 3).translated(4, 0));
#if JUCE_IOS
mInGainLabel->setBounds(mInGainSlider->getBounds().removeFromTop(14).removeFromLeft(mInGainSlider->getWidth() - mInGainSlider->getTextBoxWidth() + 3).translated(4, 0));
#endif
mOutGainLabel->setBounds(mOutGainSlider->getBounds().removeFromTop(14).removeFromLeft(mOutGainSlider->getWidth() - mOutGainSlider->getTextBoxWidth() + 3).translated(4, 0));



Expand Down Expand Up @@ -5172,6 +5229,15 @@ void SonobusAudioProcessorEditor::changeListenerCallback (ChangeBroadcaster* sou
} else if (source == &(processor.getTransportSource())) {
updateTransportState();
}
#if JUCE_IOS
else if (source == getAudioDeviceManager()) {
mInGainSlider->setValue(getInputGain(), sendNotificationSync);
if (mInMixerButton->getToggleState()) {
mInGainContainer->setVisible(getIsInputGainSettable());
resized();
}
}
#endif
}

class SonobusAudioProcessorEditor::TrimFileJob : public ThreadPoolJob
Expand Down
8 changes: 8 additions & 0 deletions Source/SonobusPluginEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,9 @@ public PeersContainerView::Listener
std::unique_ptr<SonoDrawableButton> mMainLinkButton;
std::unique_ptr<Drawable> mMainLinkArrow;

#if JUCE_IOS
std::unique_ptr<Slider> mInGainSlider;
#endif

std::unique_ptr<TextButton> mInMixerButton;

Expand Down Expand Up @@ -332,7 +334,9 @@ public PeersContainerView::Listener
std::unique_ptr<DrawableRectangle> mFileAreaBg;


#if JUCE_IOS
std::unique_ptr<Label> mInGainLabel;
#endif
std::unique_ptr<Label> mDryLabel;
std::unique_ptr<Label> mWetLabel;
std::unique_ptr<Label> mOutGainLabel;
Expand Down Expand Up @@ -531,6 +535,10 @@ public PeersContainerView::Listener
std::unique_ptr<Component> mMainContainer;
std::unique_ptr<PeersContainerView> mPeerContainer;

#if JUCE_IOS
std::unique_ptr<Component> mInGainContainer;
#endif

std::unique_ptr<Viewport> mInputChannelsViewport;
std::unique_ptr<ChannelGroupsView> mInputChannelsContainer;

Expand Down

0 comments on commit c35879b

Please sign in to comment.