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