Browse Source

change UpdateDataSize in ChannelHandler to ReplaceData to properly update new data as well as size.

fixed scope and meter accordingly to properly update data and size.
master
aj_genius 21 years ago
parent
commit
3773f8b1c1
8 changed files with 35 additions and 14 deletions
  1. +2
    -1
      SpiralSound/ChannelHandler.C
  2. +1
    -1
      SpiralSound/ChannelHandler.h
  3. +9
    -5
      SpiralSound/Plugins/MeterPlugin/MeterPlugin.C
  4. +1
    -0
      SpiralSound/Plugins/MeterPlugin/MeterPlugin.h
  5. +5
    -0
      SpiralSound/Plugins/MeterPlugin/MeterPluginGUI.C
  6. +10
    -6
      SpiralSound/Plugins/ScopePlugin/ScopePlugin.C
  7. +1
    -0
      SpiralSound/Plugins/ScopePlugin/ScopePlugin.h
  8. +6
    -1
      SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.C

+ 2
- 1
SpiralSound/ChannelHandler.C View File

@@ -214,7 +214,7 @@ void ChannelHandler::GetData(const string &ID, void *data)
pthread_mutex_unlock(m_Mutex); pthread_mutex_unlock(m_Mutex);
} }


void ChannelHandler::UpdateDataSize(const std::string &ID, int size)
void ChannelHandler::ReplaceData(const std::string &ID, void *pData, int size)
{ {
map<string,Channel*>::iterator i=m_ChannelMap.find(ID); map<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i==m_ChannelMap.end()) if (i==m_ChannelMap.end())
@@ -224,6 +224,7 @@ void ChannelHandler::UpdateDataSize(const std::string &ID, int size)
} }


pthread_mutex_lock(m_Mutex); pthread_mutex_lock(m_Mutex);
i->second->data = pData;
i->second->size = size; i->second->size = size;
free(i->second->data_buf); free(i->second->data_buf);
i->second->data_buf = malloc(size); i->second->data_buf = malloc(size);


+ 1
- 1
SpiralSound/ChannelHandler.h View File

@@ -79,7 +79,7 @@ public:
void Set(const std::string &ID, const float& s) { SetData(ID,(void*)&s); } void Set(const std::string &ID, const float& s) { SetData(ID,(void*)&s); }
void Set(const std::string &ID, const double& s) { SetData(ID,(void*)&s); } void Set(const std::string &ID, const double& s) { SetData(ID,(void*)&s); }


void UpdateDataSize(const std::string &ID, int size);
void ReplaceData(const std::string &ID, void *pData, int size);


void SetCommand(char command); void SetCommand(char command);




+ 9
- 5
SpiralSound/Plugins/MeterPlugin/MeterPlugin.C View File

@@ -36,6 +36,7 @@ string SpiralPlugin_GetGroupName() { return "InputOutput"; }


MeterPlugin::MeterPlugin(): MeterPlugin::MeterPlugin():
m_Data (NULL), m_Data (NULL),
m_DataSize (0),
m_DataReady (false), m_DataReady (false),
m_VUMode (true) m_VUMode (true)
{ {
@@ -48,6 +49,7 @@ m_VUMode (true)
m_PluginInfo.PortTips.push_back ("Output"); m_PluginInfo.PortTips.push_back ("Output");
m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT); m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT);
m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT); m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT);
m_AudioCH->Register ("DataSize", &m_DataSize, ChannelHandler::OUTPUT);


