📄 audioscript.cpp
字号:
// AudioScript.cpp: implementation of the CAudioScript class.
//
//////////////////////////////////////////////////////////////////////
#include "AudioScript.h"
#pragma warning(disable: 4786)
#include <sstream>
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
namespace AudioEngine {
CAudioScript::CAudioScript(CAudioManager *mgr) : m_Manager(mgr)
{
m_Script = NULL;
m_OriginalData = NULL;
}
CAudioScript::~CAudioScript()
{
SAFE_RELEASE(m_Script);
SAFE_DELETE(m_OriginalData);
}
string CAudioScript::AssembleErrorInfoString(string header, DMUS_SCRIPT_ERRORINFO &errInfo)
{
stringstream str;
str << header << endl;
// put error info into string!
char file[DMUS_MAX_FILENAME];
char desc[DMUS_MAX_FILENAME];
char component[DMUS_MAX_FILENAME];
DXUtil_ConvertWideStringToGeneric(file, errInfo.wszSourceFile, sizeof(file));
DXUtil_ConvertWideStringToGeneric(desc, errInfo.wszDescription , sizeof(desc));
DXUtil_ConvertWideStringToGeneric(component, errInfo.wszSourceComponent, sizeof(component));
str << "There was an error in script file \"" << GetName() << "\"." << endl << endl;
str << "File: " << file << ", line " << errInfo.ulLineNumber << ": " << desc << endl << endl;
str << "Error reported by: " << component << endl;
return(str.str());
}
void CAudioScript::SetVariable(string varname, int value)
{
DMUS_SCRIPT_ERRORINFO errInfo;
WCHAR widevarname[MAX_PATH];
DXUtil_ConvertGenericStringToWideCch(widevarname, varname.c_str(), MAX_PATH);
HRESULT hr = m_Script->SetVariableNumber(widevarname, value, &errInfo);
if (FAILED(hr)) {
ThrowIfFailed(hr, AssembleErrorInfoString("CAudioScript::SetVariable: SetVariableNumber failed!", errInfo));
}
}
int CAudioScript::GetVariable(string varname)
{
DMUS_SCRIPT_ERRORINFO errInfo;
WCHAR widevarname[MAX_PATH];
long value=0;
DXUtil_ConvertGenericStringToWideCch(widevarname, varname.c_str(), MAX_PATH);
HRESULT hr = m_Script->GetVariableNumber(widevarname, &value, &errInfo);
if (FAILED(hr)) {
ThrowIfFailed(hr, AssembleErrorInfoString("CAudioScript::GetVariable: GetVariableNumber failed!", errInfo));
}
return(value);
}
void CAudioScript::CallRoutine(string procname)
{
DMUS_SCRIPT_ERRORINFO errInfo;
WCHAR wideprocname[MAX_PATH];
long value=0;
DXUtil_ConvertGenericStringToWideCch(wideprocname, procname.c_str(), MAX_PATH);
HRESULT hr = m_Script->CallRoutine(wideprocname, &errInfo);
if (FAILED(hr)) {
ThrowIfFailed(hr, AssembleErrorInfoString("CAudioScript::CallRoutine: CallRoutine failed!", errInfo));
}
}
vector<string> CAudioScript::EnumVariables()
{
vector<string> variables;
int count = 0;
HRESULT hr;
bool done=false;
while (!done) {
WCHAR widename[MAX_PATH];
char name[MAX_PATH];
hr = m_Script->EnumVariable(count, widename);
ThrowIfFailed(hr, "CAudioScript::EnumVariables(): EnumVariable failed.");
if (hr == S_FALSE) done=true;
else {
DXUtil_ConvertWideStringToGeneric(name, widename, sizeof(name));
variables.push_back(name);
count++;
}
}
return(variables);
}
vector<string> CAudioScript::EnumRoutines()
{
vector<string> routines;
int count = 0;
HRESULT hr;
bool done=false;
while (!done) {
WCHAR widename[MAX_PATH];
char name[MAX_PATH];
hr = m_Script->EnumRoutine(count, widename);
ThrowIfFailed(hr, "CAudioScript::EnumRoutines(): EnumRoutine failed.");
if (hr == S_FALSE) done=true;
else {
DXUtil_ConvertWideStringToGeneric(name, widename, sizeof(name));
routines.push_back(name);
count++;
}
}
return(routines);
}
void CAudioScript::Init(string name)
{
m_Name = name;
DMUS_SCRIPT_ERRORINFO errInfo;
HRESULT hr;
errInfo.dwSize = sizeof(DMUS_SCRIPT_ERRORINFO);
hr = m_Script->Init( m_Manager->GetPerformance(), &errInfo);
if (FAILED(hr)) {
ThrowIfFailed(hr, AssembleErrorInfoString("CAudioScript::Init: m_Script->Init() failed!", errInfo));
}
}
CAudioScriptPtr::CAudioScriptPtr(CAudioScript* p) : CRefCountPtr<CAudioScript>(p)
{
stringstream str;
if (p) {
str << "CAudioScriptPtr::CAudioScriptPtr: constructed for pointer " << p << " name: " <<
p->GetName() << " (count = " << itsCounter->count << ")..." << endl;
OutputDebugString(str.str().c_str());
}
}
void CAudioScriptPtr::Release()
{
stringstream str;
if (itsCounter) {
str << "CAudioScriptPtr::Release(): pointer " << itsCounter->ptr << " name: " <<
itsCounter->ptr->GetName() << " (count = " << itsCounter->count << ")..." << endl;
OutputDebugString(str.str().c_str());
}
}
} // namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -