/*---------------------------------------------------------------------------* Project: Horizon File: snd_FxDelay.h Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 26241 $ *---------------------------------------------------------------------------*/ #ifndef NN_SND_CTR_SND_FX_DELAY_H_ #define NN_SND_CTR_SND_FX_DELAY_H_ #include #include #include #ifdef __cplusplus /*! @file @brief DSP ディレイエフェクトに関する関数、およびクラス定義 */ namespace nn { namespace snd { namespace CTR { /*! :private @brief DSP ディレイエフェクトを操作するクラスです。 */ class FxDelay : private nn::util::NonCopyable { public: /*! @brief ディレイパラメータの構造体です。 m_DelayTime を大きくすればするほど、反響が遅れてやって来ます。 m_FeedbackGain を大きくすればするほど、ディレイ音がなかなか消えなくなります。 0.0f を指定すると、ワンショットディレイ(フィードバックなし)になります。 m_Damping は LPF(ローパスフィルタ)のかかり具合に影響します。 この値を大きくすればするほど、カットオフ周波数が下がっていきます。 0.0f にすると、ローパスフィルタはかかりません。 m_IsEnableSurround が true の場合、サラウンド(リアの L と R) 成分もディレイ処理されます。 false の場合は、サラウンド成分のディレイ処理はスキップされます。 false にすると、その分処理負荷や必要となるバッファサイズを減らすことができます。 デフォルトは false です。 @date 2010/09/13 初版 */ struct Param { //! ディレイ時間 (msec) です。初期値は 5 です。 u32 m_DelayTime; //! フィードバックゲインです。0.0f 〜 1.0f で指定します。初期値は 0.0f です。 f32 m_FeedbackGain; //! LPF のかかり具合です。0.0f 〜 1.0f で指定します。初期値は 0.0f です。 f32 m_Damping; //! ディレイ処理をサラウンドチャンネルも有効にするかどうかのフラグです。 bool m_IsEnableSurround; NN_PADDING3; /*! @brief コンストラクタです。 @date 2010/09/13 初版 */ Param() : m_DelayTime(5), m_FeedbackGain(0.0f), m_Damping(0.0f), m_IsEnableSurround(false) {} }; public: //---------------------------------------------------------------- /// @name コンストラクタ / デストラクタ //---------------------------------------------------------------- //@{ /*! @brief コンストラクタです。 @date 2010/09/13 初版 */ FxDelay() : m_Buffer(NULL), m_BufferSize(0), m_AuxBusId(AUX_BUS_NULL), m_IsEnabled(false), m_Channels(0) {} /*! @brief デストラクタです。 @date 2010/09/13 初版 */ ~FxDelay() {} //@} /*! @brief 指定したディレイタイムに必要なバッファサイズを計算します。 @param[in] delayTime ディレイタイム (msec) @param[in] isEnableSurround サラウンドチャンネルにも適用するかどうか @return バッファサイズを返します。 @date 2010/09/13 初版 */ static size_t GetRequiredMemorySize(u32 delayTime, bool isEnableSurround); /*! @brief FxDelay オブジェクトを AUX バスに関連付けます。 @param[in] id 関連付ける AUX バス ID @param[in] buffer ディレイバッファポインタ @param[in] size ディレイバッファサイズ @return 成功すれば true を、失敗すれば false を返します。 @date 2010/09/13 初版 */ bool Initialize(AuxBusId id, uptr buffer, size_t size); /*! @brief FxDelay オブジェクトの AUX バスへの関連付けを解除します。 @date 2010/09/13 初版 */ void Finalize(); /*! @brief パラメータの設定を行います。 @param[in] param パラメータ @return 成功すれば true を、失敗すれば false を返します。 @date 2010/09/13 初版 */ bool SetParam(const FxDelay::Param& param); /*! @brief ディレイエフェクトの有効、無効を切り替えます。 @param[in] enable 有効、無効フラグ @return 成功すれば true を、失敗すれば false を返します。 @date 2010/09/13 初版 */ bool Enable(bool enable = true); /*! @brief ディレイエフェクトを無効にします。 @return 成功すれば true を、失敗すれば false を返します。 @date 2010/09/13 初版 */ bool Disable() { return Enable(false); } /*! @brief ディレイエフェクトが現在有効かどうかを返します。 @return 有効であれば true を、無効であれば false を返します。 */ bool IsEnabled() { return m_IsEnabled; } private: bool AssignWorkBuffer(AuxBusId id, uptr buffer, size_t size); void ReleaseWorkBuffer(); uptr m_Buffer; size_t m_BufferSize; AuxBusId m_AuxBusId; bool m_IsEnabled; s8 m_Channels; NN_PADDING1; }; }}} // namespace nn::snd::CTR #endif // __cplusplus #endif //NN_SND_VOICE_H_