m_Version = 1; m_Version = 1;
} }
@@ -58,8 +60,9 @@ MeterPlugin::~MeterPlugin() {


PluginInfo &MeterPlugin::Initialise (const HostInfo *Host) { PluginInfo &MeterPlugin::Initialise (const HostInfo *Host) {
PluginInfo& Info = SpiralPlugin::Initialise (Host); PluginInfo& Info = SpiralPlugin::Initialise (Host);
m_Data = new float[Host->BUFSIZE];
m_AudioCH->RegisterData ("AudioData", ChannelHandler::OUTPUT, m_Data, Host->BUFSIZE * sizeof (float));
m_DataSize = Host->BUFSIZE;
m_Data = new float[m_DataSize];
m_AudioCH->RegisterData ("AudioData", ChannelHandler::OUTPUT, m_Data, m_DataSize * sizeof (float));
return Info; return Info;
} }


@@ -72,7 +75,8 @@ void MeterPlugin::Reset()
ResetPorts(); ResetPorts();
m_DataReady = false; m_DataReady = false;
delete m_Data; delete m_Data;
m_Data = new float[m_HostInfo->BUFSIZE];
m_DataSize = m_HostInfo->BUFSIZE;
m_Data = new float[m_DataSize];
m_DataSizeChanged = true; m_DataSizeChanged = true;
} }


@@ -82,7 +86,7 @@ void MeterPlugin::Execute() {
if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); if (GetOutputBuf (0)) GetOutputBuf (0)->Zero();
if (m_DataReady) { if (m_DataReady) {
GetOutputBuf (0)->Mix (*GetInput(0), 0); GetOutputBuf (0)->Mix (*GetInput(0), 0);
memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float));
memcpy (m_Data, GetInput (0)->GetBuffer (), m_DataSize * sizeof (float));
} }
} }


@@ -91,7 +95,7 @@ void MeterPlugin::ExecuteCommands () {
switch (m_AudioCH->GetCommand()) { switch (m_AudioCH->GetCommand()) {
case UPDATEDATASIZE : case UPDATEDATASIZE :
{ {
m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float));
m_AudioCH->ReplaceData("AudioData", m_Data, m_DataSize*sizeof(float));
m_DataSizeChanged = false; m_DataSizeChanged = false;
} }
break; break;


+ 1
- 0
SpiralSound/Plugins/MeterPlugin/MeterPlugin.h View File

@@ -36,6 +36,7 @@ class MeterPlugin : public SpiralPlugin {
enum GUICommands {NONE, SETVU, SETMM, UPDATEDATASIZE}; enum GUICommands {NONE, SETVU, SETMM, UPDATEDATASIZE};
private: private:
float *m_Data; float *m_Data;
int m_DataSize;
// m_VUMode isn't USED for anything, it's here so we can save/load it // m_VUMode isn't USED for anything, it's here so we can save/load it
bool m_DataReady, m_VUMode, m_DataSizeChanged; bool m_DataReady, m_VUMode, m_DataSizeChanged;
}; };


+ 5
- 0
SpiralSound/Plugins/MeterPlugin/MeterPluginGUI.C View File

@@ -98,7 +98,12 @@ void MeterPluginGUI::draw() {
{ {
m_GUICH->SetCommand (MeterPlugin::UPDATEDATASIZE); m_GUICH->SetCommand (MeterPlugin::UPDATEDATASIZE);
m_GUICH->Wait(); m_GUICH->Wait();

m_BufSize = m_GUICH->GetInt("DataSize");
delete[] m_Data;
m_Data = new float[m_BufSize];
} }

if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", m_Data); if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", m_Data);
else memset (m_Data, 0, m_BufSize * sizeof (float)); else memset (m_Data, 0, m_BufSize * sizeof (float));
// The min and max values are based on the whole buffer // The min and max values are based on the whole buffer


+ 10
- 6
SpiralSound/Plugins/ScopePlugin/ScopePlugin.C View File

@@ -36,7 +36,8 @@ string SpiralPlugin_GetGroupName() { return "InputOutput"; }
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////


ScopePlugin::ScopePlugin(): ScopePlugin::ScopePlugin():
m_DataReady(false)
m_DataReady(false),
m_DataSize(0)
{ {
m_PluginInfo.Name = "Scope"; m_PluginInfo.Name = "Scope";
m_PluginInfo.Width = 260; m_PluginInfo.Width = 260;
@@ -47,6 +48,7 @@ m_DataReady(false)
m_PluginInfo.PortTips.push_back("Output"); m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT); m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT);
m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT); m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT);
m_AudioCH->Register ("DataSize", &m_DataSize, ChannelHandler::OUTPUT);
} }


