Browse Source

Added Streaming code to properly save # of ports, and version for future changes

master
aj_genius 21 years ago
parent
commit
df142f7be0
3 changed files with 97 additions and 17 deletions
  1. +55
    -2
      SpiralSound/Plugins/JackPlugin/JackPlugin.C
  2. +6
    -3
      SpiralSound/Plugins/JackPlugin/JackPlugin.h
  3. +36
    -12
      SpiralSound/Plugins/JackPlugin/JackPluginGUI.C

+ 55
- 2
SpiralSound/Plugins/JackPlugin/JackPlugin.C View File

@@ -18,6 +18,7 @@


#include <stdio.h> #include <stdio.h>
#include <limits.h> #include <limits.h>
#include <math.h>


#include "JackPlugin.h" #include "JackPlugin.h"
#include "JackPluginGUI.h" #include "JackPluginGUI.h"
@@ -99,8 +100,8 @@ JackClient::JackClient()
m_Attached = false; m_Attached = false;
m_SampleRate = 0; m_SampleRate = 0;
m_BufferSize = 0; m_BufferSize = 0;
m_JackInputCount = 8;
m_JackOutputCount = 8;
m_JackInputCount = 4;
m_JackOutputCount = 4;
m_Client=NULL; m_Client=NULL;
} }


@@ -406,6 +407,8 @@ m_Connected(false)
// we are an output // we are an output
m_IsTerminal = true; m_IsTerminal = true;
m_Version = 2;
m_PluginInfo.Name="Jack"; m_PluginInfo.Name="Jack";
m_PluginInfo.Width=225; m_PluginInfo.Width=225;
m_PluginInfo.Height=230; m_PluginInfo.Height=230;
@@ -415,6 +418,7 @@ m_Connected(false)
m_PluginInfo.PortTips.clear(); m_PluginInfo.PortTips.clear();


m_PluginInfo.NumInputs = m_JackClient->GetJackOutputCount(); m_PluginInfo.NumInputs = m_JackClient->GetJackOutputCount();
m_GUIArgs.NumInputs = m_PluginInfo.NumInputs;


for (int n=0; n<m_JackClient->GetJackInputCount(); n++) for (int n=0; n<m_JackClient->GetJackInputCount(); n++)
{ {
@@ -424,6 +428,7 @@ m_Connected(false)
} }
m_PluginInfo.NumOutputs = m_JackClient->GetJackOutputCount(); m_PluginInfo.NumOutputs = m_JackClient->GetJackOutputCount();
m_GUIArgs.NumOutputs = m_PluginInfo.NumOutputs;


for (int n=0; n<m_JackClient->GetJackOutputCount(); n++) for (int n=0; n<m_JackClient->GetJackOutputCount(); n++)
{ {
@@ -606,3 +611,51 @@ void JackPlugin::ExecuteCommands()
} }
m_Connected=m_JackClient->IsAttached(); m_Connected=m_JackClient->IsAttached();
} }

void JackPlugin::StreamOut (ostream &s)
{
s << m_Version << " " << m_GUIArgs.NumInputs << " " << m_GUIArgs.NumOutputs << " ";
}

void JackPlugin::StreamIn (istream &s)
{
char Test;
int Version, NumInputs, NumOutputs;

s.seekg (2, ios_base::cur );//skip to next line
Test = s.peek();//peek first char
s.seekg (-2, ios_base::cur );//jump back to prior line
if ( (Test >= '0') && (Test <= '9') )
{
s >> Version;
}
else
{
//No Version, so use Version 1
Version = 1;
}
switch (Version)
{
case 2:
{
s >> NumInputs >> NumOutputs;
m_GUIArgs.NumOutputs = min(max(NumOutputs, MIN_PORTS), MAX_PORTS);
m_GUIArgs.NumInputs = min(max(NumInputs, MIN_PORTS), MAX_PORTS);
SetNumberPorts (m_GUIArgs.NumInputs, m_GUIArgs.NumOutputs);
}
break;
case 1:
{
//use original fixed defaults
m_GUIArgs.NumInputs = 16;
m_GUIArgs.NumOutputs = 16;

SetNumberPorts (m_GUIArgs.NumInputs, m_GUIArgs.NumOutputs);
}
break;
}
}

