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

📄 audioscript.cpp

📁 游戏音频程序设计-Beginning.Game.Audio.Programming
💻 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_ConvertWideStringToGenericCch(file, errInfo.wszSourceFile, sizeof(file));
  DXUtil_ConvertWideStringToGenericCch(desc, errInfo.wszDescription , sizeof(desc));
  DXUtil_ConvertWideStringToGenericCch(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_ConvertWideStringToGenericCch(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_ConvertWideStringToGenericCch(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 + -