Skip to content

Commit 2998935

Browse files
committed
- Make sure Audio Insert pseudo-plugins latency is only applicable
to tracks, not buses. (EXPERIMENTAL)
1 parent 56979b1 commit 2998935

14 files changed

+288
-256
lines changed

src/qtractorInsertPlugin.cpp

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -502,13 +502,9 @@ qtractorAudioInsertPlugin::qtractorAudioInsertPlugin (
502502
m_pWetGainParam->setValue(1.0f, false);
503503
addParam(m_pWetGainParam);
504504

505-
m_pLatencyParam = new LatencyParam(this, 3);
506-
m_pLatencyParam->setName(QObject::tr("Latency (frames)"));
507-
m_pLatencyParam->setMinValue(0.0f);
508-
m_pLatencyParam->setMaxValue(192000.0f);
509-
m_pLatencyParam->setDefaultValue(0.0f);
510-
m_pLatencyParam->setValue(0.0f, false);
511-
addParam(m_pLatencyParam);
505+
// Latency param applies to tracks only...
506+
m_pLatencyParam = nullptr;
507+
m_fLatencyValue = 0.0f;
512508

513509
// Setup plugin instance...
514510
//setChannels(channels());
@@ -559,6 +555,14 @@ void qtractorAudioInsertPlugin::setChannels ( unsigned short iChannels )
559555
m_pAudioBus = nullptr;
560556
}
561557

558+
// Latency param is recreated here, on tracks only...
559+
if (m_pLatencyParam) {
560+
m_fLatencyValue = m_pLatencyParam->value(); // Save!
561+
removeParam(m_pLatencyParam);
562+
delete m_pLatencyParam;
563+
m_pLatencyParam = nullptr;
564+
}
565+
562566
// Set new instance number...
563567
setInstances(iInstances);
564568
if (iInstances < 1) {
@@ -571,6 +575,18 @@ void qtractorAudioInsertPlugin::setChannels ( unsigned short iChannels )
571575
this, iChannels, iInstances);
572576
#endif
573577

578+
// Latency param is also recreated here, but only for tracks...
579+
const unsigned int iFlags = list()->flags();
580+
if ((iFlags & qtractorPluginList::Bus) == 0) {
581+
m_pLatencyParam = new LatencyParam(this, 3);
582+
m_pLatencyParam->setName(QObject::tr("Latency (frames)"));
583+
m_pLatencyParam->setMinValue(0.0f);
584+
m_pLatencyParam->setMaxValue(float(pAudioEngine->sampleRate() << 1));
585+
m_pLatencyParam->setDefaultValue(m_fLatencyValue); // Restore!
586+
m_pLatencyParam->setValue(m_fLatencyValue, false); //
587+
addParam(m_pLatencyParam);
588+
}
589+
574590
// Audio bus name -- it must be unique...
575591
int iBusName = 1;
576592
const QString sBusNamePrefix("Insert_%1");
@@ -592,9 +608,6 @@ void qtractorAudioInsertPlugin::setChannels ( unsigned short iChannels )
592608
// for conection persistence purposes...
593609
pAudioEngine->addBusEx(m_pAudioBus);
594610

595-
// Settle max value for the latency param (2secs)...
596-
m_pLatencyParam->setMaxValue(float(pAudioEngine->sampleRate() << 1));
597-
598611
// (Re)issue all configuration as needed...
599612
realizeConfigs();
600613
realizeValues();
@@ -786,7 +799,10 @@ QString qtractorAudioInsertPlugin::title (void) const
786799
// Report latency.
787800
unsigned long qtractorAudioInsertPlugin::latency (void) const
788801
{
789-
return (unsigned long) m_pLatencyParam->value();
802+
if (m_pLatencyParam)
803+
return (unsigned long) m_pLatencyParam->value();
804+
else
805+
return 0;
790806
}
791807

792808

src/qtractorInsertPlugin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ class qtractorAudioInsertPlugin : public qtractorInsertPlugin
183183
Param *m_pWetGainParam;
184184

185185
LatencyParam *m_pLatencyParam;
186+
float m_fLatencyValue;
186187

