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: 38709 $
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 /* Please see man pages for details
29
30 */
31
32 namespace nn { namespace snd { namespace CTR {
33
34 /* Please see man pages for details
35
36 */
37 static const s32 NN_SND_DSP_MAXIMUM_CYCLES = 622535;
38
39
40 /* Please see man pages for details
41
42
43 */
44 /* Please see man pages for details
45
46
47
48
49
50
51
52
53
54 */
55 nn::Result Initialize();
56
57 /* Please see man pages for details
58
59
60
61
62 */
63 nn::Result Finalize();
64
65 /* Please see man pages for details
66
67
68
69
70
71 */
72 void InitializeWaveBuffer(WaveBuffer * pWaveBuffer);
73
74 /* Please see man pages for details
75
76 */
77 nn::Result StartSoundThread(
78 void (*callback)(uptr),
79 uptr arg,
80 uptr stackBuffer,
81 size_t stackSize,
82 s32 prio,
83 s32 coreNo = NN_OS_CORE_NO_USE_PROCESS_VALUE
84 );
85
86 /* Please see man pages for details
87
88 */
89 nn::Result StartUserSoundThread(uptr stackBuffer, size_t stackSize, s32 prio);
90
91 /* Please see man pages for details
92
93 */
94 nn::Result StartSoundThread(
95 const ThreadParameter* mainThreadParam,
96 void (*mainThreadCallback)(uptr),
97 uptr mainThreadArg,
98 const ThreadParameter* userThreadParam,
99 void (*userThreadCallback)(uptr),
100 uptr userThreadArg,
101 s32 coreNo
102 );
103
104 /* Please see man pages for details
105
106 */
107 void FinalizeSoundThread();
108
109 /* Please see man pages for details
110
111 */
FinalizeUserSoundThread()112 inline void FinalizeUserSoundThread() {}
113
114 /* Please see man pages for details
115
116
117
118
119
120 */
121 void EnableSoundThreadTickCounter(bool enable);
122
123 /* Please see man pages for details
124
125
126
127 */
128 nn::os::Tick GetSoundThreadTick();
129
130 /* Please see man pages for details
131
132 */
133 void LockSoundThread();
134
135 /* Please see man pages for details
136
137 */
138 void UnlockSoundThread();
139
140 /* Please see man pages for details
141
142
143 */
144 void SetAutoUpdateCommand(bool autoUpdateCommand);
145
146 /*
147
148 */
149
150 /* Please see man pages for details
151
152
153
154 */
155 /* Please see man pages for details
156
157
158
159
160
161
162
163 */
164 nn::Result FlushDataCache( uptr addr, size_t size );
165
166 /* Please see man pages for details
167
168
169
170
171
172
173
174 */
175 nn::Result InvalidateDataCache( uptr addr, size_t size );
176
177 /*
178
179 */
180
181 /* Please see man pages for details
182
183
184
185 */
186
187 /* Please see man pages for details
188
189 */
190 void WaitForDspSync();
191
192 /* Please see man pages for details
193
194
195 */
196 void WaitForDspSync(nn::os::Tick* pTick);
197
198 /* Please see man pages for details
199
200 */
201 void SendParameterToDsp();
202
203 /* Please see man pages for details
204
205
206 */
207 void SendParameterToDsp(bool autoUpdateCommand);
208
209 /* Please see man pages for details
210
211 */
212 void UpdateCommand();
213
214 /*
215
216 */
217
218 /* Please see man pages for details
219
220
221
222
223
224
225 */
226 s32 GetSampleLength( s32 size, SampleFormat format, s32 channelCount ) ;
227
228 /* Please see man pages for details
229
230
231 */
232 /* Please see man pages for details
233
234
235
236 */
237 void SetMasterVolume ( f32 volume );
238
239 /* Please see man pages for details
240
241
242
243
244
245
246
247
248 */
249 void SetAuxReturnVolume ( AuxBusId busId, f32 volume );
250
251 /* Please see man pages for details
252
253
254
255
256
257
258
259
260 */
261 f32 GetAuxReturnVolume ( AuxBusId busId ) ;
262
263 /* Please see man pages for details
264
265
266
267
268
269 */
270 void RegisterAuxCallback( AuxBusId busId, AuxCallback callback, uptr userData );
271
272 /* Please see man pages for details
273
274
275
276
277
278 */
279 void GetAuxCallback( AuxBusId busId, AuxCallback* pCallback, uptr* pUserData );
280
281 /* Please see man pages for details
282
283
284
285 */
286 void ClearAuxCallback( AuxBusId busId );
287
288 /* Please see man pages for details
289
290
291
292
293 */
294 bool SetAuxFrontBypass(AuxBusId busId, bool flag);
295 /*
296
297 */
298
299 /* Please see man pages for details
300
301
302 */
303 /* Please see man pages for details
304
305
306
307
308 */
309 bool SetSoundOutputMode(OutputMode mode);
310
311 /* Please see man pages for details
312
313
314
315 */
316 OutputMode GetSoundOutputMode();
317
318 /* Please see man pages for details
319
320
321
322 */
323 bool SetClippingMode(ClippingMode mode);
324
325 /* Please see man pages for details
326
327
328 */
329 ClippingMode GetClippingMode();
330
331 /* Please see man pages for details
332
333
334
335
336 */
337 bool SetRearRatio(f32 depth);
338
339 /* Please see man pages for details
340
341
342
343
344
345
346
347
348
349
350 */
351 bool SetSurroundDepth(f32 depth);
352
353 /* Please see man pages for details
354
355
356
357
358 */
359 bool SetSurroundSpeakerPosition(SurroundSpeakerPosition pos);
360
361 /* Please see man pages for details
362
363
364
365
366
367 */
368 bool SetSurroundSpacialFilter(s16* pSrc, s32 nCoeffs);
369
370 /* Please see man pages for details
371
372
373
374
375
376
377 */
378 bool SetSurroundDirectionFilter(s16* pSrc, s32 nCoeffs, s32 mode);
379
380 /* Please see man pages for details
381
382
383
384
385
386
387 */
388 bool SetSurroundIirFilterCoeffs(s32* pSrc, s32 nCoeffs, s32 mode);
389
390 /* Please see man pages for details
391
392
393
394
395 */
396 bool SetSurroundIirFilterFlag(bool flag);
397
398 /*
399
400 */
401
402 /* Please see man pages for details
403
404
405
406
407
408
409
410 */
411 void SetMaximumDspCycles( s32 cycles );
412
413 /* Please see man pages for details
414
415
416
417 */
418 s32 GetMaximumDspCycles();
419
420 /* Please see man pages for details
421
422
423
424 */
425 s32 GetDspCycles();
426
427 /* Please see man pages for details
428
429 */
430 void Sleep();
431
432 /* Please see man pages for details
433
434 */
435 void WakeUp();
436
437 /* Please see man pages for details
438
439 */
440 void OrderToWaitForFinalize();
441
442 /* Please see man pages for details
443
444
445 */
446 bool GetHeadphoneStatus();
447
448 /* Please see man pages for details
449
450
451 */
452 bool UpdateHeadphoneStatus();
453
454 /* Please see man pages for details
455
456
457
458 */
SetHeadphoneOutOnShellClose(bool forceout)459 inline Result SetHeadphoneOutOnShellClose(bool forceout)
460 {
461 return dsp::ForceHeadphoneOut(forceout);
462 }
463
464 /* Please see man pages for details
465
466
467 */
468 /* Please see man pages for details
469
470
471
472
473 */
474 bool GetMixedBusData(s16* pData, s32 nSamplesPerFrame = NN_SND_SAMPLES_PER_FRAME);
475 /*
476
477 */
478
479 /* Please see man pages for details
480
481
482 */
483 /* Please see man pages for details
484
485
486 */
487 s32 GetDroppedSoundFrameCount();
488
489 /* Please see man pages for details
490
491 */
492 void ClearDroppedSoundFrameCount();
493
494 /*
495
496 */
497
498 /* Please see man pages for details
499
500
501 */
502 /* Please see man pages for details
503
504
505
506
507
508
509
510
511
512
513 */
514 void EncodeAdpcmData(s16* pInput, u8* pOutput, s32 nSamples, s32 sampleRate, s32 loopStart, s32 loopEnd, DspsndAdpcmHeader* pInfo);
515
516 /* Please see man pages for details
517
518
519
520
521
522
523
524 */
525 void DecodeAdpcmData(const u8* pInput, s16* pOutput, const AdpcmParam& param, AdpcmContext& context, s32 nSamples);
526
527 /* Please see man pages for details
528
529
530
531
532 */
533 s32 GetAdpcmOutputBufferSize(s32 nSamples);
534
535 /* Please see man pages for details
536
537
538
539
540 */
541 u32 ConvertAdpcmPos2Nib(u32 nPos);
542 /* Please see man pages for details
543
544
545
546
547 */
548 u32 ConvertAdpcmNib2Pos(u32 nNib);
549 /*
550
551 */
552
553 /* Please see man pages for details
554
555
556
557 */
558
559 /* Please see man pages for details
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596 */
597 bool SetEffect(AuxBusId busId, FxDelay* fx);
598
599 /* Please see man pages for details
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637 */
638 bool SetEffect(AuxBusId busId, FxReverb* fx);
639
640 /* Please see man pages for details
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656 */
657 void ClearEffect(AuxBusId busId);
658
659 /*
660
661 */
662
663 /* Please see man pages for details
664
665
666 */
667 void SetOutputBufferCount(s32 count);
668
669 }}} // namespace nn::snd::CTR
670
671 #endif // __cplusplus
672
673 // Below is the C declaration
674 /* Please see man pages for details
675
676
677
678 */
679
680 /* Please see man pages for details
681
682 */
683 NN_EXTERN_C nnResult nnsndInitialize();
684
685 /*
686
687 */
688
689 #endif //NN_SND_API_H_
690