ScopePlugin::~ScopePlugin() ScopePlugin::~ScopePlugin()
@@ -56,8 +58,9 @@ ScopePlugin::~ScopePlugin()
PluginInfo &ScopePlugin::Initialise(const HostInfo *Host) PluginInfo &ScopePlugin::Initialise(const HostInfo *Host)
{ {
PluginInfo& Info = SpiralPlugin::Initialise(Host); PluginInfo& Info = SpiralPlugin::Initialise(Host);
m_Data = new float[Host->BUFSIZE];
m_AudioCH->RegisterData("AudioData",ChannelHandler::OUTPUT,m_Data,Host->BUFSIZE*sizeof(float));
m_DataSize = m_HostInfo->BUFSIZE;
m_Data = new float[m_DataSize];
m_AudioCH->RegisterData("AudioData",ChannelHandler::OUTPUT,m_Data,m_DataSize*sizeof(float));
return Info; return Info;
} }


@@ -71,7 +74,8 @@ void ScopePlugin::Reset()
ResetPorts(); ResetPorts();
m_DataReady = false; m_DataReady = false;
delete m_Data; delete m_Data;
m_Data = new float[m_HostInfo->BUFSIZE];
m_DataSize = m_HostInfo->BUFSIZE;
m_Data = new float[m_DataSize];
m_DataSizeChanged = true; m_DataSizeChanged = true;
} }


@@ -81,7 +85,7 @@ void ScopePlugin::Execute() {
if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); if (GetOutputBuf (0)) GetOutputBuf (0)->Zero();
if (m_DataReady) { if (m_DataReady) {
GetOutputBuf (0)->Mix (*GetInput(0), 0); GetOutputBuf (0)->Mix (*GetInput(0), 0);
memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float));
memcpy (m_Data, GetInput (0)->GetBuffer (), m_DataSize * sizeof (float));
} }
} }


@@ -92,7 +96,7 @@ void ScopePlugin::ExecuteCommands()
switch (m_AudioCH->GetCommand()) { switch (m_AudioCH->GetCommand()) {
case UPDATEDATASIZE : case UPDATEDATASIZE :
{ {
m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float));
m_AudioCH->ReplaceData("AudioData", m_Data, m_DataSize*sizeof(float));
m_DataSizeChanged = false; m_DataSizeChanged = false;
} }
break; break;


+ 1
- 0
SpiralSound/Plugins/ScopePlugin/ScopePlugin.h View File

@@ -38,6 +38,7 @@ class ScopePlugin : public SpiralPlugin {
private: private:
float *m_Data; float *m_Data;
bool m_DataReady; bool m_DataReady;
int m_DataSize;
bool m_DataSizeChanged; bool m_DataSizeChanged;
}; };




+ 6
- 1
SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.C View File

@@ -106,9 +106,14 @@ void ScopePluginGUI::draw()
//cerr<<"getting and drawing..."<<endl; //cerr<<"getting and drawing..."<<endl;
if (m_GUICH->GetBool ("DataSizeChanged")) if (m_GUICH->GetBool ("DataSizeChanged"))
{ {
m_GUICH->SetCommand (ScopePlugin::UPDATEDATASIZE);
m_GUICH->SetCommand(ScopePlugin::UPDATEDATASIZE);
m_GUICH->Wait(); m_GUICH->Wait();

m_BufSize = m_GUICH->GetInt("DataSize");
delete[] m_Scope->m_Data;
m_Scope->m_Data = new float[m_BufSize];
} }
if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", (void*)m_Scope->m_Data); if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", (void*)m_Scope->m_Data);
else memset ((void*)m_Scope->m_Data, 0, m_BufSize * sizeof (float)); else memset ((void*)m_Scope->m_Data, 0, m_BufSize * sizeof (float));
if (!m_Bypass) m_Scope->redraw(); if (!m_Bypass) m_Scope->redraw();


Loading…
Cancel
Save