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);
}

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);
if (i==m_ChannelMap.end())
@@ -224,6 +224,7 @@ void ChannelHandler::UpdateDataSize(const std::string &ID, int size)
}

pthread_mutex_lock(m_Mutex);
i->second->data = pData;
i->second->size = size;
free(i->second->data_buf);
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 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);



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

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

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

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

PluginInfo &MeterPlugin::Initialise (const HostInfo *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;
}

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

@@ -82,7 +86,7 @@ void MeterPlugin::Execute() {
if (GetOutputBuf (0)) GetOutputBuf (0)->Zero();
if (m_DataReady) {
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()) {
case UPDATEDATASIZE :
{
m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float));
m_AudioCH->ReplaceData("AudioData", m_Data, m_DataSize*sizeof(float));
m_DataSizeChanged = false;
}
break;


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

@@ -36,6 +36,7 @@ class MeterPlugin : public SpiralPlugin {
enum GUICommands {NONE, SETVU, SETMM, UPDATEDATASIZE};
private:
float *m_Data;
int m_DataSize;
// m_VUMode isn't USED for anything, it's here so we can save/load it
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->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);
else memset (m_Data, 0, m_BufSize * sizeof (float));
// 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():
m_DataReady(false)
m_DataReady(false),
m_DataSize(0)
{
m_PluginInfo.Name = "Scope";
m_PluginInfo.Width = 260;
@@ -47,6 +48,7 @@ m_DataReady(false)
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT);
m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT);
m_AudioCH->Register ("DataSize", &m_DataSize, ChannelHandler::OUTPUT);
}

ScopePlugin::~ScopePlugin()
@@ -56,8 +58,9 @@ ScopePlugin::~ScopePlugin()
PluginInfo &ScopePlugin::Initialise(const HostInfo *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;
}

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

@@ -81,7 +85,7 @@ void ScopePlugin::Execute() {
if (GetOutputBuf (0)) GetOutputBuf (0)->Zero();
if (m_DataReady) {
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()) {
case UPDATEDATASIZE :
{
m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float));
m_AudioCH->ReplaceData("AudioData", m_Data, m_DataSize*sizeof(float));
m_DataSizeChanged = false;
}
break;


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

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



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

@@ -106,9 +106,14 @@ void ScopePluginGUI::draw()
//cerr<<"getting and drawing..."<<endl;
if (m_GUICH->GetBool ("DataSizeChanged"))
{
m_GUICH->SetCommand (ScopePlugin::UPDATEDATASIZE);
m_GUICH->SetCommand(ScopePlugin::UPDATEDATASIZE);
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);
else memset ((void*)m_Scope->m_Data, 0, m_BufSize * sizeof (float));
if (!m_Bypass) m_Scope->redraw();


Loading…
Cancel
Save