📄 mixerstatus.cpp
字号:
// MixerStatus.cpp: implementation of the CMixerStatus class.
//
//////////////////////////////////////////////////////////////////////
#include <sstream>
#include "data_version.h"
#include "MixerStatus.h"
#include "MachineInterface.h"
#include "dsplib.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//class A
//{
//public:
// A();
// void f() {};
//};
//typedef void (A::*FPTR)();
//A::A()
//{
// FPTR p=f;
// this->*p();
//}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMixerStatus::CMixerStatus()
: m_cSet(),m_cPreset(),m_cKeyTable(),
m_iCurTrack(0),m_iChanges(0),m_bUpdate(false),
m_pCB(NULL),m_bBufferClear(false),m_uBufLen(0),
m_eMode(CMixerTrack::em_Normal),m_cWrapList()
{
ClearBuf();
//SetMode(m_eMode);
}
CMixerStatus::~CMixerStatus()
{
}
bool CMixerStatus::HandleInput(int idx,int amp,int pan)
{
m_iCurTrack=idx;
#ifdef _DEBUG
stringstream strm;
strm << "HandleInput: idx: " << idx << ends;
OutputDebugString(strm.str().c_str());
#endif
return true;
}
bool CMixerStatus::ProcessInput(float *p,const int n,float fAmp)
{
if(p) {
//fAmp/=float(m_cSet.GetSize());
if(m_cSet.ProcessInput(m_iCurTrack,p,n,m_fBuf,fAmp))
if(n > m_uBufLen){
m_uBufLen=n;
assert(m_uBufLen < efBufferSize);
}
// assert(n==m_uBufLen);
m_iChanges++;
}
m_iCurTrack++;
if(m_iCurTrack == m_cSet.GetSize()) {
m_iCurTrack=0;
if(m_iChanges) {
SetUpdateFlag();
m_iChanges=0;
}
}
return true;
}
void CMixerStatus::CopyBuf(float *pout,int n)
{
/*
assert(n*2 < efBufferSize);
assert(m_uBufLen*2 < efBufferSize);
if(n < m_uBufLen) {
DSP_Copy(pout,m_fBuf,m_uBufLen*2);
OutputDebugString("n>m_uBuflen");
}
else
*/
DSP_Copy(pout,m_fBuf,n*2);
}
void CMixerStatus::Save(CMachineDataOutput * const po)
{
po->Write(int(G_Const_Data_Version));
m_cSet.Save(po);
m_cPreset.Save(po);
m_cKeyTable.Save(po);
}
void CMixerStatus::Init(CMachineDataInput * const pi)
{
int iDataVersion;
pi->Read(iDataVersion);
m_cSet.Init(pi,iDataVersion);
m_cPreset.Init(pi,iDataVersion);
m_cKeyTable.Init(pi,iDataVersion);
}
void CMixerStatus::AddTrack(const char *sz,bool b)
{
assert(sz);
int i=m_cSet.FindUnusedKeyDef(&m_cKeyTable);
if(i == -1) {
string strKeyDef;
stringstream stmName;
stmName << '#' << (m_cSet.GetSize()+1) << ends;
strKeyDef=stmName.str();
CMixerKeyDef c(strKeyDef);
i=m_cKeyTable.AddKeyDef(c);
}
m_cSet.AddTrack(sz,i,b);
m_cPreset.AddTrack(sz,i,b);
}
void CMixerStatus::DeleteTrack(const char *sz)
{
assert(sz);
m_cSet.DeleteTrack(sz);
m_cPreset.DeleteTrack(sz);
}
void CMixerStatus::RenameTrack(const char *szOld,const char *szNew)
{
assert(szOld);
assert(szNew);
m_cSet.RenameTrack(szOld,szNew);
m_cPreset.RenameTrack(szOld,szNew);
}
void CMixerStatus::SetTrackInputChannels(const char *sz,bool bStereo)
{
assert(sz);
m_cSet.SetTrackInputChannels(sz,bStereo);
m_cPreset.SetTrackInputChannels(sz,bStereo);
}
void CMixerStatus::LoadMixerPreset(string s)
{
CMixerSet *pSet=m_cPreset.Get(s);
if(pSet) {
m_cSet=*pSet;
m_cSet.SetMode(m_eMode);
}
}
void CMixerStatus::SetMode(CMixerTrack::TEMode m)
{
m_cSet.SetMode(m);
m_eMode=m;
}
void CMixerStatus::SetSampleDataAccuracy(int i)
{
m_cSet.SetSampleDataAccuracy(i);
m_cPreset.SetSampleDataAccuracy(i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -