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

📄 openalsource.h

📁 游戏音频程序设计-Beginning.Game.Audio.Programming
💻 H
字号:
// OpenALSource.h: interface for the COpenALSource class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_OPENALSOURCE_H__00A75D94_11A5_484F_B92B_5E3BB7A7A601__INCLUDED_)
#define AFX_OPENALSOURCE_H__00A75D94_11A5_484F_B92B_5E3BB7A7A601__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <al.h> // main openAL header file
#include <alu.h> // Open AL utilities header
#include <stdio.h>

#include "RefCountPtr.h"

#include "OpenALBuffer.h"

namespace AudioEngine {

class COpenALSource;
// smart pointer to COpenALSource
class COpenALSourcePtr : public CRefCountPtr<COpenALSource>
{
public:
  explicit COpenALSourcePtr(COpenALSource* p = NULL);
  void Release();

};

class COpenALSource  
{
public:
  friend class COpenALManager;
	COpenALSource();
	virtual ~COpenALSource();

  unsigned int GetID() { return(m_ID); }

  void LinkToBuffer(COpenALBufferPtr linkto);
  void Play();
  void Pause();
  void Stop();
  void Rewind();
  void PlayFromStart() { Rewind(); Play(); }

  // properties
  void SetPitch(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_PITCH, value); }
  float GetPitch() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_PITCH, &value);
    return(value);
  }

  void SetGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_GAIN, value); }
  float GetGain() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_GAIN, &value);
    return(value);
  }

  void SetMinGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_MIN_GAIN, value); }
  float GetMinGain() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_MIN_GAIN, &value);
    return(value);
  }

  void SetMaxGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_MAX_GAIN, value); }
  float GetMaxGain() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_MAX_GAIN, &value);
    return(value);
  }

  void SetMaxDistance(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_MAX_DISTANCE, value); }
  float GetMaxDistance() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_MAX_DISTANCE, &value);
    return(value);
  }

  void SetRolloffFactor(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_ROLLOFF_FACTOR, value); }
  float GetRolloffFactor() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_ROLLOFF_FACTOR, &value);
    return(value);
  }

  void SetConeOuterGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_CONE_OUTER_GAIN, value); }
  float GetConeOuterGain() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_CONE_OUTER_GAIN, &value);
    return(value);
  }

  void SetConeInnerAngle(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_CONE_INNER_ANGLE, value); }
  float GetConeInnerAngle() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_CONE_INNER_ANGLE, &value);
    return(value);
  }

  void SetConeOuterAngle(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_CONE_OUTER_ANGLE, value); }
  float GetConeOuterAngle() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_CONE_OUTER_ANGLE, &value);
    return(value);
  }

  void SetReferenceDistance(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_REFERENCE_DISTANCE, value); }
  float GetReferenceDistance() {
    float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_REFERENCE_DISTANCE, &value);
    return(value);
  }

  void SetPosition(float x, float y, float z) { if (alIsSource(m_ID) == AL_TRUE) alSource3f(m_ID, AL_POSITION, x, y, -z); }
  void GetPosition(float &x, float &y, float &z) {
    x = y = z = 0.0f;
    if (alIsSource(m_ID) == AL_TRUE) alGetSource3f(m_ID, AL_POSITION, &x, &y, &z);
    z *= -1;
  }

  void SetVelocity(float x, float y, float z) { if (alIsSource(m_ID) == AL_TRUE) alSource3f(m_ID, AL_VELOCITY, x, y, -z); }
  void GetVelocity(float &x, float &y, float &z) {
    x = y = z = 0.0f;
    if (alIsSource(m_ID) == AL_TRUE) alGetSource3f(m_ID, AL_VELOCITY, &x, &y, &z);
    z *= -1;
  }

  void SetDirection(float x, float y, float z) { if (alIsSource(m_ID) == AL_TRUE) alSource3f(m_ID, AL_DIRECTION, x, y, -z); }
  void GetDirection(float &x, float &y, float &z) {
    x = y = z = 0.0f;
    if (alIsSource(m_ID) == AL_TRUE) alGetSource3f(m_ID, AL_DIRECTION, &x, &y, &z);
    z *= -1;
  }

  void SetSourceRelative(int value) { if (alIsSource(m_ID) == AL_TRUE) alSourcei(m_ID, AL_SOURCE_RELATIVE, value); }
  int GetSourceRelative() {
    int value = 0; if (alIsSource(m_ID) == AL_TRUE) alGetSourcei(m_ID, AL_SOURCE_RELATIVE, &value);
    return(value);
  }

  void SetLooping(int value) { if (alIsSource(m_ID) == AL_TRUE) alSourcei(m_ID, AL_LOOPING, value); }
  int GetLooping() {
    int value = 0; if (alIsSource(m_ID) == AL_TRUE) alGetSourcei(m_ID, AL_LOOPING, &value);
    return(value);
  }




















protected:
  unsigned int m_ID;
  COpenALBufferPtr m_Buffer;
};

} // namespace
#endif // !defined(AFX_OPENALSOURCE_H__00A75D94_11A5_484F_B92B_5E3BB7A7A601__INCLUDED_)

⌨️ 快捷键说明

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