Skip to content

Commit

Permalink
Pass host sample rate into jack
Browse files Browse the repository at this point in the history
Signed-off-by: falkTX <falktx@falktx.com>
  • Loading branch information
falkTX committed Mar 11, 2024
1 parent 819c537 commit 3952104
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 10 deletions.
27 changes: 23 additions & 4 deletions src/plugin/DesktopAudioDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,16 +246,35 @@ SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor()
{
printf("%03d:%s\n", __LINE__, __FUNCTION__);
jack_driver_desc_filler_t filler;
return jack_driver_descriptor_construct("desktop", JackDriverMaster, "MOD Desktop plugin audio backend", &filler);
jack_driver_param_value_t value;

jack_driver_desc_t* const desc = jack_driver_descriptor_construct("desktop", JackDriverMaster, "MOD Desktop plugin audio backend", &filler);

value.ui = 48000U;
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL);

return desc;
}

SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params)
{
printf("zzz %03d:%s\n", __LINE__, __FUNCTION__);
jack_nframes_t srate = 48000;

for (const JSList* node = params; node; node = jack_slist_next(node))
{
const jack_driver_param_t* const param = (const jack_driver_param_t *) node->data;

switch (param->character)
{
case 'r':
srate = param->value.ui;
break;
}
}

Jack::JackDriverClientInterface* driver = new Jack::DesktopAudioDriver("system", "mod-desktop", engine, table);
printf("zzz %03d:%s\n", __LINE__, __FUNCTION__);

if (driver->Open(128, 48000, true, true, 2, 2, false, "", "", 0, 0) == 0)
if (driver->Open(128, srate, true, true, 2, 2, false, "", "", 0, 0) == 0)
{
printf("%03d:%s OK\n", __LINE__, __FUNCTION__);
return driver;
Expand Down
22 changes: 16 additions & 6 deletions src/plugin/DesktopPlugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,12 +190,14 @@ class ChildProcess
stop();
}

bool start()
bool start(const uint32_t sampleRate)
{
const String sampleRateStr(sampleRate);

#define P "/home/falktx/Source/MOD/mod-app/build"

static constexpr const char* const args[] = {
"jackd", "-R", "-S", "-n", "mod-desktop", "-C", P "/jack/jack-session.conf", "-d", "desktop", nullptr
const char* const args[] = {
"jackd", "-R", "-S", "-n", "mod-desktop", "-C", P "/jack/jack-session.conf", "-d", "desktop", "-r", sampleRateStr.buffer(), nullptr
};

// FIXME
Expand Down Expand Up @@ -314,11 +316,10 @@ class DesktopPlugin : public Plugin
if (isDummyInstance())
return;

if (shm.init() && jackd.start())
if (shm.init() && jackd.start(getSampleRate()))
{
shm.getAudioData(fInBuffers);
processing = true;

shm.getAudioData(fInBuffers);
bufferSizeChanged(getBufferSize());
}
}
Expand Down Expand Up @@ -551,6 +552,15 @@ class DesktopPlugin : public Plugin
std::memset(fOutBuffers[1], 0, sizeof(float) * (bufferSize + 256));
}

void sampleRateChanged(const double sampleRate) override
{
if (processing)
{
jackd.stop();
jackd.start(sampleRate);
}
}

// -------------------------------------------------------------------------------------------------------

/**
Expand Down

0 comments on commit 3952104

Please sign in to comment.