+ 6
- 3
SpiralSound/Plugins/JackPlugin/JackPlugin.h View File

@@ -123,10 +123,12 @@ public:


virtual PluginInfo& Initialise(const HostInfo *Host); virtual PluginInfo& Initialise(const HostInfo *Host);
virtual SpiralGUIType* CreateGUI(); virtual SpiralGUIType* CreateGUI();
virtual void Execute(); virtual void Execute();
virtual void ExecuteCommands(); virtual void ExecuteCommands();
virtual void StreamOut(std::ostream &s) {}
virtual void StreamIn(std::istream &s) {}
virtual void StreamOut(std::ostream &s);
virtual void StreamIn(std::istream &s);
JackClient *GetJackClient() { return m_JackClient; } JackClient *GetJackClient() { return m_JackClient; }
@@ -137,7 +139,6 @@ public:
{ {
int NumInputs; int NumInputs;
int NumOutputs; int NumOutputs;
int Num;
char Port[256]; char Port[256];
}; };


@@ -148,6 +149,8 @@ private:


GUIArgs m_GUIArgs; GUIArgs m_GUIArgs;
int m_Version;
// slightly clumsy, but we have to share this data with the gui // slightly clumsy, but we have to share this data with the gui
int m_NumInputPortNames; int m_NumInputPortNames;
char m_InputPortNames[MAX_PORTS][256]; char m_InputPortNames[MAX_PORTS][256];


+ 36
- 12
SpiralSound/Plugins/JackPlugin/JackPluginGUI.C View File

@@ -144,6 +144,29 @@ SpiralPluginGUI(w,h,o,ch)


void JackPluginGUI::UpdateValues(SpiralPlugin *o) void JackPluginGUI::UpdateValues(SpiralPlugin *o)
{ {
//To make sure buttons match ports on loading a patch
if (! m_GUICH->GetBool("Connected"))
{
int i, numbuttons = (int) m_InputName.size(), numports = m_JackClient->GetJackInputCount();
if (numbuttons > numports)
{
for (int i=numbuttons-numports; i > 0; i--)
{
RemoveOutput() ;
RemoveInput() ;
}
}
if (numbuttons < numports)
{
for (int i=0; i < numports-numbuttons; i++)
{
AddOutput() ;
AddInput() ;
}
}
}
} }


void JackPluginGUI::Update() void JackPluginGUI::Update()
@@ -501,16 +524,17 @@ inline void JackPluginGUI::cb_InputConnect_i(Fl_Button* o)
} }
} }


const string JackPluginGUI::GetHelpText(const string &loc){
return string("")
+ "JACK is the Jack Audio Connection Kit, and allows multiple Linux audio\n"
+ "apps to be connected together and run simultaneously in a low latency.\n"
+ "environment.\n\n"
+ "This plugin allows you to connect up to 64 inputs and outputs to other\n"
+ "JACK apps (providing a server is running and your system can handle it)\n"
+ "You can use the JackPlugin to connect the ports, or an external program\n"
+ "such as the excellent qjackconnect app.\n\n"
+ "When using JACK, make sure the buffer size and samplerate are set to\n"
+ "match the JACK server, otherwise glitchy playback, and/or crashes may\n"
+ "result";
const string JackPluginGUI::GetHelpText(const string &loc)
{
return string("")
+ "JACK is the Jack Audio Connection Kit, and allows multiple Linux audio\n"
+ "apps to be connected together and run simultaneously in a low latency.\n"
+ "environment.\n\n"
+ "This plugin allows you to connect up to 64 inputs and outputs to other\n"
+ "JACK apps (providing a server is running and your system can handle it)\n"
+ "You can use the JackPlugin to connect the ports, or an external program\n"
+ "such as the excellent qjackconnect app.\n\n"
+ "When using JACK, make sure the buffer size and samplerate are set to\n"
+ "match the JACK server, otherwise glitchy playback, and/or crashes may\n"
+ "result";
} }

Loading…
Cancel
Save