⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mixerset.cpp

📁 miXo is a buzz machine (www.buzzmachines.com) - a plugin for the freely available jeskola buzz track
💻 CPP
字号:
// MixerSet.cpp: implementation of the CMixerSet class.
//
//////////////////////////////////////////////////////////////////////

#include "MixerSet.h"
#include "MixerKeyTable.h"
#include <sstream>
#include "MiXoException.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMixerSet::CMixerSet(bool bInternal) : m_lstTracks(),m_strName(""),m_ite(),
	m_bInternal(bInternal)
{
}
CMixerSet::~CMixerSet()
{
}
void CMixerSet::InvalidateIterators()
{
	m_ite=m_lstTracks.end();
}
void CMixerSet::Save(CMachineDataOutput * const pcOut)
{
	pcOut->Write(m_strName.c_str());
	pcOut->Write(int(m_lstTracks.size()));
	for(int i=0;i<m_lstTracks.size();i++) {
		m_lstTracks[i].Save(pcOut);
	}
}
void CMixerSet::Init(CMachineDataInput * const pcIn,unsigned uDataVersion)
{
	char c='0';
	stringstream stmName;
	while(c != 0x0) {
		pcIn->Read(c);
		stmName << c;
	}
	m_strName=stmName.str();
	if(!m_lstTracks.empty())
		m_lstTracks.clear();
	int iNum;
	pcIn->Read(iNum);
	for(int i=0;i<iNum;i++) {
		CMixerTrack cTrack;
		cTrack.Init(pcIn,uDataVersion);
		m_lstTracks.push_back(cTrack);
	}
	InvalidateIterators();
}
void CMixerSet::AddTrack(const char *szName,int iKeySetId,bool bStereo)
{
	TLstTracks::iterator ite=GetTrackByName(szName);
	if(ite != m_lstTracks.end()) 
	{
		if(ite->GetKeySetId() == -1)
			ite->SetKeySetId(iKeySetId);
		return;
	}
/*
	ite=GetTrackByKeySet(szKeyName);
	if(ite != m_lstTracks.end()) 
		return;
*/
	CMixerTrack cTrack;
	cTrack.SetName(szName);
	cTrack.SetKeySetId(iKeySetId);
	cTrack.SetStereo(bStereo);
	m_lstTracks.push_back(cTrack);
	InvalidateIterators();
}
void CMixerSet::DeleteTrack(const char *szName)
{
	TLstTracks::iterator ite=GetTrackByName(szName);
	if(ite != m_lstTracks.end()) {
		m_lstTracks.erase(ite);
		InvalidateIterators();		//adding this because I think it's necessary
	}
}
void CMixerSet::RenameTrack(const char *szOld,const char *szNew)
{
	TLstTracks::iterator nuite=GetTrackByName(szNew);
	if(nuite != m_lstTracks.end()) {
		throw CMiXoException(CMiXoException::me_DuplicateTrackName);
	}
	TLstTracks::iterator ite=GetTrackByName(szOld);
	if(ite != m_lstTracks.end())
		ite->SetName(szNew);
}
void CMixerSet::SetTrackInputChannels(const char*sz,bool b)
{
	TLstTracks::iterator ite=GetTrackByName(sz);
	if(ite != m_lstTracks.end())
		ite->SetStereo(b);
}

CMixerSet::TLstTracks::iterator CMixerSet::GetTrackByName(const char *sz) const
{
	if(m_lstTracks.empty())
		return m_lstTracks.end();
	for(TLstTracks::iterator ite=m_lstTracks.begin();ite<m_lstTracks.end();ite++)
	{
		const char *str=ite->GetName().c_str();
		if(strcmp(str,sz) == 0) {
			break;
			//return ite;
		}
	}
	return ite;
//	return m_lstTracks.end();
}


CMixerSet::TLstTracks::iterator CMixerSet::GetTrackByKeySet(int i) const
{
	for(TLstTracks::iterator ite=m_lstTracks.begin();ite<m_lstTracks.end();ite++)
	{
		if(ite->GetKeySetId() == i) {
			return ite;
		}
	}
	return m_lstTracks.end();
}
int CMixerSet::FindUnusedKeyDef(const CMixerKeyTable *pcKeyTable) const
{
	for(int i=0;i<pcKeyTable->GetSize();i++) {
//		const char *szKey=pcKeyTable->GetNameOf(i).c_str();
//		int iKeyId=
		TLstTracks::iterator ite=GetTrackByKeySet(i);
		if(ite == m_lstTracks.end()) {
			return i;
		}
	}
	return -1;
}
CMixerTrack *CMixerSet::FindNextTrackByKeySet(int i)
{
	while(m_ite != m_lstTracks.end()) 
	{
		if(m_ite->GetKeySetId() == i)
			return &(*m_ite++);
		m_ite++;
	}
	return NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -