1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     snd_FxDelay.h
4   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Rev: $
11  *---------------------------------------------------------------------------
12 
13 
14 */
15 
16 #ifndef NN_SND_FX_DELAY_H_
17 #define NN_SND_FX_DELAY_H_
18 
19 #ifdef __cplusplus
20 
21 namespace nn  { namespace snd { namespace CTR {
22 
23 //---------------------------------------------------------------------------
24 //
25 //!
26 //
27 //!
28 //
29 //!
30 //
31 //
32 //
33 //!
34 //
35 //!
36 //
37 //---------------------------------------------------------------------------
38 class FxDelay
39 {
40 public:
41     //---------------------------------------------------------------------------
42     //
43     //!
44     //
45     //
46     //
47     //
48     //
49     //
50     //!
51     //
52     //
53     //
54     //
55     //
56     //!
57     //
58     //
59     //
60     //
61     //
62     //!
63     //
64     //
65     //
66     //
67     //
68     //
69     //!
70     //
71     //!
72     //
73     //
74     //
75     //!
76     //
77     //
78     //
79     //
80     //---------------------------------------------------------------------------
81     struct Param
82     {
83         //
84         u32 m_DelayTime;
85 
86         //
87         f32 m_FeedbackGain;
88 
89         //
90         f32 m_Damping;
91 
92         //
93         bool m_IsEnableSurround;
94 
95         NN_PADDING3;
96 
97         //---------------------------------------------------------------------------
98         //
99         //!
100         //
101         //
102         //---------------------------------------------------------------------------
ParamParam103         Param()
104         : m_DelayTime( 250 ),
105           m_FeedbackGain( 0.4f ),
106           m_Damping( 0.5f ),
107           m_IsEnableSurround( false )
108           {}
109     };
110 
111     //----------------------------------------------------------------
112     //
113     //----------------------------------------------------------------
114     //@{
115     //---------------------------------------------------------------------------
116     //
117     //!
118     //
119     //---------------------------------------------------------------------------
120     FxDelay();
121 
122     //---------------------------------------------------------------------------
123     //
124     //!
125     //
126     //---------------------------------------------------------------------------
127     virtual ~FxDelay();
128     //@}
129 
130     //----------------------------------------------------------------
131     //
132     //----------------------------------------------------------------
133     //@{
134     //---------------------------------------------------------------------------
135     //
136     //!
137     //
138     //
139     //!
140     //
141     //!
142     //
143     //!
144     //
145     //
146     //
147     //
148     //
149     //
150     //
151     //
152     //
153     //
154     //
155     //
156     //
157     //
158     //
159     //
160     //!
161     //
162     //!
163     //
164     //
165     //!
166     //
167     //
168     //
169     //!
170     //
171     //
172     //---------------------------------------------------------------------------
173     bool SetParam( const FxDelay::Param& param );
174 
175     //---------------------------------------------------------------------------
176     //
177     //!
178     //
179     //!
180     //
181     //!
182     //
183     //---------------------------------------------------------------------------
GetParam()184     const Param& GetParam() const
185     {
186         return m_Param;
187     }
188     //@}
189 
190     //----------------------------------------
191     //
192     //@{
193     //---------------------------------------------------------------------------
194     //
195     //!
196     //
197     //
198     //!
199     //
200     //!
201     //
202     //!
203     //
204     //---------------------------------------------------------------------------
205     size_t GetRequiredMemSize();
206 
207     //---------------------------------------------------------------------------
208     //
209     //!
210     //
211     //
212     //!
213     //
214     //
215     //!
216     //
217     //
218     //!
219     //
220     //
221     //!
222     //
223     //
224     //
225     //!
226     //
227     //---------------------------------------------------------------------------
228     bool AssignWorkBuffer( uptr buffer, size_t size );
229 
230     //---------------------------------------------------------------------------
231     //
232     //!
233     //
234     //
235     //!
236     //
237     //
238     //!
239     //
240     //
241     //---------------------------------------------------------------------------
242     void ReleaseWorkBuffer();
243     //@}
244 
245     /* Please see man pages for details */
246     bool Initialize();
247 
248     /* Please see man pages for details */
249     void Finalize();
250 
251     /* Please see man pages for details */
252     void UpdateBuffer( uptr data );
253 
254 
255 private:
256     struct WorkBuffer
257     {
258         s32* m_Delay[4];      //
259         s32  m_Lpf[4];        //
260     };
261 
262     void AllocBuffer();
263     void FreeBuffer();
264     void InitializeParam();
265 
266     Param   m_Param;
267     uptr    m_pBuffer;            //
268     size_t  m_BufferSize;        //
269 
270     WorkBuffer  m_WorkBuffer;    //
271 
272     u32     m_DelayFrames;       //
273     u32     m_CurFrame;          //
274 
275     s32     m_FeedbackGain;      //
276     s32     m_LpfCoef1;          //
277     s32     m_LpfCoef2;          //
278 
279     u32     m_DelayTimeAtInitialize;
280     bool    m_IsEnableSurroundAtInitialize;
281 
282     u8      m_ProcessChannelCount;
283     bool    m_IsActive;          //
284 
285     NN_PADDING1;
286 };
287 
288 }}} // namespace nn::snd::CTR
289 
290 #endif // __cplusplus
291 
292 #endif /* NN_SND_FX_DELAY_H_ */
293 
294