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