lllistener_fmod.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file listener_fmod.cpp
  3.  * @brief implementation of LISTENER class abstracting the audio
  4.  * support as a FMOD 3D implementation (windows only)
  5.  *
  6.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2002-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include "linden_common.h"
  34. #include "llaudioengine.h"
  35. #include "lllistener_fmod.h"
  36. #include "fmod.h"
  37. //-----------------------------------------------------------------------
  38. // constructor
  39. //-----------------------------------------------------------------------
  40. LLListener_FMOD::LLListener_FMOD()
  41. {
  42. init();
  43. }
  44. //-----------------------------------------------------------------------
  45. LLListener_FMOD::~LLListener_FMOD()
  46. {
  47. }
  48. //-----------------------------------------------------------------------
  49. void LLListener_FMOD::init(void)
  50. {
  51. // do inherited
  52. LLListener::init();
  53. mDopplerFactor = 1.0f;
  54. mRolloffFactor = 1.0f;
  55. }
  56. //-----------------------------------------------------------------------
  57. void LLListener_FMOD::translate(LLVector3 offset)
  58. {
  59. LLListener::translate(offset);
  60. FSOUND_3D_Listener_SetAttributes(mPosition.mV, NULL, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]);
  61. }
  62. //-----------------------------------------------------------------------
  63. void LLListener_FMOD::setPosition(LLVector3 pos)
  64. {
  65. LLListener::setPosition(pos);
  66. FSOUND_3D_Listener_SetAttributes(pos.mV, NULL, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]);
  67. }
  68. //-----------------------------------------------------------------------
  69. void LLListener_FMOD::setVelocity(LLVector3 vel)
  70. {
  71. LLListener::setVelocity(vel);
  72. FSOUND_3D_Listener_SetAttributes(NULL, vel.mV, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]);
  73. }
  74. //-----------------------------------------------------------------------
  75. void LLListener_FMOD::orient(LLVector3 up, LLVector3 at)
  76. {
  77. LLListener::orient(up, at);
  78. // Welcome to the transition between right and left
  79. // (coordinate systems, that is)
  80. // Leaving the at vector alone results in a L/R reversal
  81. // since DX is left-handed and we (LL, OpenGL, OpenAL) are right-handed
  82. at = -at;
  83. FSOUND_3D_Listener_SetAttributes(NULL, NULL, at.mV[0],at.mV[1],at.mV[2], up.mV[0],up.mV[1],up.mV[2]);
  84. }
  85. //-----------------------------------------------------------------------
  86. void LLListener_FMOD::commitDeferredChanges()
  87. {
  88. FSOUND_Update();
  89. }
  90. void LLListener_FMOD::setRolloffFactor(F32 factor)
  91. {
  92. mRolloffFactor = factor;
  93. FSOUND_3D_SetRolloffFactor(factor);
  94. }
  95. F32 LLListener_FMOD::getRolloffFactor()
  96. {
  97. return mRolloffFactor;
  98. }
  99. void LLListener_FMOD::setDopplerFactor(F32 factor)
  100. {
  101. mDopplerFactor = factor;
  102. FSOUND_3D_SetDopplerFactor(factor);
  103. }
  104. F32 LLListener_FMOD::getDopplerFactor()
  105. {
  106. return mDopplerFactor;
  107. }