1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: snd_FxDelay.h 4 5 Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 26241 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_SND_CTR_SND_FX_DELAY_H_ 17 #define NN_SND_CTR_SND_FX_DELAY_H_ 18 19 #include <nn/os.h> 20 #include <nn/snd/CTR/Common/snd_Types.h> 21 #include <nn/util/util_NonCopyable.h> 22 23 #ifdef __cplusplus 24 25 /*! @file 26 @brief DSP ディレイエフェクトに関する関数、およびクラス定義 27 */ 28 29 namespace nn { 30 namespace snd { 31 namespace CTR { 32 33 /*! :private 34 @brief DSP ディレイエフェクトを操作するクラスです。 35 */ 36 class FxDelay : private nn::util::NonCopyable<FxDelay> 37 { 38 public: 39 /*! 40 @brief ディレイパラメータの構造体です。 41 42 m_DelayTime を大きくすればするほど、反響が遅れてやって来ます。 43 44 m_FeedbackGain を大きくすればするほど、ディレイ音がなかなか消えなくなります。 45 0.0f を指定すると、ワンショットディレイ(フィードバックなし)になります。 46 47 m_Damping は LPF(ローパスフィルタ)のかかり具合に影響します。 48 この値を大きくすればするほど、カットオフ周波数が下がっていきます。 49 0.0f にすると、ローパスフィルタはかかりません。 50 51 m_IsEnableSurround が true の場合、サラウンド(リアの L と R) 52 成分もディレイ処理されます。 53 false の場合は、サラウンド成分のディレイ処理はスキップされます。 54 false にすると、その分処理負荷や必要となるバッファサイズを減らすことができます。 55 デフォルトは false です。 56 57 @date 2010/09/13 初版 58 */ 59 struct Param 60 { 61 //! ディレイ時間 (msec) です。初期値は 5 です。 62 u32 m_DelayTime; 63 64 //! フィードバックゲインです。0.0f 〜 1.0f で指定します。初期値は 0.0f です。 65 f32 m_FeedbackGain; 66 67 //! LPF のかかり具合です。0.0f 〜 1.0f で指定します。初期値は 0.0f です。 68 f32 m_Damping; 69 70 //! ディレイ処理をサラウンドチャンネルも有効にするかどうかのフラグです。 71 bool m_IsEnableSurround; 72 NN_PADDING3; 73 74 /*! 75 @brief コンストラクタです。 76 @date 2010/09/13 初版 77 */ ParamParam78 Param() : m_DelayTime(5), m_FeedbackGain(0.0f), m_Damping(0.0f), m_IsEnableSurround(false) {} 79 }; 80 81 public: 82 //---------------------------------------------------------------- 83 /// @name コンストラクタ / デストラクタ 84 //---------------------------------------------------------------- 85 //@{ 86 /*! 87 @brief コンストラクタです。 88 @date 2010/09/13 初版 89 */ FxDelay()90 FxDelay() : m_Buffer(NULL), m_BufferSize(0), m_AuxBusId(AUX_BUS_NULL), m_IsEnabled(false), m_Channels(0) {} 91 92 /*! 93 @brief デストラクタです。 94 @date 2010/09/13 初版 95 */ ~FxDelay()96 ~FxDelay() {} 97 //@} 98 99 /*! 100 @brief 指定したディレイタイムに必要なバッファサイズを計算します。 101 @param[in] delayTime ディレイタイム (msec) 102 @param[in] isEnableSurround サラウンドチャンネルにも適用するかどうか 103 @return バッファサイズを返します。 104 @date 2010/09/13 初版 105 */ 106 static size_t GetRequiredMemorySize(u32 delayTime, bool isEnableSurround); 107 108 /*! 109 @brief FxDelay オブジェクトを AUX バスに関連付けます。 110 @param[in] id 関連付ける AUX バス ID 111 @param[in] buffer ディレイバッファポインタ 112 @param[in] size ディレイバッファサイズ 113 @return 成功すれば true を、失敗すれば false を返します。 114 @date 2010/09/13 初版 115 */ 116 bool Initialize(AuxBusId id, uptr buffer, size_t size); 117 118 /*! 119 @brief FxDelay オブジェクトの AUX バスへの関連付けを解除します。 120 @date 2010/09/13 初版 121 */ 122 void Finalize(); 123 124 /*! 125 @brief パラメータの設定を行います。 126 @param[in] param パラメータ 127 @return 成功すれば true を、失敗すれば false を返します。 128 @date 2010/09/13 初版 129 */ 130 bool SetParam(const FxDelay::Param& param); 131 132 /*! 133 @brief ディレイエフェクトの有効、無効を切り替えます。 134 @param[in] enable 有効、無効フラグ 135 @return 成功すれば true を、失敗すれば false を返します。 136 @date 2010/09/13 初版 137 */ 138 bool Enable(bool enable = true); 139 140 /*! 141 @brief ディレイエフェクトを無効にします。 142 @return 成功すれば true を、失敗すれば false を返します。 143 @date 2010/09/13 初版 144 */ Disable()145 bool Disable() 146 { 147 return Enable(false); 148 } 149 150 /*! 151 @brief ディレイエフェクトが現在有効かどうかを返します。 152 @return 有効であれば true を、無効であれば false を返します。 153 */ IsEnabled()154 bool IsEnabled() 155 { 156 return m_IsEnabled; 157 } 158 159 private: 160 bool AssignWorkBuffer(AuxBusId id, uptr buffer, size_t size); 161 162 void ReleaseWorkBuffer(); 163 164 uptr m_Buffer; 165 size_t m_BufferSize; 166 167 AuxBusId m_AuxBusId; 168 bool m_IsEnabled; 169 s8 m_Channels; 170 NN_PADDING1; 171 }; 172 173 }}} // namespace nn::snd::CTR 174 175 #endif // __cplusplus 176 177 #endif //NN_SND_VOICE_H_ 178