Make VST sync always-on and non-global (#6418)
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#include "BufferManager.h"
|
||||
#include "AudioEngine.h"
|
||||
#include "Engine.h"
|
||||
#include "Song.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
@@ -309,6 +310,7 @@ bool RemotePlugin::init(const QString &pluginExecutable,
|
||||
}
|
||||
#endif
|
||||
|
||||
sendMessage(message(IdSyncKey).addString(Engine::getSong()->syncKey()));
|
||||
resizeSharedProcessingMemory();
|
||||
|
||||
if( waitForInitDoneMsg )
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <stdexcept>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QUuid>
|
||||
|
||||
#include "AudioEngine.h"
|
||||
#include "ConfigManager.h"
|
||||
@@ -39,36 +40,16 @@ namespace lmms
|
||||
{
|
||||
|
||||
|
||||
VstSyncController::VstSyncController() :
|
||||
m_syncData( nullptr )
|
||||
VstSyncController::VstSyncController()
|
||||
{
|
||||
if( ConfigManager::inst()->value( "ui", "syncvstplugins" ).toInt() )
|
||||
try
|
||||
{
|
||||
connect( Engine::audioEngine(), SIGNAL(sampleRateChanged()), this, SLOT(updateSampleRate()));
|
||||
|
||||
try
|
||||
{
|
||||
m_shm.create("usr_bin_lmms");
|
||||
m_syncData = m_shm.get();
|
||||
}
|
||||
catch (const std::runtime_error& error)
|
||||
{
|
||||
qWarning() << "Failed to allocate shared memory for VST sync:" << error.what();
|
||||
}
|
||||
m_syncData.create(QUuid::createUuid().toString().toStdString());
|
||||
}
|
||||
else
|
||||
catch (const std::runtime_error& error)
|
||||
{
|
||||
qWarning( "VST sync support disabled in your configuration" );
|
||||
}
|
||||
|
||||
if( m_syncData == nullptr )
|
||||
{
|
||||
m_syncData = new VstSyncData;
|
||||
m_syncData->hasSHM = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_syncData->hasSHM = true;
|
||||
qCritical() << "Failed to allocate shared memory for VST sync:" << error.what();
|
||||
return;
|
||||
}
|
||||
|
||||
m_syncData->isPlaying = false;
|
||||
@@ -76,23 +57,16 @@ VstSyncController::VstSyncController() :
|
||||
m_syncData->timeSigNumer = 4;
|
||||
m_syncData->timeSigDenom = 4;
|
||||
|
||||
connect(Engine::audioEngine(), &AudioEngine::sampleRateChanged, this, &VstSyncController::updateSampleRate);
|
||||
updateSampleRate();
|
||||
}
|
||||
|
||||
|
||||
|
||||
VstSyncController::~VstSyncController()
|
||||
void VstSyncController::setAbsolutePosition(double ticks)
|
||||
{
|
||||
if( m_syncData->hasSHM == false )
|
||||
{
|
||||
delete m_syncData;
|
||||
}
|
||||
}
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
|
||||
|
||||
void VstSyncController::setAbsolutePosition( double ticks )
|
||||
{
|
||||
#ifdef VST_SNC_LATENCY
|
||||
m_syncData->ppqPos = ( ( ticks + 0 ) / 48.0 ) - m_syncData->m_latency;
|
||||
#else
|
||||
@@ -102,8 +76,19 @@ void VstSyncController::setAbsolutePosition( double ticks )
|
||||
|
||||
|
||||
|
||||
void VstSyncController::setTempo( int newTempo )
|
||||
void VstSyncController::setPlaybackState(bool enabled)
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->isPlaying = enabled;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void VstSyncController::setTempo(int newTempo)
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->m_bpm = newTempo;
|
||||
|
||||
#ifdef VST_SNC_LATENCY
|
||||
@@ -114,8 +99,20 @@ void VstSyncController::setTempo( int newTempo )
|
||||
|
||||
|
||||
|
||||
void VstSyncController::startCycle( int startTick, int endTick )
|
||||
void VstSyncController::setTimeSignature(int num, int denom)
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->timeSigNumer = num;
|
||||
m_syncData->timeSigDenom = denom;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void VstSyncController::startCycle(int startTick, int endTick)
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->isCycle = true;
|
||||
m_syncData->cycleStart = startTick / (float)48;
|
||||
m_syncData->cycleEnd = endTick / (float)48;
|
||||
@@ -123,8 +120,28 @@ void VstSyncController::startCycle( int startTick, int endTick )
|
||||
|
||||
|
||||
|
||||
void VstSyncController::stopCycle()
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->isCycle = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void VstSyncController::setPlaybackJumped(bool jumped)
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->m_playbackJumped = jumped;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void VstSyncController::update()
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->m_bufferSize = Engine::audioEngine()->framesPerPeriod();
|
||||
|
||||
#ifdef VST_SNC_LATENCY
|
||||
@@ -136,6 +153,8 @@ void VstSyncController::update()
|
||||
|
||||
void VstSyncController::updateSampleRate()
|
||||
{
|
||||
if (!m_syncData) { return; }
|
||||
|
||||
m_syncData->m_sampleRate = Engine::audioEngine()->processingSampleRate();
|
||||
|
||||
#ifdef VST_SNC_LATENCY
|
||||
|
||||
@@ -136,8 +136,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
|
||||
m_vstEmbedMethod(ConfigManager::inst()->vstEmbedMethod()),
|
||||
m_vstAlwaysOnTop(ConfigManager::inst()->value(
|
||||
"ui", "vstalwaysontop").toInt()),
|
||||
m_syncVSTPlugins(ConfigManager::inst()->value(
|
||||
"ui", "syncvstplugins", "1").toInt()),
|
||||
m_disableAutoQuit(ConfigManager::inst()->value(
|
||||
"ui", "disableautoquit", "1").toInt()),
|
||||
m_NaNHandler(ConfigManager::inst()->value(
|
||||
@@ -433,9 +431,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
|
||||
connect(m_vstAlwaysOnTopCheckBox, SIGNAL(toggled(bool)),
|
||||
this, SLOT(toggleVSTAlwaysOnTop(bool)));
|
||||
|
||||
addLedCheckBox(tr("Sync VST plugins to host playback"), plugins_tw, counter,
|
||||
m_syncVSTPlugins, SLOT(toggleSyncVSTPlugins(bool)), false);
|
||||
|
||||
addLedCheckBox(tr("Keep effects running even without input"), plugins_tw, counter,
|
||||
m_disableAutoQuit, SLOT(toggleDisableAutoQuit(bool)), false);
|
||||
|
||||
@@ -948,8 +943,6 @@ void SetupDialog::accept()
|
||||
m_vstEmbedComboBox->currentData().toString());
|
||||
ConfigManager::inst()->setValue("ui", "vstalwaysontop",
|
||||
QString::number(m_vstAlwaysOnTop));
|
||||
ConfigManager::inst()->setValue("ui", "syncvstplugins",
|
||||
QString::number(m_syncVSTPlugins));
|
||||
ConfigManager::inst()->setValue("ui", "disableautoquit",
|
||||
QString::number(m_disableAutoQuit));
|
||||
ConfigManager::inst()->setValue("audioengine", "audiodev",
|
||||
@@ -1130,12 +1123,6 @@ void SetupDialog::toggleAnimateAFP(bool enabled)
|
||||
}
|
||||
|
||||
|
||||
void SetupDialog::toggleSyncVSTPlugins(bool enabled)
|
||||
{
|
||||
m_syncVSTPlugins = enabled;
|
||||
}
|
||||
|
||||
|
||||
void SetupDialog::vstEmbedMethodChanged()
|
||||
{
|
||||
m_vstEmbedMethod = m_vstEmbedComboBox->currentData().toString();
|
||||
|
||||
Reference in New Issue
Block a user