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