Skip to content

Commit

Permalink
Move audio thread bounce state logic from vmpc-juce into mpc
Browse files Browse the repository at this point in the history
  • Loading branch information
izzyreal committed Oct 15, 2022
1 parent 6fc0039 commit 2ca18ac
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 82 deletions.
89 changes: 9 additions & 80 deletions src/main/PluginProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <sequencer/Sequencer.hpp>

#include <lcdgui/screens/VmpcAutoSaveScreen.hpp>
#include <lcdgui/screens/window/VmpcDirectToDiskRecorderScreen.hpp>
#include <lcdgui/screens/SyncScreen.hpp>

// ctoot
Expand Down Expand Up @@ -123,16 +122,16 @@ int VmpcAudioProcessor::getCurrentProgram()
return 0;
}

void VmpcAudioProcessor::setCurrentProgram (int index)
void VmpcAudioProcessor::setCurrentProgram (int /* index */)
{
}

const juce::String VmpcAudioProcessor::getProgramName (int index)
const juce::String VmpcAudioProcessor::getProgramName (int /* index */)
{
return {};
}

void VmpcAudioProcessor::changeProgramName (int index, const juce::String& newName)
void VmpcAudioProcessor::changeProgramName (int /* index */, const juce::String& /* newName */)
{
}

Expand Down Expand Up @@ -165,31 +164,9 @@ void VmpcAudioProcessor::releaseResources()
// spare memory, etc.
}

bool VmpcAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
bool VmpcAudioProcessor::isBusesLayoutSupported (const BusesLayout&) const
{
return true;

// if (layouts.inputBuses.size() > 1)
// return false;

// if (layouts.outputBuses.size() > 5)
// return false;

// Mono input is anticipated, but outputs need to come in stereo pairs

for (auto& bus : layouts.inputBuses)
{
if (bus != juce::AudioChannelSet::mono() && bus != juce::AudioChannelSet::stereo())
return false;
}

for (auto& bus : layouts.outputBuses)
{
if (bus != juce::AudioChannelSet::stereo())
return false;
}

return true;
}

void VmpcAudioProcessor::processMidiIn(juce::MidiBuffer& midiMessages) {
Expand Down Expand Up @@ -273,17 +250,16 @@ void VmpcAudioProcessor::processTransport()

if (syncEnabled)
{
juce::AudioPlayHead::CurrentPositionInfo info;
getPlayHead()->getCurrentPosition(info);
double tempo = info.bpm;
auto info = getPlayHead()->getPosition();
double tempo = info->getBpm().orFallback(120);

if (tempo != m_Tempo || mpc.getSequencer().lock()->getTempo() != tempo)
{
mpc.getSequencer().lock()->setTempo(tempo);
m_Tempo = tempo;
}

bool isPlaying = info.isPlaying;
bool isPlaying = info->getIsPlaying();

if (!wasPlaying && isPlaying)
{
Expand All @@ -297,53 +273,6 @@ void VmpcAudioProcessor::processTransport()
}
}

void VmpcAudioProcessor::checkBouncing()
{
auto ams = mpc.getAudioMidiServices().lock();
auto server = ams->getAudioServer();
bool amsIsBouncing = ams->isBouncing();

auto directToDiskRecorderScreen = mpc.screens->get<VmpcDirectToDiskRecorderScreen>("vmpc-direct-to-disk-recorder");

if (amsIsBouncing && !wasBouncing) {

wasBouncing = true;

if (directToDiskRecorderScreen->isOffline())
{
std::vector<int> rates{ 44100, 48000, 88200 };
auto rate = rates[static_cast<size_t>(directToDiskRecorderScreen->getSampleRate())];
ams->getFrameSequencer().lock()->start(rate);

if (server->isRealTime())
{
server->setSampleRate(rate);
server->setRealTime(false);
}
}
else if (directToDiskRecorderScreen->getRecord() != 4)
{
ams->getFrameSequencer().lock()->start(static_cast<int>(getSampleRate()));
}

for (auto& diskRecorder : ams->getDiskRecorders())
diskRecorder.lock()->start();
}
else if (!amsIsBouncing && wasBouncing)
{
wasBouncing = false;

if (directToDiskRecorderScreen->isOffline())
{
if (!server->isRealTime())
{
server->setSampleRate(static_cast<int>(getSampleRate()));
server->setRealTime(true);
}
}
}
}

void VmpcAudioProcessor::processBlock(juce::AudioSampleBuffer& buffer, juce::MidiBuffer& midiMessages)
{
juce::ScopedNoDenormals noDenormals;
Expand All @@ -362,7 +291,7 @@ void VmpcAudioProcessor::processBlock(juce::AudioSampleBuffer& buffer, juce::Mid
return;
}

checkBouncing();
audioMidiServices->changeBounceStateIfRequired();
audioMidiServices->changeSoundRecorderStateIfRequired();

if (!server->isRealTime())
Expand Down Expand Up @@ -689,7 +618,7 @@ void VmpcAudioProcessor::setStateInformation (const void* data, int sizeInBytes)

mpc.getSampler().lock()->setSoundIndex(mpc_ui->getIntAttribute("soundIndex"));
mpc.setNote(mpc_ui->getIntAttribute("lastPressedNote"));
mpc.setPad(mpc_ui->getIntAttribute("lastPressedPad"));
mpc.setPad(static_cast<unsigned char>(mpc_ui->getIntAttribute("lastPressedPad")));

auto screen = mpc_ui->getStringAttribute("screen").toStdString();
mpc.getLayeredScreen().lock()->openScreen(screen);
Expand Down
2 changes: 0 additions & 2 deletions src/main/PluginProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,11 @@ class VmpcAudioProcessor : public juce::AudioProcessor
void processMidiIn(juce::MidiBuffer& midiMessages);
void processMidiOut(juce::MidiBuffer& midiMessages);
void processTransport();
void checkBouncing();

juce::AudioSampleBuffer monoToStereoBufferIn;
juce::AudioSampleBuffer monoToStereoBufferOut;
double m_Tempo = 0;
bool wasPlaying = false;
bool wasBouncing = false;

public:
bool shouldShowDisclaimer = true;
Expand Down

0 comments on commit 2ca18ac

Please sign in to comment.