1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     snd_Api.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  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   $Rev: 33675 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SND_API_H_
17 #define NN_SND_API_H_
18 
19 #include <nn/Result.h>
20 #include <nn/snd/CTR/Common/snd_Types.h>
21 #include <nn/snd/CTR/MPCore/snd_Voice.h>
22 #include <nn/snd/CTR/MPCore/snd_OutputCapture.h>
23 #include <nn/snd/CTR/MPCore/snd_FxDelay.h>
24 #include <nn/snd/CTR/MPCore/snd_FxReverb.h>
25 
26 #ifdef __cplusplus
27 
28 /*! @file
29     @brief      サウンド(SND)に関する API の宣言
30 */
31 
32 namespace nn  { namespace snd { namespace CTR {
33 
34 /*!
35     @brief      1 サウンドフレームあたりの DSP のサイクル数の最大値です。
36 */
37 static const s32 NN_SND_DSP_MAXIMUM_CYCLES = 622535;
38 
39 
40 /*!
41   @name     Initialize/Finalize
42 
43   @{
44 */
45 /*!
46     @brief      サウンドライブラリの初期化処理を行います。
47 
48                 @ref nn::dsp::Initialize() によりDSP プロセスとのセッション確立後に使用できます。
49 
50     @return     処理の結果が返ってきます。<BR>
51                   LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS・・・成功しました。
52 */
53 nn::Result Initialize();
54 
55 /*!
56     @brief      サウンドライブラリの終了処理を行います。
57 
58     @return     処理の結果が返ってきます。<BR>
59                   LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS・・・成功しました。
60 */
61 nn::Result Finalize();
62 
63 /*!
64     @brief      バッファ情報構造体の初期化を行います。
65 
66                 @ref nn::snd::Voice::AppendWaveBuffer を呼び出す前に、本関数で構造体を初期化して下さい。
67 
68     @param[in]  pWaveBuffer   バッファ情報構造体へのポインタ
69     @return     なし。
70 */
71 void InitializeWaveBuffer(WaveBuffer * pWaveBuffer);
72 
73 /*! :private
74     @brief      サウンドスレッドを作成します。
75  */
76 nn::Result StartSoundThread(
77     void (*callback)(uptr),
78     uptr arg,
79     uptr stackBuffer,
80     size_t stackSize,
81     s32 prio,
82     s32 coreNo = NN_OS_CORE_NO_USE_PROCESS_VALUE
83 );
84 
85 /*! :private
86     @brief      ユーザーサウンドスレッドを作成します。
87  */
88 nn::Result StartUserSoundThread(uptr stackBuffer, size_t stackSize, s32 prio);
89 
90 /*! :private
91     @brief      サウンドスレッドを作成します。
92  */
93 nn::Result StartSoundThread(
94     const ThreadParameter* mainThreadParam,
95     void                   (*mainThreadCallback)(uptr),
96     uptr                   mainThreadArg,
97     const ThreadParameter* userThreadParam,
98     void                   (*userThreadCallback)(uptr),
99     uptr                   userThreadArg,
100     s32                    coreNo
101 );
102 
103 /*! :private
104     @brief      StartSoundThread で作成したサウンドスレッドを終了します。
105  */
106 void FinalizeSoundThread();
107 
108 /*! :private
109     @brief      StartUserSoundThread で作成したユーザーサウンドスレッドを終了します。
110  */
FinalizeUserSoundThread()111 inline void FinalizeUserSoundThread() {}
112 
113 /*! :private
114     @brief      サウンドフレームの処理負荷を有効 / 無効にします。
115 
116                 デフォルトは無効です。
117 
118     @param[in]  enable      true なら有効、false なら無効
119  */
120 void EnableSoundThreadTickCounter(bool enable);
121 
122 /*! :private
123     @brief      StartSoundThread で作成したサウンドスレッドの、1 サウンドフレームあたりの処理負荷を取得します。
124 
125                 コールバック内で呼び出した場合は、ひとつ前のサウンドフレームの処理負荷が得られます。
126  */
127 nn::os::Tick GetSoundThreadTick();
128 
129 /*! :private
130     @brief      StartSoundThread で作ったサウンドスレッドとの排他制御のためのロックを行います。
131  */
132 void LockSoundThread();
133 
134 /*! :private
135     @brief      StartSoundThread で作ったサウンドスレッドとの排他制御のためのロックを解除します。
136  */
137 void UnlockSoundThread();
138 
139 /*! :private
140     @brief      自動 UpdateCommand の設定を行います。
141     @param[in]  autoUpdateCommand   true なら自動アップデート
142  */
143 void SetAutoUpdateCommand(bool autoUpdateCommand);
144 
145 // TORIAEZU: CTR-SDK 0.14 を NintendoWare 1.1.1 と組み合わせて使用するための暫定措置
EnableAuxBusProcessingOnCore1(bool)146 inline void EnableAuxBusProcessingOnCore1(bool /*enable*/) {}
EnableSoundThreadCallbackOnCore1(bool)147 inline void EnableSoundThreadCallbackOnCore1(bool /*enable*/) {}
EnableVoiceDropCallbackOnCore1(bool)148 inline void EnableVoiceDropCallbackOnCore1(bool /*enable*/) {}
149 
150 /*!
151   @}
152 */
153 
154 /*!
155   @name     キャッシュ操作
156 
157   @{
158 */
159 /*!
160     @brief      指定された範囲のデータをキャッシュからメモリに書き戻し、キャッシュを無効にします。
161 
162                 動作は @ref nn::dsp::CTR::FlushDataCache と同じです。
163 
164     @param[in]  addr          メモリアドレス
165     @param[in]  size          メモリサイズ
166     @return     処理の結果が返ります。<BR>
167                 LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS・・・成功しました。<BR>
168                 LEVEL_STATUS:SUMMARY_INVALID_STATE:MODULE_NN_DSP:DESCRIPTION_NOT_INITIALIZED・・・DSP ライブラリが初期化されていません。<BR>
169 */
170 nn::Result FlushDataCache( uptr addr, size_t size );
171 
172 /*! :private
173     @brief      指定された範囲のキャッシュを無効にします。
174 
175                 動作は @ref nn::dsp::CTR::InvalidateDataCache と同じです。
176 
177     @param[in]  addr          メモリアドレス
178     @param[in]  size          メモリサイズ
179       @return   処理の結果が返ります。<BR>
180                 LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS・・・成功しました。<BR>
181                 LEVEL_STATUS:SUMMARY_INVALID_STATE:MODULE_NN_DSP:DESCRIPTION_NOT_INITIALIZED・・・DSP ライブラリが初期化されていません。<BR>
182 */
183 nn::Result InvalidateDataCache( uptr addr, size_t size );
184 
185 /*!
186   @}
187 */
188 
189 /*!
190   @name     同期処理
191 
192   @{
193 */
194 
195 /*!
196     @brief      DSP で処理を行った結果を受信します。
197 
198                 サウンドフレームイベントが発生するまで待機します。
199                 シグナルが通知された後、DSP からのデータを受信します。
200 
201                 本関数は snd ライブラリが内部に持つ @ref nn::os::Event
202                 オブジェクトによりイベント待機を行います。
203 
204     @return     なし。
205 */
206 void WaitForDspSync();
207 
208 /*! :private
209     @brief      DSP で処理を行った結果を受信し、受信に要した処理時間を取得します。
210 
211                 サウンドフレームイベントが発生するまで待機します。
212                 シグナルが通知された後、DSP からのデータを受信します。
213 
214                 本関数は snd ライブラリが内部に持つ @ref nn::os::Event
215                 オブジェクトによりイベント待機を行います。
216 
217     @param[out] pTick         内部の Wait 以外の処理に要したサイクル数
218     @return     なし。
219 */
220 void WaitForDspSync(nn::os::Tick* pTick);
221 
222 /*!
223     @brief      設定されたパラメータをDSP に反映します。
224 
225     @return     なし。
226 */
227 void SendParameterToDsp();
228 
229 /*! :private
230     @brief      必要であれば内部で UpdateCommand を実行し、設定されたパラメータを DSP に反映します。
231     @param[in]  autoUpdateCommand   true なら内部で UpdateCommand を実行します。
232  */
233 void SendParameterToDsp(bool autoUpdateCommand);
234 
235 /*! :private
236     @brief      発行したコマンドを DSP へ送信します。
237  */
238 void UpdateCommand();
239 
240 /*!
241   @}
242 */
243 
244 /*!
245   @brief        サンプルの長さを取得します。
246 
247   @param[in]    size          サイズ(バイト単位)
248   @param[in]    format        形式
249   @param[in]    channelCount  チャンネル数
250   @return       サンプルの長さを返します。
251 */
252 s32 GetSampleLength( s32 size, SampleFormat format, s32 channelCount ) ;
253 
254 /*!
255     @name       マスター操作、Aux バス操作
256     @{
257  */
258 /*!
259     @brief      マスターボリュームを設定します。
260 
261     @param[in]  volume        マスターボリューム(1.0 が等倍)
262     @return     なし。
263 */
264 void SetMasterVolume ( f32 volume );
265 
266 /*!
267     @brief      Aux バスボリュームを設定します。
268 
269                 等倍は 1.0 です。
270 
271                 デフォルト値は 1.0 です。
272 
273     @param[in]  busId         バスの ID
274     @param[in]  volume        エフェクト 0 バスボリューム(1.0 が等倍)
275     @return     なし。
276 */
277 void SetAuxReturnVolume ( AuxBusId busId, f32 volume );
278 
279 /*!
280     @brief      Aux バスボリュームを取得します。
281 
282                 等倍は 1.0 です。
283 
284                 デフォルト値は 1.0 です。
285 
286     @param[in]  busId         バスの ID
287     @return     バスボリューム。
288 */
289 f32 GetAuxReturnVolume ( AuxBusId busId ) ;
290 
291 /*!
292     @brief      Aux バスのコールバック関数を設定します。
293 
294     @param[in]  busId         バスの ID
295     @param[in]  callback      コールバック関数
296     @param[in]  userData      ユーザ定義データ
297     @return     なし。
298 */
299 void RegisterAuxCallback( AuxBusId busId, AuxCallback callback, uptr userData );
300 
301 /*!
302     @brief      Aux バスのコールバック関数を取得します。
303 
304     @param[in]  busId         バスの ID
305     @param[out] pCallback     コールバック関数の格納先
306     @param[out] pUserData     ユーザ定義データの格納先
307     @return     なし。
308 */
309 void GetAuxCallback( AuxBusId busId, AuxCallback* pCallback, uptr* pUserData );
310 
311 /*!
312     @brief      Aux バスのコールバック関数を解除します。
313 
314     @param[in]  busId         バスの ID
315     @return     なし。
316 */
317 void ClearAuxCallback( AuxBusId busId );
318 
319 /*!
320     @brief      Aux バスのフロントバイパスを設定します。
321     @param[in]  busId         バスの ID
322     @param[in]  flag          フロントバイパスの有効 / 無効フラグ
323     @return     設定に成功すれば true を、失敗すれば false を返します。
324  */
325 bool SetAuxFrontBypass(AuxBusId busId, bool flag);
326 /*!
327     @}
328  */
329 
330 /*!
331   @name     3D サラウンド
332   @{
333  */
334 /*!
335     @brief      サウンド出力モードを設定します。
336 
337     @param[in]  mode          サウンド出力モード
338     @return     設定に成功すれば true を、失敗すれば false を返します。
339  */
340 bool SetSoundOutputMode(OutputMode mode);
341 
342 /*!
343     @brief      サウンド出力モードを取得します。
344 
345     @return     サウンド出力モード
346  */
347 OutputMode GetSoundOutputMode();
348 
349 /*!
350   @brief        クリッピングモードを設定します。
351   @param[in]    mode          モード
352   @return       設定に成功すれば true を、失敗すれば false を返します。
353 */
354 bool SetClippingMode(ClippingMode mode);
355 
356 /*!
357   @brief        クリッピングモードを取得します。
358   @return       モード
359 */
360 ClippingMode GetClippingMode();
361 
362 /*! :private
363     @brief      ミックス時のリア成分への重みを設定します。サラウンドモードでは無視されます。
364 
365     @param[in]  depth         重み (0 以上 1 以下の値でなければなりません)
366     @return     設定に成功すれば true を、失敗すれば false を返します。
367  */
368 bool SetRearRatio(f32 depth);
369 
370 /*!
371     @brief      サラウンドデプスを設定します。
372 
373                 サラウンドデプスは、スピーカー出力時の 3D サラウンドの効果の大小を
374                 表すパラメータです。値が大きい程、効果が大きくなります。
375                 サラウンドデプスはヘッドフォン出力時の効果には影響しません。
376 
377                 デフォルト値は 1.0f です。
378 
379     @param[in]  depth         サラウンドデプス(0 &lt;= depth &lt;= 1.0f)
380     @return     設定に成功すれば true を、失敗すれば false を返します。
381  */
382 bool SetSurroundDepth(f32 depth);
383 
384 /*!
385     @brief      3D サラウンドの仮想スピーカー位置を設定します。
386 
387     @param[in]  pos           仮想スピーカー位置
388     @return     設定に成功すれば true を、失敗すれば false を返します。
389  */
390 bool SetSurroundSpeakerPosition(SurroundSpeakerPosition pos);
391 
392 /*! :private
393     @brief      3D サラウンド用空間フィルタを設定します。
394 
395     @param[in]  pSrc          フィルタ係数バッファアドレス
396     @param[in]  nCoeffs       フィルタのタップ数
397     @return     設定に成功すれば true を、失敗すれば false を返します。
398  */
399 bool SetSurroundSpacialFilter(s16* pSrc, s32 nCoeffs);
400 
401 /*! :private
402     @brief      3D サラウンド用方向フィルタを設定します。
403 
404     @param[in]  pSrc          フィルタ係数バッファアドレス
405     @param[in]  nCoeffs       フィルタのタップ数
406     @param[in]  mode          モード(NN_SND_DEBUG_3DS_SPEAKER / NN_SND_DEBUG_3DS_HEADPHONE のいずれか)
407     @return     設定に成功すれば true を、失敗すれば false を返します。
408  */
409 bool SetSurroundDirectionFilter(s16* pSrc, s32 nCoeffs, s32 mode);
410 
411 /*! :private
412     @brief      3D サラウンド用 IIR フィルタを設定します。
413 
414     @param[in]  pSrc          フィルタ係数バッファアドレス
415     @param[in]  nCoeffs       フィルタのタップ数
416     @param[in]  mode          モード(NN_SND_DEBUG_3DS_SPEAKER / NN_SND_DEBUG_3DS_HEADPHONE のいずれか)
417     @return     設定に成功すれば true を、失敗すれば false を返します。
418  */
419 bool SetSurroundIirFilterCoeffs(s32* pSrc, s32 nCoeffs, s32 mode);
420 
421 /*! :private
422     @brief      3D サラウンド用 IIR フィルタの On/Off を設定します。
423 
424     @param[in]  flag          true なら On, false なら Off
425     @return     設定に成功すれば true を、失敗すれば false を返します。
426  */
427 bool SetSurroundIirFilterFlag(bool flag);
428 
429 /*!
430   @}
431  */
432 
433 /*!
434     @brief      サウンドが使用できるDSP サイクル数を設定します。
435 
436                 初期状態ではNN_SND_DSP_MAXIMUM_CYCLES が設定されています。
437                 NN_SND_DSP_MAXIMUM_CYCLES 以上の値が入力された場合は
438                 NN_SND_DSP_MAXIMUM_CYCLES が設定されます。
439 
440     @param[in]  cycles サイクル数
441     @return     なし。
442 */
443 void SetMaximumDspCycles( s32 cycles );
444 
445 /*!
446     @brief      サウンドに割り当てているDSP サイクル数を取得します。
447 
448     @return     サイクル数を返します。
449 */
450 s32 GetMaximumDspCycles();
451 
452 /*!
453     @brief      最後のオーディオフレーム作成でDSP が費やしたサイクル数を取得します。
454 
455     @return     DSP で消費したサイクル数を返します。
456 */
457 s32 GetDspCycles();
458 
459 /*! :private
460     @brief      snd 処理を一時中断し、終了処理を行います。
461  */
462 void Sleep();
463 
464 /*! :private
465     @brief      一時中断した snd の処理を復元します。
466  */
467 void WakeUp();
468 
469 /*! :private
470     @brief      終了処理のための準備を行います。
471  */
472 void OrderToWaitForFinalize();
473 
474 /*!
475     @brief      ヘッドホンの挿入状態を取得します。
476     @return     挿入されている場合は true を返します。
477  */
478 bool GetHeadphoneStatus();
479 
480 /*!
481     @brief      ヘッドホンの挿入状態を更新し、取得します。
482     @return     挿入されている場合は true を返します。
483  */
484 bool UpdateHeadphoneStatus();
485 
486 /*! :private
487     @brief      蓋閉じ時に強制的にヘッドフォン出力にするかどうかを設定します。
488     @param[in]  forceout        true なら強制ヘッドフォン出力とします。
489     @return     処理の結果が返ります。
490  */
SetHeadphoneOutOnShellClose(bool forceout)491 inline Result SetHeadphoneOutOnShellClose(bool forceout)
492 {
493     return dsp::ForceHeadphoneOut(forceout);
494 }
495 
496 /*!
497     @name       DSP 最終出力取得
498     @{
499  */
500 /*!
501     @brief      Mix バスデータを指定のバッファにコピーします。
502     @param[out] pData               Mix バスデータの内容をコピーするバッファアドレス
503     @param[in]  nSamplesPerFrame    チャンネルあたりのサンプル数(通常は NN_SND_SAMPLES_PER_FRAME を指定します)
504     @return     データ取得に成功すれば true を、失敗すれば false を返します。
505  */
506 bool GetMixedBusData(s16* pData, s32 nSamplesPerFrame = NN_SND_SAMPLES_PER_FRAME);
507 /*!
508     @}
509  */
510 
511 /*!
512     @name       処理落ち検出
513     @{
514  */
515 /*!
516     @brief      処理落ちしたサウンドフレームの数を取得します。
517     @return     処理落ちしたサウンドフレームの数を返します。
518  */
519 s32 GetDroppedSoundFrameCount();
520 
521 /*!
522     @brief      処理落ちしたサウンドフレームの数を初期化します。
523  */
524 void ClearDroppedSoundFrameCount();
525 
526 /*!
527     @}
528  */
529 
530 /*!
531   @name     DSP-ADPCM 関連
532   @{
533  */
534 /*!
535   @brief        16bit PCM データを DSP-ADPCM フォーマットにエンコードします。
536 
537   @param[in]    pInput        入力バッファアドレス
538   @param[out]   pOutput       出力バッファアドレス(4 バイトアラインされている必要があります)
539   @param[in]    nSamples      入力サンプル数
540   @param[in]    sampleRate    サンプル周波数
541   @param[in]    loopStart     ループ開始サンプル位置(0 オリジン)
542   @param[in]    loopEnd       ループ終了サンプル位置(0 オリジン)
543   @param[out]   pInfo         ヘッダ構造体アドレス
544   @return       なし
545  */
546 s32 EncodeAdpcmData(s16* pInput, u8* pOutput, s32 nSamples, s32 sampleRate, s32 loopStart, s32 loopEnd, DspsndAdpcmHeader* pInfo);
547 
548 /*!
549   @brief        DSP-ADPCM データをデコードします。
550 
551   @param[in]    pInput        入力バッファアドレス
552   @param[out]   pOutput       出力バッファアドレス
553   @param[in]    param         ADPCM パラメータ
554   @param[in]    context       ADPCM コンテキスト
555   @param[in]    nSamples      入力サンプル数
556  */
557 void DecodeAdpcmData(u8* pInput, s16* pOutput, AdpcmParam& param, AdpcmContext& context, s32 nSamples);
558 
559 /*!
560   @brief        エンコード時に必要な出力バッファのサイズを返します。
561 
562   @param[in]    nSamples      入力サンプル数
563   @return       出力バッファのサイズ
564  */
565 s32 GetAdpcmOutputBufferSize(s32 nSamples);
566 
567 /*!
568   @brief        サンプル位置をニブル数に変換します。
569 
570   @param[in]    nPos          サンプル位置
571   @return                     ニブル数
572  */
573 u32 ConvertAdpcmPos2Nib(u32 nPos);
574 /*!
575   @brief        ニブル数をサンプル位置に変換します。
576 
577   @param[in]    nNib          ニブル数
578   @return                     サンプル位置
579  */
580 u32 ConvertAdpcmNib2Pos(u32 nNib);
581 /*!
582   @}
583  */
584 
585 /*!
586   @name     エフェクト
587 
588   @{
589 */
590 
591 /*!
592   @brief        ディレイエフェクトを設定します。
593 
594                 AUX から出力されるデータを加工するには、
595                 自前の加工処理関数を @ref RegisterAuxCallback で設定するほか、
596                 本関数を用いて、ディレイやリバーブのエフェクトをかけることができます。
597 
598                 ディレイ (@ref FxDelay) やリバーブ (@ref FxReverb) は、
599                 各バスにどちらか 1 つしか設定できないことに注意してください。
600 
601                 1 つ以上設定すると、後から設定したものが有効になります。
602                 もともと設定されていたエフェクトは解除されます。
603 
604                 @ref ClearEffect を呼び出したり、
605                 上記のようにもともと設定されていて解除された場合は、
606                 @ref FxDelay::ReleaseWorkBuffer
607                 や @ref FxReverb::ReleaseWorkBuffer で、
608                 当該エフェクトで使用していたメモリを解放することができます。
609 
610                 本関数を呼び出す前に、@ref FxDelay クラスの、
611                 @ref FxDelay::SetParam, @ref FxDelay::GetRequiredMemSize,
612                 @ref FxDelay::AssignWorkBuffer を呼び出し、
613                 ディレイエフェクトの準備を済ませておく必要があります。
614 
615   @param[in]    busId         バスの ID
616   @param[in]    fx            設定するディレイエフェクト
617 
618   @return                     設定に成功したら true を返します。
619                               fx が NULL の場合、設定に失敗し false を返します。
620 
621   @see ClearEffect
622   @see RegisterAuxCallback
623   @see FxDelay クラス
624   @see FxReverb クラス
625   @date 2010/10/20 初版
626  */
627 bool SetEffect(AuxBusId busId, FxDelay* fx);
628 
629 /*!
630   @brief        リバーブエフェクトを設定します。
631 
632                 AUX から出力されるデータを加工するには、
633                 自前の加工処理関数を @ref RegisterAuxCallback で設定するほか、
634                 本関数を用いて、ディレイやリバーブのエフェクトをかけることができます。
635 
636                 ディレイ (@ref FxDelay) やリバーブ (@ref FxReverb) は、
637                 各バスにどちらか 1 つしか設定できないことに注意してください。
638 
639                 1 つ以上設定すると、後から設定したものが有効になります。
640                 もともと設定されていたエフェクトは解除されます。
641 
642                 @ref ClearEffect を呼び出したり、
643                 上記のようにもともと設定されていて解除された場合は、
644                 @ref FxDelay::ReleaseWorkBuffer
645                 や @ref FxReverb::ReleaseWorkBuffer で、
646                 当該エフェクトで使用していたメモリを解放することができます。
647 
648                 本関数を呼び出す前に、@ref FxReverb クラスの、
649                 @ref FxReverb::SetParam, @ref FxReverb::GetRequiredMemSize,
650                 @ref FxReverb::AssignWorkBuffer を呼び出し、
651                 ディレイエフェクトの準備を済ませておく必要があります。
652 
653 
654   @param[in]    busId         バスの ID
655   @param[in]    fx            設定するリバーブエフェクト
656 
657   @return                     設定に成功したら true を返します。
658                               fx が NULL の場合、設定に失敗し false を返します。
659   @see ClearEffect
660   @see RegisterAuxCallback
661   @see FxReverb クラス
662   @see FxDelay クラス
663 
664   @date 2010/10/20 初版
665  */
666 bool SetEffect(AuxBusId busId, FxReverb* fx);
667 
668 /*!
669   @brief        エフェクトの設定を解除します。
670 
671                 @ref SetEffect 関数で設定したエフェクトを解除します。
672 
673                 @ref RegisterAuxCallback で設定したコールバックは解除されません
674                 (これは @ref ClearAuxCallback で解除することができます)。
675 
676 
677   @param[in]    busId         バスの ID
678 
679   @see SetEffect
680   @see RegisterAuxCallback
681   @see ClearAuxCallback
682 
683   @date 2010/10/20 初版
684  */
685 void ClearEffect(AuxBusId busId);
686 
687 /*!
688   @}
689  */
690 
691 void UseOldSystem(bool enable = true);
692 
693 }}} // namespace nn::snd::CTR
694 
695 #endif // __cplusplus
696 
697 // 以下、C 用宣言
698 /*!
699     @addtogroup   nn_snd   snd
700 
701     @{
702 */
703 
704 /*!
705 @brief      対応する C++ 関数 @ref nn::snd::CTR::Initialize を参照してください。
706 */
707 NN_EXTERN_C nnResult nnsndInitialize();
708 
709 /*!
710     @}
711 */
712 
713 #endif //NN_SND_API_H_
714