187188
// Custom optimized processors.
188189
void (*m_pfnProcessGain)(float **, unsigned int,

src/qtractorPlugin.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,8 @@ void qtractorPlugin::closeForm ( bool bForce )
700700
if (m_pForm == nullptr)
701701
return;
702702

703+
freezeFormPos();
704+
703705
if (bForce) {
704706
m_pForm->close();
705707
delete m_pForm;
@@ -2126,6 +2128,7 @@ void qtractorPluginList::movePlugin (
21262128
pParam->observer()->setCurveList(m_pCurveList);
21272129
}
21282130
// Now for the real thing...
2131+
pPlugin->setChannels(0);
21292132
pPlugin->setPluginList(this);
21302133
pPlugin->setChannels(channels());
21312134
if (pPlugin->isActivated()) {

src/qtractorPluginCommand.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,14 @@ bool qtractorMovePluginCommand::redo (void)
465465

466466
// pSession->lock();
467467

468+
// If we're changing plugin-lists, close the generic editor,
469+
// but reopen it here later, if it's currently visible...
470+
bool bReopenForm = false;
471+
if (m_pPluginList != pPlugin->list()) {
472+
bReopenForm = pPlugin->isFormVisible();
473+
pPlugin->closeForm(true);
474+
}
475+
468476
// Save the previous track alright...
469477
qtractorPlugin *pNextPlugin = pPlugin->next();
470478
qtractorPluginList *pPluginList = pPlugin->list();
@@ -501,6 +509,9 @@ bool qtractorMovePluginCommand::redo (void)
501509
m_pPluginList = pPluginList;
502510
setNextPlugin(pNextPlugin);
503511

512+
if (bReopenForm)
513+
pPlugin->openForm();
514+
504515
// pSession->unlock();
505516

506517
qtractorMainForm *pMainForm = qtractorMainForm::getInstance();

src/qtractorTrackForm.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,10 +1693,11 @@ void qtractorTrackForm::updatePluginListLatency (void)
16931693

16941694
qtractorSubject::flushQueue(true);
16951695

1696+
const unsigned int iSampleRate = pSession->sampleRate();
16961697
const unsigned long iLatency = pPluginList->currentLatency();
1697-
if (iLatency > 0) {
1698+
if (iSampleRate > 0 && iLatency > 0) {
16981699
const float fLatencyMs
1699-
= 1000.0f * float(iLatency) / float(pSession->sampleRate());
1700+
= 1000.0f * float(iLatency) / float(iSampleRate);
17001701
m_ui.PluginListLatencyPushButton->setText(
17011702
tr("%1 ms (%2 frames)")
17021703
.arg(QString::number(fLatencyMs, 'f', 1))

src/translations/qtractor_cs.ts

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ MIDI: </translation>
300300
<translation>Aux Send: %1</translation>
301301
</message>
302302
<message>
303-
<location filename="../qtractorPlugin.cpp" line="2440"/>
303+
<location filename="../qtractorPlugin.cpp" line="2443"/>
304304
<source>%1(%2): %3 plugin not found.</source>
305305
<translation>%1(%2): %3 přídavný modul nenalezen.</translation>
306306
</message>
@@ -345,42 +345,42 @@ MIDI: </translation>
345345
<translation>Přesunout přídavný modul</translation>
346346
</message>
347347
<message>
348-
<location filename="../qtractorPluginCommand.cpp" line="533"/>
348+
<location filename="../qtractorPluginCommand.cpp" line="544"/>
349349
<source>activate plugin</source>
350350
<translation>Zapnout přídavný modul</translation>
351351
</message>
352352
<message>
353-
<location filename="../qtractorPluginCommand.cpp" line="569"/>
353+
<location filename="../qtractorPluginCommand.cpp" line="580"/>
354354
<source>preset plugin</source>
355355
<translation>Přednastavit přídavný modul</translation>
356356
</message>
357357
<message>
358-
<location filename="../qtractorPluginCommand.cpp" line="616"/>
358+
<location filename="../qtractorPluginCommand.cpp" line="627"/>
359359
<source>reset plugin</source>
360360
<translation>Znovu spustit přídavný modul</translation>
361361
</message>
362362
<message>
363-
<location filename="../qtractorPluginCommand.cpp" line="666"/>
363+
<location filename="../qtractorPluginCommand.cpp" line="677"/>
364364
<source>plugin program</source>
365365
<translation>Program přídavného modulu</translation>
366366
</message>
367367
<message>
368-
<location filename="../qtractorPluginCommand.cpp" line="712"/>
368+
<location filename="../qtractorPluginCommand.cpp" line="723"/>
369369
<source>plugin alias</source>
370370
<translation>Přezdívka přídavného modulu</translation>
371371
</message>
372372
<message>
373-
<location filename="../qtractorPluginCommand.cpp" line="945"/>
373+
<location filename="../qtractorPluginCommand.cpp" line="956"/>
374374
<source>dedicated audio outputs</source>
375375
<translation>Jednoúčelové zvukové výstupy</translation>
376376
</message>
377377
<message>
378-
<location filename="../qtractorPluginCommand.cpp" line="990"/>
378+
<location filename="../qtractorPluginCommand.cpp" line="1001"/>
379379
<source>direct access param</source>
380380
<translation>Parametr pro přímý přístup</translation>
381381
</message>
382382
<message>
383-
<location filename="../qtractorPluginCommand.cpp" line="1022"/>
383+
<location filename="../qtractorPluginCommand.cpp" line="1033"/>
384384
<source>import plugins</source>
385385
<translation>Přídavné moduly k zavedení</translation>
386386
</message>
@@ -657,64 +657,64 @@ Stopa: &quot;%1&quot; Vstup: &quot;%2&quot; Výstup: &quot;%3&quot;</translation
657657
</message>
658658
<message>
659659
<location filename="../qtractorInsertPlugin.cpp" line="482"/>
660-
<location filename="../qtractorInsertPlugin.cpp" line="834"/>
661-
<location filename="../qtractorInsertPlugin.cpp" line="1325"/>
662-
<location filename="../qtractorInsertPlugin.cpp" line="1663"/>
660+
<location filename="../qtractorInsertPlugin.cpp" line="850"/>
661+
<location filename="../qtractorInsertPlugin.cpp" line="1341"/>
662+
<location filename="../qtractorInsertPlugin.cpp" line="1679"/>
663663
<source>Send Gain</source>
664664
<translation>Poslat zesílení</translation>
665665
</message>
666666
<message>
667667
<location filename="../qtractorInsertPlugin.cpp" line="490"/>
668-
<location filename="../qtractorInsertPlugin.cpp" line="842"/>
668+
<location filename="../qtractorInsertPlugin.cpp" line="858"/>
669669
<source>Dry Gain</source>
670670
<translation>Zkušební zesílení</translation>
671671
</message>
672672
<message>
673673
<location filename="../qtractorInsertPlugin.cpp" line="498"/>
674-
<location filename="../qtractorInsertPlugin.cpp" line="850"/>
674+
<location filename="../qtractorInsertPlugin.cpp" line="866"/>
675675
<source>Wet Gain</source>
676676
<translation>Ostré zesílení</translation>
677677
</message>
678678
<message>
679-
<location filename="../qtractorInsertPlugin.cpp" line="506"/>
679+
<location filename="../qtractorInsertPlugin.cpp" line="582"/>
680680
<source>Latency (frames)</source>
681681
<translation type="unfinished"></translation>
682682
</message>
683683
<message>
684-
<location filename="../qtractorInsertPlugin.cpp" line="808"/>
684+
<location filename="../qtractorInsertPlugin.cpp" line="824"/>
685685
<source>%1 ms</source>
686686
<translation type="unfinished"></translation>
687687
</message>
688688
<message>
689-
<location filename="../qtractorInsertPlugin.cpp" line="1189"/>
689+
<location filename="../qtractorInsertPlugin.cpp" line="1205"/>
690690
<source>Aux Send (Audio)</source>
691691
<translation>Pomocné odeslání (Audio)</translation>
692692
</message>
693693
<message>
694-
<location filename="../qtractorInsertPlugin.cpp" line="1222"/>
694+
<location filename="../qtractorInsertPlugin.cpp" line="1238"/>
695695
<source>Aux Send pseudo-plugin (Audio)</source>
696696
<translation>Pomocný nepravý přídavný modul pro odeslání (Audio)</translation>
697697
</message>
698698
<message>
699-
<location filename="../qtractorInsertPlugin.cpp" line="1284"/>
699+
<location filename="../qtractorInsertPlugin.cpp" line="1300"/>
700700
<source>Aux Send pseudo-plugin (MIDI)</source>
701701
<translation>Pomocný nepravý přídavný modul pro odeslání (MIDI)</translation>
702702
</message>
703703
<message>
704-
<location filename="../qtractorInsertPlugin.cpp" line="1533"/>
705-
<location filename="../qtractorInsertPlugin.cpp" line="1831"/>
704+
<location filename="../qtractorInsertPlugin.cpp" line="1549"/>
705+
<location filename="../qtractorInsertPlugin.cpp" line="1847"/>
706706
<source>(none)</source>
707707
<translation>(žádný)</translation>
708708
</message>
709709
<message>
710-
<location filename="../qtractorInsertPlugin.cpp" line="776"/>
711-
<location filename="../qtractorInsertPlugin.cpp" line="1534"/>
710+
<location filename="../qtractorInsertPlugin.cpp" line="789"/>
711+
<location filename="../qtractorInsertPlugin.cpp" line="1550"/>
712712
<source>%1 (Audio)</source>
713713
<translation>%1 (Audio)</translation>
714714
</message>
715715
<message>
716-
<location filename="../qtractorInsertPlugin.cpp" line="1132"/>
717-
<location filename="../qtractorInsertPlugin.cpp" line="1832"/>
716+
<location filename="../qtractorInsertPlugin.cpp" line="1148"/>
717+
<location filename="../qtractorInsertPlugin.cpp" line="1848"/>
718718
<location filename="../qtractorMidiControlPlugin.cpp" line="569"/>
719719
<source>%1 (MIDI)</source>
720720
<translation>%1 (MIDI)</translation>
@@ -15415,12 +15415,12 @@ Chcete použít tyto změny?</translation>
1541515415
<translation>Všechny soubory (*.*)</translation>
1541615416
</message>
1541715417
<message>
15418-
<location filename="../qtractorTrackForm.cpp" line="1701"/>
15418+
<location filename="../qtractorTrackForm.cpp" line="1702"/>
1541915419
<source>%1 ms (%2 frames)</source>
1542015420
<translation>%1 ms (%2 snímků)</translation>
1542115421
</message>
1542215422
<message>
15423-
<location filename="../qtractorTrackForm.cpp" line="1705"/>
15423+
<location filename="../qtractorTrackForm.cpp" line="1706"/>
1542415424
<source>(no latency)</source>
1542515425
<translation>(bez prodlevy)</translation>
1542615426
</message>

0 commit comments

Comments
 (0)