1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: snd_FxBase.h 4 5 Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain proprietary 8 information of Nintendo and/or its licensed developers and are protected by 9 national and international copyright laws. They may not be disclosed to third 10 parties or copied or duplicated in any form, in whole or in part, without the 11 prior written consent of Nintendo. 12 13 The content herein is highly confidential and should be handled accordingly. 14 15 $Revision: $ 16 *---------------------------------------------------------------------------*/ 17 18 /** 19 * :include nw/snd/snd_FxBase.h 20 * 21 * @file snd_FxBase.h 22 */ 23 24 #ifndef NW_SND_FX_BASE_H_ 25 #define NW_SND_FX_BASE_H_ 26 27 #include <nn/snd.h> 28 #include <nw/ut/ut_LinkList.h> 29 #include <nw/ut/ut_Preprocessor.h> // NW_DISALLOW_COPY_AND_ASSIGN 30 #include <nw/snd/snd_Global.h> 31 32 namespace nw { 33 namespace snd { 34 35 //--------------------------------------------------------------------------- 36 //! @brief エフェクトの抽象クラスです。 37 //! 38 //! FxBase クラスから継承し、エフェクトを実装することができます。 39 //! 40 //! エフェクトの使用方法については、@ref SoundSystem 41 //! クラスを参照してください。 42 //! 43 //! エフェクトは CPU で処理されます (DSP では処理されません)。 44 //! 45 //! @see SoundSystem クラス 46 //! @see FxReverb クラス 47 //! 48 //! @date 2010/08/25 エフェクトが CPU で処理される旨、追記 49 //! @date 2010/06/17 初版 50 //--------------------------------------------------------------------------- 51 class FxBase 52 { 53 public: 54 //---------------------------------------- 55 //! @name デストラクタ 56 //@{ 57 //--------------------------------------------------------------------------- 58 //! @brief デストラクタです。 59 //! 60 //! @date 2010/06/17 初版 61 //--------------------------------------------------------------------------- ~FxBase()62 virtual ~FxBase() {} 63 //@} 64 65 //---------------------------------------- 66 //! @name エフェクト 67 //@{ 68 69 //--------------------------------------------------------------------------- 70 //! @brief エフェクトの初期化処理を行います。 71 //! 72 //! この関数は、@ref SoundSystem クラスから、 73 //! エフェクトの開始処理が必要となるタイミングで呼び出されます。 74 //! 75 //! ユーザーが呼び出す必要はありません。 76 //! 77 //! @return 初期化に成功すると true を、失敗すると false を返します。 78 //! 79 //! @date 2010/06/17 初版 80 //--------------------------------------------------------------------------- 81 virtual bool Initialize() = 0; 82 83 //--------------------------------------------------------------------------- 84 //! @brief エフェクトの終了処理を行います。 85 //! 86 //! この関数は、@ref SoundSystem クラスから、 87 //! エフェクトの終了処理が必要となるタイミングで呼び出されます。 88 //! 89 //! ユーザーが呼び出す必要はありません。 90 //! 91 //! @date 2010/06/17 初版 92 //--------------------------------------------------------------------------- 93 virtual void Finalize() = 0; 94 95 //--------------------------------------------------------------------------- 96 //! @brief エフェクト処理を行います。 97 //! 98 //! この関数はエフェクトに送られてくる 99 //! AUX バスのバッファの更新が必要なタイミングで呼び出されます。 100 //! FxBase を継承したクラスで、この関数にエフェクトの処理を実装しなければなりません。 101 //! 102 //! @param[in] numChannels バッファのチャンネル数です。 103 //! @param[in,out] data エフェクト処理を行う波形データです。 104 //! @param[in] sampleLength 1 チャンネルあたりのサンプル長です。 105 //! @param[in] format data のサンプルフォーマットです。 106 //! @param[in] sampleRate data のサンプルレートです。 107 //! @param[in] mode 出力モードです。 108 //! 109 //! @see SampleFormat 110 //! @see OutputMode 111 //! 112 //! @date 2010/06/17 初版 113 //--------------------------------------------------------------------------- 114 virtual void UpdateBuffer( 115 int numChannels, 116 nn::snd::AuxBusData* data, 117 s32 sampleLength, 118 SampleFormat format, 119 f32 sampleRate, 120 OutputMode mode 121 ) = 0; 122 123 //--------------------------------------------------------------------------- 124 //! :private 125 //! 126 //! @brief 出力モードが変更されたときに呼ばれる仮想関数です。 127 //--------------------------------------------------------------------------- OnChangeOutputMode()128 virtual void OnChangeOutputMode() {} 129 130 //@} 131 132 //--------------------------------------------------------------------------- 133 //! @details :private 134 //--------------------------------------------------------------------------- 135 ut::LinkListNode m_Link; 136 }; 137 138 } // namespace nw::snd 139 } // namespace nw 140 141 142 #endif /* NW_SND_FX_BASE_H_ */ 143 144