Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
sfx_player.c File Reference

Go to the source code of this file.

Macros

#define SEC(x)   ((s32)(x * 1000000) / AU_5750 * AU_5750)
 
#define NEXT_CMD   trackCount--; if (trackCount <= 0 ) { break; } cmdList += 2;
 

Enumerations

enum  SoundEffectParamFlags {
  SFX_PARAM_MODE_ADVANCED = 0x00000000 , SFX_PARAM_MODE_SEQUENCE = 0x00000001 , SFX_PARAM_MODE_BASIC = 0x00000002 , SFX_PARAM_FLAG_MODE = 0x00000003 ,
  SFX_PARAM_FLAG_VOLUME = 0x00000004 , SFX_PARAM_FLAG_PAN = 0x00000008 , SFX_PARAM_FLAG_PITCH = 0x00000010 , SFX_PARAM_FLAG_FIXED_REVERB = 0x00000020
}
 

Functions

void au_sfx_init (SoundManager *manager, u8 priority, u8 busId, AuGlobals *globals, u8 minVoiceIdx)
 
void au_sfx_load_groups_from_SEF (SoundManager *manager)
 
void au_sfx_clear_queue (SoundManager *manager)
 
void au_sfx_enqueue_event (SoundManager *manager, u32 soundID, s16 volume, s16 pitchShift, u8 pan)
 
void au_sfx_update_main (SoundManager *manager)
 
s32 au_sfx_set_reverb_type (SoundManager *manager, s32 arg1)
 
void au_sfx_set_state (SoundManager *manager, s32 state)
 
void au_sfx_load_sound (SoundManager *manager, SoundSFXEntry *entry, SoundManagerCustomCmdList *customSEF)
 
s16 au_sfx_manager_update (SoundManager *manager)
 

Variables

u16 DummyInstrumentPredictor [32]
 
u8 DummyInstrumentBase [190]
 
s32 CUSTOM_SMALL_ROOM_PARAMS []
 
s32 CUSTOM_ECHO_PARAMS_1 []
 
s32 CUSTOM_ECHO_PARAMS_2 []
 
s32 CUSTOM_ECHO_PARAMS_3 []
 
AlUnkGemini D_80078370 []
 
EnvelopePreset SFXEnvelopeFast
 
u8 SFXEnvelopeFastData []
 
EnvelopePreset SFXEnvelopeSlow
 
u8 SFXEnvelopeSlowData []
 
s32 D_800783B0 []
 
EnvelopePresetSFXEnvelopePresets []
 
void(* SefCmdHandlers [])(SoundManager *, SoundPlayer *)
 
u8 BlankSEFData []
 
void(* SeqCmdHandlers [])(BGMPlayer *, BGMPlayerTrack *)
 
s8 SeqCmdArgCounts []
 
s8 BgmDivisors []
 
u8 BlankMseqData []
 
s16 D_80078530 []
 
EnvelopePreset DummyInstrumentEnvelope
 
u8 EnvelopePressDefault []
 
u8 EnvelopeReleaseDefault []
 
u8 EnvelopeReleaseDefaultFast []
 
s8 D_80078558 []
 
u8 AmbientSoundIDtoMSEQFileIndex []
 
s32 AuEnvelopeIntervals []
 
f32 AlTuneScaling []
 
s32 * AU_FX_CUSTOM_PARAMS [0]
 
void(* CurrentSefCmdHandler )(SoundManager *, SoundPlayer *)
 

Macro Definition Documentation

◆ SEC

#define SEC ( x)    ((s32)(x * 1000000) / AU_5750 * AU_5750)

Definition at line 339 of file sfx_player.c.

◆ NEXT_CMD

#define NEXT_CMD   trackCount--; if (trackCount <= 0 ) { break; } cmdList += 2;

Enumeration Type Documentation

◆ SoundEffectParamFlags

Enumerator
SFX_PARAM_MODE_ADVANCED 
SFX_PARAM_MODE_SEQUENCE 
SFX_PARAM_MODE_BASIC 
SFX_PARAM_FLAG_MODE 
SFX_PARAM_FLAG_VOLUME 
SFX_PARAM_FLAG_PAN 
SFX_PARAM_FLAG_PITCH 
SFX_PARAM_FLAG_FIXED_REVERB 

Definition at line 45 of file sfx_player.c.

45 {
46 // 8 bytes: flags, instrument, volume, pan, reverb, pitch, randomPitch
47 SFX_PARAM_MODE_ADVANCED = 0x00000000,
48 // arbitrary sequence of commands
49 SFX_PARAM_MODE_SEQUENCE = 0x00000001,
50 // 4 bytes: flags, instrument, volume and randomPitch
51 SFX_PARAM_MODE_BASIC = 0x00000002,
52 SFX_PARAM_FLAG_MODE = 0x00000003,
53 // when flags below are set, these params can't be changed from api functions like sfx_play_sound_with_params
54 SFX_PARAM_FLAG_VOLUME = 0x00000004,
55 SFX_PARAM_FLAG_PAN = 0x00000008,
56 SFX_PARAM_FLAG_PITCH = 0x00000010,
57 // prevents from changing reverb amount via SetReverb command
59};
@ SFX_PARAM_MODE_SEQUENCE
Definition sfx_player.c:49
@ SFX_PARAM_FLAG_FIXED_REVERB
Definition sfx_player.c:58
@ SFX_PARAM_FLAG_MODE
Definition sfx_player.c:52
@ SFX_PARAM_FLAG_PITCH
Definition sfx_player.c:56
@ SFX_PARAM_FLAG_PAN
Definition sfx_player.c:55
@ SFX_PARAM_MODE_ADVANCED
Definition sfx_player.c:47
@ SFX_PARAM_MODE_BASIC
Definition sfx_player.c:51
@ SFX_PARAM_FLAG_VOLUME
Definition sfx_player.c:54

Function Documentation

◆ au_sfx_init()

void au_sfx_init ( SoundManager * manager,
u8 priority,
u8 busId,
AuGlobals * globals,
u8 minVoiceIdx )

Definition at line 423 of file sfx_player.c.

423 {
424 u32 i;
425 s32 c = 434782;
426
427 manager->globals = globals;
428 manager->nextUpdateStep = 312500;
429 manager->nextUpdateCounter = c;
430 manager->nextUpdateInterval = c;
431 manager->priority = priority;
432 manager->busId = busId;
433
434 if (minVoiceIdx > 16) {
435 manager->sfxPlayerSelector = 16;
436 } else {
437 manager->sfxPlayerSelector = minVoiceIdx;
438 }
439
440 manager->busVolume = 0x8000;
441 manager->baseVolume = 0x8000;
442 manager->playCounter = 0;
443 manager->randomValue = 0;
444
445 for (i = 0; i < ARRAY_COUNT(manager->players); i++) {
446 SoundPlayer* player = &manager->players[i];
447
448 player->sefDataReadPos = NULL;
449 player->sfxVolume = 0;
450 player->delay = 0;
451 player->playLength = 0;
452 player->coarseTune = 0;
453 player->fineTune = 0;
454 player->sfxPan = 0;
455 player->reverb = 0;
456 player->instrumentIndex = 0;
457 player->envelopePreset = 0;
458 player->playVelocity = 0;
459 player->exclusiveID = 0;
460 player->cmdList_mode2[0] = 0;
461 player->cmdList_mode2[1] = 0;
462 player->cmdList_mode2[2] = 0;
463 player->cmdList_mode2[3] = 64; // default pan
464 player->cmdList_mode2[4] = 0;
465 player->cmdList_mode2[5] = 0x80 + 48; // default tune, higher bit is meaningless
466 player->cmdList_mode2[6] = 0;
467 player->cmdList_mode2[7] = 0;
468 }
469
470 for (i = 0; i < ARRAY_COUNT(manager->bgmSounds); i++) {
471 manager->bgmSounds[i].s32 = 0;
472 }
473
474 for (i = 0; i < ARRAY_COUNT(manager->customCmdList); i++) {
475 manager->customCmdList[i].data[0] = 0;
476 }
477
478 manager->resetPending = FALSE;
480 au_sfx_clear_queue(manager);
481 au_fade_init(&manager->fadeInfo, 0, 0x7FFF, 0x7FFF);
482 au_fade_set_volume(manager->busId, manager->fadeInfo.curVolume.u16, manager->busVolume);
483 manager->lastCustomEffectIdx = 0xFF;
484
493
494 manager->customReverbAmounts[0] = 0x10;
495 manager->customReverbAmounts[1] = 0x20;
496 manager->customReverbAmounts[2] = 0x20;
497 manager->customReverbAmounts[3] = 0x20;
498 manager->customReverbAmounts[4] = 0x20;
499 manager->customReverbAmounts[5] = 0x30;
500 manager->customReverbAmounts[6] = 0x40;
501 manager->customReverbAmounts[7] = 0x50;
502
503 au_sfx_set_reverb_type(manager, 0);
504}
void au_fade_set_volume(u8 busId, u16 volume, s32 busVolume)
void au_fade_init(Fade *fade, s32 time, s32 startValue, s32 endValue)
@ SND_MANAGER_STATE_ENABLED
Definition audio.h:237
VolumeField curVolume
Definition audio.h:366
u8 instrumentIndex
Definition audio.h:628
s32 * customReverbParams[8]
Definition audio.h:671
u8 lastCustomEffectIdx
Definition audio.h:673
u16 playLength
Definition audio.h:618
AuFilePos sefDataReadPos
Definition audio.h:596
struct AuGlobals * globals
Definition audio.h:659
s32 nextUpdateInterval
Definition audio.h:666
struct Fade fadeInfo
Definition audio.h:668
s16 coarseTune
Definition audio.h:619
SoundManager90 bgmSounds[4]
Definition audio.h:676
u16 baseVolume
Definition audio.h:678
u8 reverb
Definition audio.h:627
u8 envelopePreset
Definition audio.h:629
SoundPlayer players[8]
Definition audio.h:693
s32 playCounter
Definition audio.h:664
s32 randomValue
Definition audio.h:670
u8 cmdList_mode2[8]
Definition audio.h:609
s32 busVolume
Definition audio.h:669
s32 nextUpdateStep
Definition audio.h:665
SoundManagerCustomCmdList customCmdList[4]
Definition audio.h:677
u8 sfxPlayerSelector
Definition audio.h:681
u16 u16
Definition audio.h:360
u8 exclusiveID
Definition audio.h:624
s16 sfxVolume
Definition audio.h:605
s32 nextUpdateCounter
Definition audio.h:667
s8 fineTune
Definition audio.h:620
u16 delay
Definition audio.h:617
s8 customReverbAmounts[8]
Definition audio.h:672
u8 priority
Definition audio.h:680
s32 resetPending
Definition audio.h:692
u8 playVelocity
Definition audio.h:630
u8 sfxPan
Definition audio.h:626
#define ARRAY_COUNT(arr)
Definition macros.h:40
s32 CUSTOM_ECHO_PARAMS_1[]
Definition sfx_player.c:95
s32 CUSTOM_SMALL_ROOM_PARAMS[]
Definition sfx_player.c:84
void au_sfx_set_state(SoundManager *manager, s32 state)
Definition sfx_player.c:684
s32 CUSTOM_ECHO_PARAMS_3[]
Definition sfx_player.c:113
s32 CUSTOM_ECHO_PARAMS_2[]
Definition sfx_player.c:104
void au_sfx_clear_queue(SoundManager *manager)
Definition sfx_player.c:526
s32 au_sfx_set_reverb_type(SoundManager *manager, s32 arg1)
Definition sfx_player.c:664

Referenced by au_engine_init().

◆ au_sfx_load_groups_from_SEF()

void au_sfx_load_groups_from_SEF ( SoundManager * manager)

Definition at line 506 of file sfx_player.c.

506 {
507 SEFHeader* sefData = manager->globals->dataSEF;
508 s32 sections = ARRAY_COUNT(sefData->sections);
509 u32 i;
510
511 manager->sefData = (u8*)sefData;
512
513 for (i = 0; i < sections; i++) {
514 if (sefData->sections[i] != 0) {
515 manager->normalSounds[i] = AU_FILE_RELATIVE(sefData, sefData->sections[i]);
516 }
517 }
518
519 if (sefData->hasExtraSection == 1) {
520 if (sefData->section2000 != 0) {
521 manager->extraSounds = AU_FILE_RELATIVE(sefData, sefData->section2000);
522 }
523 }
524}
s32 * extraSounds
Definition audio.h:663
u8 * sefData
Definition audio.h:661
s32 * normalSounds[8]
Definition audio.h:662
#define AU_FILE_RELATIVE(base, offset)
Definition audio.h:40
u16 sections[8]
Definition audio.h:810
u16 section2000
Definition audio.h:811
SEFHeader * dataSEF
Definition audio.h:924
u8 hasExtraSection
Definition audio.h:808

Referenced by au_engine_init().

◆ au_sfx_clear_queue()

void au_sfx_clear_queue ( SoundManager * manager)

Definition at line 526 of file sfx_player.c.

526 {
527 s32 i;
528
529 for (i = 0; i < ARRAY_COUNT(manager->soundQueue); i++) {
530 manager->soundQueue[i].soundID = 0;
531 manager->soundQueue[i].upperSoundID = 0;
532 manager->soundQueue[i].volume = 0;
533 manager->soundQueue[i].pitchShift = 0;
534 manager->soundQueue[i].pan = 0;
535 }
536
537 manager->unk_165 = 0;
538 manager->sfxQueueNextPos = 0;
539 manager->sfxQueuePosOffset = 0;
540 manager->unk_162 = 0;
541}
u16 soundID
Definition audio.h:524
s16 pitchShift
Definition audio.h:527
u8 sfxQueueNextPos
Definition audio.h:689
u8 sfxQueuePosOffset
Definition audio.h:688
SoundSFXEntry soundQueue[16]
Definition audio.h:686
u16 upperSoundID
Definition audio.h:525

Referenced by au_sfx_init().

◆ au_sfx_enqueue_event()

void au_sfx_enqueue_event ( SoundManager * manager,
u32 soundID,
s16 volume,
s16 pitchShift,
u8 pan )

Definition at line 543 of file sfx_player.c.

543 {
544 u32 queuePos = manager->sfxQueueNextPos;
545 s32 queueAmt = manager->sfxQueueNextPos - manager->sfxQueuePosOffset;
546
547 if (queueAmt < 0) {
548 queueAmt += 16;
549 }
550
551 if (queueAmt < 16) {
552 u32 queueNextPos = queuePos;
553
554 manager->soundQueue[queueNextPos].soundID = soundID & (SOUND_ID_LOWER | SOUND_ID_STOP | SOUND_ID_ADJUST | SOUND_ID_TRIGGER_MASK);
555 manager->soundQueue[queueNextPos].upperSoundID = ((soundID >> 0x10) & 0x3FF);
556 manager->soundQueue[queueNextPos].volume = volume;
557 manager->soundQueue[queueNextPos].pitchShift = pitchShift;
558 manager->soundQueue[queueNextPos].pan = pan;
559
560 queueNextPos++;
561 if (queueNextPos >= 16) {
562 queueNextPos = 0;
563 }
564
565 manager->sfxQueueNextPos = queueNextPos;
566 }
567}
@ SOUND_ID_ADJUST
Definition enums.h:529
@ SOUND_ID_TRIGGER_MASK
Definition enums.h:530
@ SOUND_ID_STOP
Definition enums.h:526
@ SOUND_ID_LOWER
Definition enums.h:527

Referenced by snd_adjust_sound(), snd_adjust_sound_with_shift(), snd_start_sound(), snd_start_sound_raw(), snd_start_sound_with_shift(), and snd_stop_sound().

◆ au_sfx_update_main()

void au_sfx_update_main ( SoundManager * manager)

Definition at line 569 of file sfx_player.c.

569 {
570 SoundSFXEntry newEntry;
571 SoundSFXEntry* sfxEntry;
572 u32 i, j, k;
573 s32 count;
574
575 manager->playCounter++;
576 if (manager->resetPending) {
577 au_sfx_reset_players(manager);
578 manager->resetPending = FALSE;
579 }
580
581 // sounds started by special seq command FF-05
582 for (i = 0; i < ARRAY_COUNT(manager->bgmSounds); i++) {
583 k = manager->bgmSounds[i].unk_0;
584 if (k == 0) {
585 // do nothing
586 } else if (k < 2) {
587 AlUnkGemini* unkData = &D_80078370[k-1];
588 u16 sound2 = unkData->sound2;
589 if (sound2 != 0) {
590 for (j = 0; j < ARRAY_COUNT(manager->players); j++) {
591 if (manager->players[j].curSoundID == sound2) {
592 newEntry.soundID = unkData->sound1;
593 newEntry.upperSoundID = 0;
594 newEntry.pitchShift = 0;
595 if ((unkData->flags & 1) && (manager->bgmSounds[i].volume != 0)) {
596 newEntry.volume = (manager->bgmSounds[i].volume << 8) + 0xFF;
597 } else {
598 newEntry.volume = 0;
599 }
600 newEntry.pan = 0;
601 au_sfx_load_sound(manager, &newEntry, NULL);
602 break;
603 }
604 }
605 } else {
606 newEntry.soundID = unkData->sound1;
607 newEntry.upperSoundID = 0;
608 newEntry.volume = 0;
609 newEntry.pitchShift = 0;
610 newEntry.pan = 0;
611 au_sfx_load_sound(manager, &newEntry, NULL);
612 }
613 }
614 manager->bgmSounds[i].s32 = 0;
615 }
616
617 // sounds started from sef command 17
618 for (i = 0; i < ARRAY_COUNT(manager->customCmdList); i++) {
619 if (manager->customCmdList[i].data[0] != 0) {
620 newEntry.soundID = 1;
621 newEntry.upperSoundID = 0;
622 newEntry.volume = 0;
623 newEntry.pitchShift = 0;
624 newEntry.pan = 0;
625 au_sfx_load_sound(manager, &newEntry, &manager->customCmdList[i]);
626 }
627 manager->customCmdList[i].data[0] = 0;
628 }
629
630 count = manager->sfxQueueNextPos - manager->sfxQueuePosOffset;
631 if (count < 0) {
632 count += ARRAY_COUNT(manager->soundQueue);
633 }
634 j = manager->sfxQueuePosOffset;
635 if (count > 0 && count < ARRAY_COUNT(manager->soundQueue)) {
636 for (i = 0; i < count; i++) {
637 sfxEntry = &manager->soundQueue[j];
638 if (sfxEntry->soundID & SOUND_ID_LOWER) {
639 if (sfxEntry->soundID & SOUND_ID_STOP) {
640 au_sfx_stop_by_id(manager, sfxEntry->soundID);
641 } else if (!(sfxEntry->soundID & (SOUND_ID_ADJUST | SOUND_ID_TRIGGER_MASK))) {
642 au_sfx_load_sound(manager, sfxEntry, NULL);
643 } else {
644 if (sfxEntry->soundID & SOUND_ID_TRIGGER_MASK) {
645 au_sfx_set_triggers(manager, sfxEntry->soundID);
646 }
647 if (sfxEntry->soundID & SOUND_ID_ADJUST) {
648 au_sfx_set_modifiers(manager, sfxEntry);
649 }
650 }
651 }
652 sfxEntry->soundID = SOUND_NONE;
653
654 j++;
655 if (j >= ARRAY_COUNT(manager->soundQueue)) {
656 j = 0;
657 }
658 }
659 manager->sfxQueuePosOffset = manager->sfxQueueNextPos;
660 }
661}
u16 sound1
Definition audio.h:1174
u16 curSoundID
Definition audio.h:622
u16 sound2
Definition audio.h:1175
@ SOUND_NONE
Definition enums.h:547
void au_sfx_load_sound(SoundManager *manager, SoundSFXEntry *entry, SoundManagerCustomCmdList *customSEF)
Definition sfx_player.c:692
AlUnkGemini D_80078370[]
Definition sfx_player.c:121

Referenced by au_update_players_main().

◆ au_sfx_set_reverb_type()

s32 au_sfx_set_reverb_type ( SoundManager * manager,
s32 arg1 )

Definition at line 664 of file sfx_player.c.

664 {
665 s32 customIdx = (u8) arg1;
666
667 if (customIdx != 0xF0) {
668 if (customIdx < ARRAY_COUNT(manager->customReverbParams)) {
669 if (manager->lastCustomEffectIdx != customIdx) {
670 manager->lastCustomEffectIdx = customIdx;
672 manager->globals->effectChanges[FX_BUS_SOUND].changed = TRUE;
673 AU_FX_CUSTOM_PARAMS[0] = manager->customReverbParams[customIdx];
674 }
675 manager->defaultReverbAmt = manager->customReverbAmounts[customIdx];
676 } else {
677 manager->lastCustomEffectIdx = 0xFF;
678 manager->defaultReverbAmt = 0;
679 }
680 }
681 return manager->lastCustomEffectIdx;
682}
@ AU_FX_CUSTOM_0
Definition audio.h:93
@ FX_BUS_SOUND
Definition audio.h:120
AuEffectChange effectChanges[4]
Definition audio.h:903
s8 defaultReverbAmt
Definition audio.h:674
s32 * AU_FX_CUSTOM_PARAMS[0]
Definition reverb.c:103

Referenced by au_sfx_init(), and func_80054D74().

◆ au_sfx_set_state()

void au_sfx_set_state ( SoundManager * manager,
s32 state )

Definition at line 684 of file sfx_player.c.

684 {
685 if (state == SND_MANAGER_STATE_ENABLED) {
687 } else if (state == SND_MANAGER_STATE_DISABLED) {
689 }
690}
@ SND_MANAGER_STATE_DISABLED
Definition audio.h:238

Referenced by au_sfx_init(), disable_sounds(), and enable_sounds().

◆ au_sfx_load_sound()

void au_sfx_load_sound ( SoundManager * manager,
SoundSFXEntry * entry,
SoundManagerCustomCmdList * customSEF )

Definition at line 692 of file sfx_player.c.

692 {
693 SoundPlayer* player;
694 s32 playerIndex;
695 u16* cmdList;
696 s32 trackCount;
697 s32 foundPlayer = FALSE;
698 u32 exclusiveID;
699 s32 sectionIndex;
700 u16 soundInfo;
701 u32 priority, polyphonyMode, useSpecificPlayerMode;
702 s32 v1;
703 s32* normalSounds;
704
705 #define NEXT_CMD trackCount--; if (trackCount <= 0 ) { break; } cmdList += 2;
706
707 u32 soundIndex = (entry->soundID - 1) & 0xFF;
708 u16 soundIDLower = entry->soundID & SOUND_ID_LOWER;
709 u16 soundID = entry->soundID;
710
711 if (soundID & SOUND_ID_UNK) {
712 // sound from extra section
713 soundIndex = (entry->soundID - 1) & SOUND_ID_UNK_INDEX_MASK;
714 if (soundIndex < 0x140) {
715 cmdList = (u16*)&manager->extraSounds[soundIndex];
716 if (*cmdList != 0) {
717 // check if any player is playing this sound
718 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
719 player = &manager->players[playerIndex];
720 if (player->curSoundID == soundIDLower) {
721 foundPlayer = TRUE;
722 break;
723 }
724 }
725
726 if (!foundPlayer) {
727 //find free player
728 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
729 player = &manager->players[playerIndex];
730 if (player->sefDataReadPos == NULL) {
731 foundPlayer = TRUE;
732 break;
733 }
734 }
735 }
736
737 if (foundPlayer) {
738 au_sfx_play_sound(manager, player, (s8*)cmdList, entry, 0, 0);
739 }
740 }
741 }
742 } else {
743 if (soundIndex >= 0xC0) {
744 if (customSEF != NULL) {
745 cmdList = (u16*)customSEF;
746 } else {
747 sectionIndex = ((soundIDLower - 1) >> 8) + 4;
748 normalSounds = manager->normalSounds[sectionIndex];
749 v1 = soundIndex - 0xC0;
750 cmdList = (u16*)&manager->normalSounds[sectionIndex][v1];
751 }
752
753 if (*cmdList != 0) {
754 // check if any player is playing this sound
755 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
756 player = &manager->players[playerIndex];
757 if (player->curSoundID == soundIDLower) {
758 foundPlayer = TRUE;
759 break;
760 }
761 }
762
763 if (!foundPlayer) {
764 //find free player
765 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
766 player = &manager->players[playerIndex];
767 if (player->sefDataReadPos == NULL) {
768 foundPlayer = TRUE;
769 break;
770 }
771 }
772 }
773
774 if (foundPlayer) {
775 au_sfx_play_sound(manager, player, (u8*)cmdList, entry, 0, 0);
776 }
777 }
778 } else {
779 if (customSEF != NULL) {
780 cmdList = (u16*)customSEF;
781 } else {
782 sectionIndex = ((soundID) >> 8) & 3;
783 cmdList = (u16*)&manager->normalSounds[sectionIndex][soundIndex];
784 }
785
786 if (*cmdList != 0) {
787 // read sound info chunk
788 soundInfo = cmdList[1];
789
790 priority = (soundInfo & 0x300) >> 8; // bits 8, 9
791 polyphonyMode = (soundInfo & 0x60) >> 5; // bits 5, 6,
792 useSpecificPlayerMode = soundInfo;
793 useSpecificPlayerMode = (useSpecificPlayerMode & 0x80) >> 7; // bit 7
794
795 if (polyphonyMode == 0) {
796 if (entry->upperSoundID != 0) {
797 for (playerIndex = 0; playerIndex < 8; playerIndex++) {
798 player = &manager->players[playerIndex];
799 if (player->curSoundID == entry->upperSoundID) {
800 foundPlayer = TRUE;
801 break;
802 }
803 }
804 }
805
806 if (useSpecificPlayerMode == 0) {
807 if (!foundPlayer) {
808 playerIndex = soundInfo & 0x7;
809 player = &manager->players[playerIndex];
810 if (player->sefDataReadPos == NULL || priority >= player->priority) {
811 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, priority, 0);
812 }
813 return;
814 }
815 }
816
817 if (!foundPlayer) {
818 // lower 4 bits of soundInfo: max playerIndex
819 // check if any player is playing this sound
820 for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) {
821 player = &manager->players[playerIndex];
822 if (player->curSoundID == soundIDLower) {
823 foundPlayer = TRUE;
824 break;
825 }
826 }
827 }
828
829 if (!foundPlayer) {
830 // find free player
831 for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) {
832 player = &manager->players[playerIndex];
833 if (player->sefDataReadPos == NULL) {
834 foundPlayer = TRUE;
835 break;
836 }
837 }
838 }
839
840 if (!foundPlayer) {
841 // if there is no free player try stealing one with lower priority
842 for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) {
843 player = &manager->players[playerIndex];
844 if (player->priority < priority) {
845 foundPlayer = TRUE;
846 break;
847 }
848 }
849 }
850
851 if (!foundPlayer) {
852 playerIndex = soundInfo & 0x7;
853 player = &manager->players[playerIndex];
854 if (player->priority <= priority) {
855 foundPlayer = TRUE;
856 }
857 }
858
859 if (foundPlayer) {
860 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, priority, 0);
861 }
862 } else {
863 cmdList = AU_FILE_RELATIVE(manager->sefData, *cmdList);
864 exclusiveID = (soundInfo & 0x1800) >> 11; // bits 11, 12
865 if (exclusiveID != 0) {
866 au_sfx_stop_by_exlusive_id(manager, exclusiveID);
867 } else {
868 au_sfx_stop_by_id(manager, entry->soundID);
869 }
870
871 trackCount = 2 << (polyphonyMode - 1); // 2 or 4 or 8
872
873 if (useSpecificPlayerMode != 0) {
874 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
875 if (*cmdList != 0) {
876 // first check the players that were stopped just now
877 player = &manager->players[playerIndex];
878 if (player->sefDataReadPos == BlankSEFData) {
879 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, priority, exclusiveID);
880 NEXT_CMD;
881 }
882 } else {
883 NEXT_CMD;
884 }
885
886 }
887
888 if (trackCount != 0) {
889 for (playerIndex = 7; playerIndex >= 0;){
890 if (*cmdList != 0) {
891 // then check any free players
892 player = &manager->players[playerIndex];
893 if (player->sefDataReadPos == NULL) {
894 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, priority, exclusiveID);
895 NEXT_CMD;
896 }
897 playerIndex--;
898 } else {
899 NEXT_CMD;
900 }
901 }
902 }
903
904 if (trackCount != 0) {
905 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
906 if (*cmdList != 0) {
907 // then try to steal
908 player = &manager->players[playerIndex];
909 if (exclusiveID > player->exclusiveID && priority >= player->priority) {
910 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, priority, exclusiveID);
911 NEXT_CMD;
912 }
913 } else {
914 NEXT_CMD;
915 }
916 }
917 }
918 } else {
919 s32 i;
920 for (i = 0; i < trackCount; i++) {
921 if (*cmdList != 0) {
922 soundInfo = cmdList[1];
923 playerIndex = soundInfo & 7;
924 player = &manager->players[playerIndex];
925 priority = (soundInfo & 0x300) >> 8; // bits 8, 9
926 if (player->sefDataReadPos == NULL || priority >= player->priority) {
927 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, priority, exclusiveID);
928 }
929 cmdList += 2;
930 }
931 }
932 }
933 }
934 }
935 }
936 }
937 #undef NEXT_CMD
938}
u8 priority
Definition audio.h:623
@ SOUND_ID_UNK_INDEX_MASK
Definition enums.h:535
@ SOUND_ID_UNK
Definition enums.h:528
#define NEXT_CMD
u8 BlankSEFData[]
Definition sfx_player.c:220

Referenced by au_sfx_update_main().

◆ au_sfx_manager_update()

s16 au_sfx_manager_update ( SoundManager * manager)

Definition at line 1080 of file sfx_player.c.

1080 {
1081 SoundPlayer* player;
1082 AuVoice* voice;
1083 u32 start;
1084 u8 end;
1085 u8 i;
1086
1087 // update pseudorandom number with fast 'good enough' method
1088 manager->randomValue = (u16)manager->randomValue + (u16)manager->playCounter;
1089
1090 start = manager->sfxPlayerSelector;
1091 for (i = start, end = start + 8; i < end; i++) {
1092 player = &manager->players[i - manager->sfxPlayerSelector];
1093 if (player->sefDataReadPos != NULL) {
1094 voice = &manager->globals->voices[i];
1095 manager->curVoice = voice;
1096 if (voice->priority <= manager->priority) {
1097 manager->curVoiceIndex = i;
1098 switch (player->sfxParamsFlags & SFX_PARAM_FLAG_MODE) {
1100 au_sfx_update_basic(manager, player, voice, i);
1101 break;
1103 au_sfx_update_sequence(manager, player, voice, i);
1104 break;
1106 break;
1107 }
1108 } else {
1109 player->sefDataReadPos = NULL;
1110 player->curSoundID = 0;
1111 player->priority = 0;
1112 }
1113 }
1114 }
1115 return 0;
1116}
u8 curVoiceIndex
Definition audio.h:683
AuVoice voices[24]
Definition audio.h:938
u8 sfxParamsFlags
Definition audio.h:625
u8 priority
Definition audio.h:741
struct AuVoice * curVoice
Definition audio.h:660

Referenced by au_update_clients_2().

Variable Documentation

◆ DummyInstrumentPredictor

u16 DummyInstrumentPredictor[32]
Initial value:
= {
0xF803, 0x0125, 0x07D0, 0xFDBC, 0xF886, 0x0355, 0x06FC, 0xFBAB,
0xFEDA, 0xF82D, 0x0245, 0x077D, 0xFCA9, 0xF901, 0x0456, 0x065D,
0xFC33, 0xFBB2, 0xFCEF, 0xFE94, 0xFFD8, 0x0080, 0x00A4, 0x007D,
0x090E, 0x0673, 0x02FF, 0x0053, 0xFEF2, 0xFEA7, 0xFEF9, 0xFF7B
}

Definition at line 61 of file sfx_player.c.

61 {
62 0xF803, 0x0125, 0x07D0, 0xFDBC, 0xF886, 0x0355, 0x06FC, 0xFBAB,
63 0xFEDA, 0xF82D, 0x0245, 0x077D, 0xFCA9, 0xF901, 0x0456, 0x065D,
64 0xFC33, 0xFBB2, 0xFCEF, 0xFE94, 0xFFD8, 0x0080, 0x00A4, 0x007D,
65 0x090E, 0x0673, 0x02FF, 0x0053, 0xFEF2, 0xFEA7, 0xFEF9, 0xFF7B
66};

◆ DummyInstrumentBase

u8 DummyInstrumentBase[190]
Initial value:
= {
0xB1, 0x01, 0x11, 0x10, 0x00, 0xFF, 0xFE, 0x34, 0xBB, 0x90, 0xE2, 0x1E, 0x00, 0xFB, 0x10, 0xEF,
0xF2, 0xD1, 0x80, 0xC4, 0xB3, 0xB1, 0xD3, 0xCF, 0xD1, 0xFD, 0xFE, 0x80, 0x1D, 0x2D, 0x3D, 0x3B,
0x2C, 0x3B, 0xFC, 0x1D, 0x80, 0xDE, 0xF0, 0xD0, 0xD3, 0xD2, 0xB3, 0xD1, 0xF4, 0x80, 0xA2, 0x03,
0xD0, 0x0D, 0xA9, 0xEA, 0xCB, 0x72, 0x90, 0x41, 0x4E, 0x1D, 0x2D, 0x0C, 0x1E, 0x10, 0x2F, 0x90,
0xF2, 0x12, 0x03, 0xF0, 0xC2, 0xD1, 0xD4, 0xF3, 0x80, 0xB0, 0xA1, 0xBF, 0xD2, 0x1E, 0x12, 0x70,
0x4D, 0x80, 0x4C, 0x39, 0x2C, 0x7E, 0x30, 0x6D, 0xB9, 0xCF, 0x90, 0xE1, 0xF2, 0xF3, 0xF2, 0xE1,
0xE2, 0x16, 0x22, 0xC1, 0xE7, 0x28, 0xF4, 0xF0, 0x21, 0x10, 0x10, 0xFF, 0xA1, 0xED, 0x9F, 0x2F,
0xF5, 0x61, 0x33, 0x3C, 0xD0, 0xA1, 0xDA, 0xC2, 0xFF, 0x14, 0x41, 0x22, 0x2D, 0xEF, 0xA1, 0xFA,
0xE1, 0x0E, 0x23, 0x30, 0x32, 0x0E, 0xF0, 0x91, 0x9A, 0xF2, 0xCF, 0x55, 0x13, 0x61, 0xEE, 0x1C,
0x91, 0x9D, 0x0F, 0xD2, 0x52, 0x06, 0x4D, 0xE1, 0x09, 0x91, 0xD0, 0x1B, 0x15, 0x2E, 0x36, 0xFD,
0x12, 0xCB, 0x81, 0x22, 0xBC, 0x65, 0xF0, 0x73, 0xCE, 0x3F, 0xAE, 0x71, 0x4E, 0x93, 0x70, 0xF5,
0x6E, 0xD2, 0x1B, 0xD1, 0x61, 0x0A, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}

Definition at line 68 of file sfx_player.c.

68 {
69 0xB1, 0x01, 0x11, 0x10, 0x00, 0xFF, 0xFE, 0x34, 0xBB, 0x90, 0xE2, 0x1E, 0x00, 0xFB, 0x10, 0xEF,
70 0xF2, 0xD1, 0x80, 0xC4, 0xB3, 0xB1, 0xD3, 0xCF, 0xD1, 0xFD, 0xFE, 0x80, 0x1D, 0x2D, 0x3D, 0x3B,
71 0x2C, 0x3B, 0xFC, 0x1D, 0x80, 0xDE, 0xF0, 0xD0, 0xD3, 0xD2, 0xB3, 0xD1, 0xF4, 0x80, 0xA2, 0x03,
72 0xD0, 0x0D, 0xA9, 0xEA, 0xCB, 0x72, 0x90, 0x41, 0x4E, 0x1D, 0x2D, 0x0C, 0x1E, 0x10, 0x2F, 0x90,
73 0xF2, 0x12, 0x03, 0xF0, 0xC2, 0xD1, 0xD4, 0xF3, 0x80, 0xB0, 0xA1, 0xBF, 0xD2, 0x1E, 0x12, 0x70,
74 0x4D, 0x80, 0x4C, 0x39, 0x2C, 0x7E, 0x30, 0x6D, 0xB9, 0xCF, 0x90, 0xE1, 0xF2, 0xF3, 0xF2, 0xE1,
75 0xE2, 0x16, 0x22, 0xC1, 0xE7, 0x28, 0xF4, 0xF0, 0x21, 0x10, 0x10, 0xFF, 0xA1, 0xED, 0x9F, 0x2F,
76 0xF5, 0x61, 0x33, 0x3C, 0xD0, 0xA1, 0xDA, 0xC2, 0xFF, 0x14, 0x41, 0x22, 0x2D, 0xEF, 0xA1, 0xFA,
77 0xE1, 0x0E, 0x23, 0x30, 0x32, 0x0E, 0xF0, 0x91, 0x9A, 0xF2, 0xCF, 0x55, 0x13, 0x61, 0xEE, 0x1C,
78 0x91, 0x9D, 0x0F, 0xD2, 0x52, 0x06, 0x4D, 0xE1, 0x09, 0x91, 0xD0, 0x1B, 0x15, 0x2E, 0x36, 0xFD,
79 0x12, 0xCB, 0x81, 0x22, 0xBC, 0x65, 0xF0, 0x73, 0xCE, 0x3F, 0xAE, 0x71, 0x4E, 0x93, 0x70, 0xF5,
80 0x6E, 0xD2, 0x1B, 0xD1, 0x61, 0x0A, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
81};

◆ CUSTOM_SMALL_ROOM_PARAMS

s32 CUSTOM_SMALL_ROOM_PARAMS[]
Initial value:
= {
3, 11,
0, 9, 9830, -9830, 0, 0, 0, 0,
3, 7, 3276, -3276, 0x3FFF, 0, 0, 0,
0, 10, 5000, 0, 0, 0, 0, 0x5000
}

Definition at line 84 of file sfx_player.c.

84 {
85 /* sections length */
86 3, 11,
87 /* chorus chorus filter
88 input output fbcoef ffcoef gain rate depth coef */
89 0, 9, 9830, -9830, 0, 0, 0, 0,
90 3, 7, 3276, -3276, 0x3FFF, 0, 0, 0,
91 0, 10, 5000, 0, 0, 0, 0, 0x5000
92};

Referenced by au_sfx_init().

◆ CUSTOM_ECHO_PARAMS_1

s32 CUSTOM_ECHO_PARAMS_1[]
Initial value:
= {
1, 11,
0, 10, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
}

Definition at line 95 of file sfx_player.c.

95 {
96 /* sections length */
97 1, 11,
98 /* chorus chorus filter
99 input output fbcoef ffcoef gain rate depth coef */
100 0, 10, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
101};

Referenced by au_sfx_init().

◆ CUSTOM_ECHO_PARAMS_2

s32 CUSTOM_ECHO_PARAMS_2[]
Initial value:
= {
1, 13,
0, 12, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
}

Definition at line 104 of file sfx_player.c.

104 {
105 /* sections length */
106 1, 13,
107 /* chorus chorus filter
108 input output fbcoef ffcoef gain rate depth coef */
109 0, 12, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
110};

Referenced by au_sfx_init().

◆ CUSTOM_ECHO_PARAMS_3

s32 CUSTOM_ECHO_PARAMS_3[]
Initial value:
= {
1, 14,
0, 13, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
}

Definition at line 113 of file sfx_player.c.

113 {
114 /* sections length */
115 1, 14,
116 /* chorus chorus filter
117 input output fbcoef ffcoef gain rate depth coef */
118 0, 13, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
119};

Referenced by au_sfx_init().

◆ D_80078370

AlUnkGemini D_80078370[]
Initial value:
= {
{
.sound1 = SOUND_SHORT_CLAP,
.flags = 1
}
}
@ SOUND_LRAW_CHEERING
Definition enums.h:1151
@ SOUND_SHORT_CLAP
Definition enums.h:1152

Definition at line 121 of file sfx_player.c.

121 {
122 {
123 .sound1 = SOUND_SHORT_CLAP,
124 .sound2 = SOUND_LRAW_CHEERING,
125 .flags = 1
126 }
127};

Referenced by au_sfx_update_main().

◆ SFXEnvelopeFast

EnvelopePreset SFXEnvelopeFast
Initial value:
= {
.count = 1,
.offsets = { { 0x08, 0x12 } },
}

Definition at line 130 of file sfx_player.c.

130 {
131 .count = 1,
132 .offsets = { { 0x08, 0x12 } },
133};

◆ SFXEnvelopeFastData

u8 SFXEnvelopeFastData[]
Initial value:
= {
}
@ ENV_CMD_END
Definition audio.h:130
@ ENV_TIME_1400MS
Definition audio.h:173
@ ENV_TIME_3S
Definition audio.h:163
@ ENV_TIME_1S
Definition audio.h:177
@ ENV_TIME_900MS
Definition audio.h:179
@ ENV_TIME_290MS
Definition audio.h:194

Definition at line 135 of file sfx_player.c.

135 {
136 // press
137 ENV_TIME_290MS, 127,
138 ENV_TIME_900MS, 127,
139 ENV_TIME_1S, 95,
140 ENV_TIME_3S, 0,
141 ENV_CMD_END, 0,
142 // release
144 ENV_CMD_END, 0
145};

◆ SFXEnvelopeSlow

EnvelopePreset SFXEnvelopeSlow
Initial value:
= {
.count = 1,
.offsets = { { 0x08, 0x1A } },
}

Definition at line 147 of file sfx_player.c.

147 {
148 .count = 1,
149 .offsets = { { 0x08, 0x1A } },
150};

◆ SFXEnvelopeSlowData

u8 SFXEnvelopeSlowData[]
Initial value:
= {
}
@ ENV_TIME_1100MS
Definition audio.h:176
@ ENV_TIME_1800MS
Definition audio.h:169
@ ENV_TIME_450MS
Definition audio.h:188

Definition at line 152 of file sfx_player.c.

152 {
153 // press
154 ENV_TIME_290MS, 127,
155 ENV_TIME_1800MS, 127,
156 ENV_TIME_290MS, 63,
157 ENV_TIME_1100MS, 31,
158 ENV_TIME_1100MS, 15,
162 ENV_CMD_END, 0,
163 // release
165 ENV_CMD_END, 0,
166};

◆ D_800783B0

s32 D_800783B0[]
Initial value:
= {
0x34337F26, 0x3F1600FF, 0x343B7F3B, 0x3FFF0000
}

Definition at line 169 of file sfx_player.c.

169 {
170 0x34337F26, 0x3F1600FF, 0x343B7F3B, 0x3FFF0000
171};

◆ SFXEnvelopePresets

◆ SefCmdHandlers

void(* SefCmdHandlers[])(SoundManager *, SoundPlayer *) ( SoundManager * ,
SoundPlayer *  )
Initial value:
= {
au_SEFCmd_00_SetVolume,
au_SEFCmd_01_SetPan,
au_SEFCmd_02_SetInstrument,
au_SEFCmd_03_SetReverb,
au_SEFCmd_04_SetEnvelope,
au_SEFCmd_05_CoarseTune,
au_SEFCmd_06_FineTune,
au_SEFCmd_07_WaitForEnd,
au_SEFCmd_08_PitchSweep,
au_SEFCmd_09_StartLoop,
au_SEFCmd_0A_EndLoop,
au_SEFCmd_0B_WaitForRelease,
au_SEFCmd_0C_SetCurrentVolume,
au_SEFCmd_0D_VolumeRamp,
au_SEFCmd_0E_SetAlternativeSound,
au_SEFCmd_0F_Stop,
au_SEFCmd_10_Jump,
au_SEFCmd_11_Restart,
au_SEFCmd_12_NOP,
au_SEFCmd_13_SetRandomPitch,
au_SEFCmd_14_SetRandomVelocity,
au_SEFCmd_15_SetUnkA3,
au_SEFCmd_16_SetEnvelopePress,
au_SEFCmd_17_PlaySound,
au_SEFCmd_18_SetAlternativeVolume
}

Definition at line 192 of file sfx_player.c.

192 {
193 au_SEFCmd_00_SetVolume,
194 au_SEFCmd_01_SetPan,
195 au_SEFCmd_02_SetInstrument,
196 au_SEFCmd_03_SetReverb,
197 au_SEFCmd_04_SetEnvelope,
198 au_SEFCmd_05_CoarseTune,
199 au_SEFCmd_06_FineTune,
200 au_SEFCmd_07_WaitForEnd,
201 au_SEFCmd_08_PitchSweep,
202 au_SEFCmd_09_StartLoop,
203 au_SEFCmd_0A_EndLoop,
204 au_SEFCmd_0B_WaitForRelease,
205 au_SEFCmd_0C_SetCurrentVolume,
206 au_SEFCmd_0D_VolumeRamp,
207 au_SEFCmd_0E_SetAlternativeSound,
208 au_SEFCmd_0F_Stop,
209 au_SEFCmd_10_Jump,
210 au_SEFCmd_11_Restart,
211 au_SEFCmd_12_NOP,
212 au_SEFCmd_13_SetRandomPitch,
213 au_SEFCmd_14_SetRandomVelocity,
214 au_SEFCmd_15_SetUnkA3,
215 au_SEFCmd_16_SetEnvelopePress,
216 au_SEFCmd_17_PlaySound,
217 au_SEFCmd_18_SetAlternativeVolume
218};

◆ BlankSEFData

u8 BlankSEFData[]
Initial value:
= {
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
}

Definition at line 220 of file sfx_player.c.

220 {
221 0x00, 0x00, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00
224};

Referenced by au_sfx_load_sound().

◆ SeqCmdHandlers

void(* SeqCmdHandlers[])(BGMPlayer *, BGMPlayerTrack *) ( BGMPlayer * ,
BGMPlayerTrack *  )

Definition at line 229 of file sfx_player.c.

229 {
262};
void au_BGMCmd_EB_SubTrackReverb(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F6_TrackVolumeFade(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F4(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FD_EventTrigger(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F7_SubTrackReverbType(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FC_Jump(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EE_SubTrackFineTune(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FE_Detour(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E3(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EA_SubTrackPan(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F2_TrackTremoloTime(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E5_MasterVolumeFade(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F1_TrackTremoloSpeed(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E0_MasterTempo(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E8_TrackOverridePatch(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F0_TrackTremolo(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EC_SegTrackVolume(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E9_SubTrackVolume(BGMPlayer *arg0, BGMPlayerTrack *track)
void au_BGMCmd_NOP(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E2_MasterPitchShift(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F5_TrackVoice(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E6_MasterEffect(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FF(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_ED_SubTrackCoarseTune(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E1_MasterVolume(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F3_TrackTremoloStop(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E4_MasterTempoFade(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EF_SegTrackTune(BGMPlayer *player, BGMPlayerTrack *track)

Referenced by au_bgm_player_update_playing().

◆ SeqCmdArgCounts

s8 SeqCmdArgCounts[]
Initial value:
= {
2, 1, 1, 1, 4, 3, 2, 0,
2, 1, 1, 1, 1, 1, 1, 2,
3, 1, 1, 0, 2, 1, 3, 1,
0, 0, 0, 0, 3, 3, 3, 3
}

Definition at line 264 of file sfx_player.c.

264 {
265 2, 1, 1, 1, 4, 3, 2, 0,
266 2, 1, 1, 1, 1, 1, 1, 2,
267 3, 1, 1, 0, 2, 1, 3, 1,
268 0, 0, 0, 0, 3, 3, 3, 3
269};

Referenced by au_bgm_player_update_playing().

◆ BgmDivisors

s8 BgmDivisors[]
Initial value:
= {
48, 24, 32, 40, 48, 56, 64, 48,
0, 0, 0, 0, 0, 0, 0, 0
}

Definition at line 271 of file sfx_player.c.

271 {
272 48, 24, 32, 40, 48, 56, 64, 48,
273 0, 0, 0, 0, 0, 0, 0, 0
274};

Referenced by au_bgm_dispatch_player_event(), and au_bgm_update_main().

◆ BlankMseqData

u8 BlankMseqData[]
Initial value:
= {
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
}

Definition at line 279 of file sfx_player.c.

279 {
280 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00,
282 0x00, 0x00, 0x00, 0x00,
283 0x00, 0x00, 0x00, 0x00
284};

Referenced by au_amb_player_update(), and au_amb_stop_quick().

◆ D_80078530

s16 D_80078530[]
Initial value:
= {
0x0000, 0x0200, 0x0800, 0x1200, 0x2000, 0x3200, 0x4800, 0x6200, 0x8000
}

Definition at line 289 of file sfx_player.c.

289 {
290 0x0000, 0x0200, 0x0800, 0x1200, 0x2000, 0x3200, 0x4800, 0x6200, 0x8000
291};

Referenced by func_80054CE0().

◆ DummyInstrumentEnvelope

EnvelopePreset DummyInstrumentEnvelope
Initial value:
= {
.count = 1,
.offsets = { { 0x8, 0xC } },
}

Definition at line 294 of file sfx_player.c.

294 {
295 .count = 1,
296 .offsets = { { 0x8, 0xC } }, // EnvelopePressDefault, EnvelopePressDefault
297};

◆ EnvelopePressDefault

u8 EnvelopePressDefault[]
Initial value:
= {
}
@ ENV_TIME_280MS
Definition audio.h:195

Definition at line 299 of file sfx_player.c.

299 {
300 ENV_TIME_280MS, 127,
301 ENV_CMD_END, 0
302};

Referenced by au_get_instrument().

◆ EnvelopeReleaseDefault

u8 EnvelopeReleaseDefault[]
Initial value:
= {
}
@ ENV_TIME_550MS
Definition audio.h:186

Definition at line 304 of file sfx_player.c.

304 {
306 ENV_CMD_END, 0
307};

◆ EnvelopeReleaseDefaultFast

u8 EnvelopeReleaseDefaultFast[]
Initial value:
= {
}
@ ENV_TIME_2UNITS
Definition audio.h:226

Definition at line 309 of file sfx_player.c.

309 {
311 ENV_CMD_END, 0
312};

Referenced by func_80050970().

◆ D_80078558

s8 D_80078558[]
Initial value:
= {
0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x58, 0x56, 0x53,
0x51, 0x4F, 0x4A, 0x45, 0x40, 0x3B, 0x37, 0x35,
0x33, 0x31, 0x2F, 0x2D, 0x2B, 0x29, 0x27, 0x26,
0x25, 0x23, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C,
0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14
}

Definition at line 317 of file sfx_player.c.

317 {
318 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x58, 0x56, 0x53,
319 0x51, 0x4F, 0x4A, 0x45, 0x40, 0x3B, 0x37, 0x35,
320 0x33, 0x31, 0x2F, 0x2D, 0x2B, 0x29, 0x27, 0x26,
321 0x25, 0x23, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C,
322 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14
323};

Referenced by au_BGMCmd_FF().

◆ AmbientSoundIDtoMSEQFileIndex

u8 AmbientSoundIDtoMSEQFileIndex[]
Initial value:
= {
0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
0x13, 0x14, 0x15, 0x16, 0x17, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}

Definition at line 328 of file sfx_player.c.

328 {
329 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
330 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
331 0x13, 0x14, 0x15, 0x16, 0x17, 0x00, 0x00, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
333};

◆ AuEnvelopeIntervals

s32 AuEnvelopeIntervals[]
Initial value:
= {
((s32)( 60 * 1000000) / AU_5750 * AU_5750), ((s32)( 55 * 1000000) / AU_5750 * AU_5750), ((s32)( 50 * 1000000) / AU_5750 * AU_5750), ((s32)( 45 * 1000000) / AU_5750 * AU_5750), ((s32)( 40 * 1000000) / AU_5750 * AU_5750), ((s32)( 35 * 1000000) / AU_5750 * AU_5750), ((s32)( 30 * 1000000) / AU_5750 * AU_5750), ((s32)( 27.5 * 1000000) / AU_5750 * AU_5750), ((s32)( 25 * 1000000) / AU_5750 * AU_5750), ((s32)( 22.5 * 1000000) / AU_5750 * AU_5750),
((s32)( 20 * 1000000) / AU_5750 * AU_5750), ((s32)( 19 * 1000000) / AU_5750 * AU_5750), ((s32)( 18 * 1000000) / AU_5750 * AU_5750), ((s32)( 17 * 1000000) / AU_5750 * AU_5750), ((s32)( 16 * 1000000) / AU_5750 * AU_5750), ((s32)( 15 * 1000000) / AU_5750 * AU_5750), ((s32)( 14 * 1000000) / AU_5750 * AU_5750), ((s32)( 13 * 1000000) / AU_5750 * AU_5750), ((s32)( 12 * 1000000) / AU_5750 * AU_5750), ((s32)( 11 * 1000000) / AU_5750 * AU_5750),
((s32)( 10 * 1000000) / AU_5750 * AU_5750), ((s32)( 9 * 1000000) / AU_5750 * AU_5750), ((s32)( 8 * 1000000) / AU_5750 * AU_5750), ((s32)( 7 * 1000000) / AU_5750 * AU_5750), ((s32)( 6 * 1000000) / AU_5750 * AU_5750), ((s32)( 5 * 1000000) / AU_5750 * AU_5750), ((s32)( 4.5 * 1000000) / AU_5750 * AU_5750), ((s32)( 4 * 1000000) / AU_5750 * AU_5750), ((s32)( 3.5 * 1000000) / AU_5750 * AU_5750), ((s32)( 3 * 1000000) / AU_5750 * AU_5750),
((s32)( 2.75 * 1000000) / AU_5750 * AU_5750), ((s32)( 2.5 * 1000000) / AU_5750 * AU_5750), ((s32)( 2.25 * 1000000) / AU_5750 * AU_5750), ((s32)( 2 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.9 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.8 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.7 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.6 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.5 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.4 * 1000000) / AU_5750 * AU_5750),
((s32)( 1.3 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.2 * 1000000) / AU_5750 * AU_5750), ((s32)( 1.1 * 1000000) / AU_5750 * AU_5750), ((s32)( 1 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.95 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.9 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.85 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.8 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.75 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.7 * 1000000) / AU_5750 * AU_5750),
((s32)( 0.65 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.6 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.55 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.5 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.45 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.4 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.375 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.35 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.325 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.3 * 1000000) / AU_5750 * AU_5750),
((s32)( 0.29 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.28 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.27 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.26 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.25 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.24 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.23 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.22 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.21 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.2 * 1000000) / AU_5750 * AU_5750),
((s32)( 0.19 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.18 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.17 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.16 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.15 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.14 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.13 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.12 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.11 * 1000000) / AU_5750 * AU_5750), ((s32)( 0.1 * 1000000) / AU_5750 * AU_5750),
16 * AU_5750, 14 * AU_5750, 12 * AU_5750, 11 * AU_5750, 10 * AU_5750,
9 * AU_5750, 8 * AU_5750, 7 * AU_5750, 6 * AU_5750, 5 * AU_5750,
4 * AU_5750, 3 * AU_5750, 2 * AU_5750, 1 * AU_5750, 0, 0, 0, 0, 0, 0,
}
#define AU_5750
Definition audio.h:22

Definition at line 341 of file sfx_player.c.

341 {
342 SEC(60), SEC(55), SEC(50), SEC(45), SEC(40), SEC(35), SEC(30), SEC(27.5), SEC(25), SEC(22.5),
343 SEC(20), SEC(19), SEC(18), SEC(17), SEC(16), SEC(15), SEC(14), SEC(13), SEC(12), SEC(11),
344 SEC(10), SEC(9), SEC(8), SEC(7), SEC(6), SEC(5), SEC(4.5), SEC(4), SEC(3.5), SEC(3),
345 SEC(2.75), SEC(2.5), SEC(2.25), SEC(2), SEC(1.9), SEC(1.8), SEC(1.7), SEC(1.6), SEC(1.5), SEC(1.4),
346 SEC(1.3), SEC(1.2), SEC(1.1), SEC(1), SEC(0.95), SEC(0.9), SEC(0.85), SEC(0.8), SEC(0.75), SEC(0.7),
347 SEC(0.65), SEC(0.6), SEC(0.55), SEC(0.5), SEC(0.45), SEC(0.4), SEC(0.375), SEC(0.35), SEC(0.325), SEC(0.3),
348 SEC(0.29), SEC(0.28), SEC(0.27), SEC(0.26), SEC(0.25), SEC(0.24), SEC(0.23), SEC(0.22), SEC(0.21), SEC(0.2),
349 SEC(0.19), SEC(0.18), SEC(0.17), SEC(0.16), SEC(0.15), SEC(0.14), SEC(0.13), SEC(0.12), SEC(0.11), SEC(0.1),
350 16 * AU_5750, 14 * AU_5750, 12 * AU_5750, 11 * AU_5750, 10 * AU_5750,
351 9 * AU_5750, 8 * AU_5750, 7 * AU_5750, 6 * AU_5750, 5 * AU_5750,
352 4 * AU_5750, 3 * AU_5750, 2 * AU_5750, 1 * AU_5750, 0, 0, 0, 0, 0, 0,
353};
#define SEC(x)
Definition sfx_player.c:339

Referenced by au_update_voices(), and au_voice_start().

◆ AlTuneScaling

f32 AlTuneScaling[]

Definition at line 360 of file sfx_player.c.

360 {
361 // TUNE_SCALING_ARR_AMPLIFY_FINE
362 1.00000000f, 1.00057781f, 1.00115597f, 1.00173450f, 1.00231326f, 1.00289237f, 1.00347185f, 1.00405169f,
363 1.00463188f, 1.00521231f, 1.00579309f, 1.00637424f, 1.00695574f, 1.00753760f, 1.00811982f, 1.00870228f,
364 1.00928509f, 1.00986826f, 1.01045179f, 1.01103568f, 1.01161981f, 1.01220429f, 1.01278913f, 1.01337433f,
365 1.01395988f, 1.01454580f, 1.01513207f, 1.01571858f, 1.01630545f, 1.01689267f, 1.01748025f, 1.01806819f,
366 1.01865649f, 1.01924503f, 1.01983392f, 1.02042317f, 1.02101278f, 1.02160275f, 1.02219307f, 1.02278376f,
367 1.02337468f, 1.02396595f, 1.02455759f, 1.02514958f, 1.02574193f, 1.02633464f, 1.02692771f, 1.02752113f,
368 1.02811480f, 1.02870882f, 1.02930319f, 1.02989793f, 1.03049302f, 1.03108847f, 1.03168428f, 1.03228045f,
369 1.03287685f, 1.03347361f, 1.03407073f, 1.03466821f, 1.03526604f, 1.03586423f, 1.03646278f, 1.03706169f,
370 1.03766096f, 1.03826058f, 1.03886044f, 1.03946066f, 1.04006124f, 1.04066217f, 1.04126346f, 1.04186511f,
371 1.04246712f, 1.04306948f, 1.04367220f, 1.04427528f, 1.04487872f, 1.04548252f, 1.04608655f, 1.04669094f,
372 1.04729569f, 1.04790080f, 1.04850626f, 1.04911208f, 1.04971826f, 1.05032480f, 1.05093169f, 1.05153894f,
373 1.05214655f, 1.05275452f, 1.05336285f, 1.05397153f, 1.05458057f, 1.05518997f, 1.05579972f, 1.05640972f,
374 1.05702007f, 1.05763078f, 1.05824184f, 1.05885327f, 1.05946505f, 1.06007719f, 1.06068969f, 1.06130254f,
375 1.06191576f, 1.06252933f, 1.06314325f, 1.06375754f, 1.06437218f, 1.06498718f, 1.06560254f, 1.06621826f,
376 1.06683433f, 1.06745076f, 1.06806755f, 1.06868470f, 1.06930220f, 1.06992006f, 1.07053828f, 1.07115686f,
377 1.07177579f, 1.07239509f, 1.07301474f, 1.07363474f, 1.07425511f, 1.07487583f, 1.07549691f, 1.07611835f,
378 // TUNE_SCALING_ARR_AMPLIFY_COARSE
379 1.00000000f, 1.07674015f, 1.15936935f, 1.24833953f, 1.34413731f, 1.44728661f, 1.55835164f, 1.67793977f,
380 1.80670512f, 1.94535196f, 2.09463859f, 2.25538135f, 2.42845964f, 2.61482000f, 2.81548166f, 3.03154206f,
381 3.26418304f, 3.51467681f, 3.78439355f, 4.07480860f, 4.38750982f, 4.72420788f, 5.08674431f, 5.47710180f,
382 5.89741516f, 6.34998369f, 6.83728218f, 7.36197615f, 7.92693520f, 8.53524971f, 9.19024563f, 9.89550686f,
383 // TUNE_SCALING_ARR_ATTENUATE_FINE
384 1.00000000f, 0.99942255f, 0.99884546f, 0.99826866f, 0.99769223f, 0.99711609f, 0.99654031f, 0.99596488f,
385 0.99538976f, 0.99481499f, 0.99424052f, 0.99366641f, 0.99309260f, 0.99251914f, 0.99194598f, 0.99137318f,
386 0.99080074f, 0.99022859f, 0.98965681f, 0.98908532f, 0.98851418f, 0.98794335f, 0.98737288f, 0.98680270f,
387 0.98623288f, 0.98566335f, 0.98509419f, 0.98452532f, 0.98395681f, 0.98338860f, 0.98282075f, 0.98225319f,
388 0.98168600f, 0.98111910f, 0.98055255f, 0.97998631f, 0.97942042f, 0.97885484f, 0.97828960f, 0.97772467f,
389 0.97716010f, 0.97659582f, 0.97603190f, 0.97546828f, 0.97490501f, 0.97434205f, 0.97377944f, 0.97321713f,
390 0.97265512f, 0.97209346f, 0.97153211f, 0.97097111f, 0.97041041f, 0.96985006f, 0.96929002f, 0.96873033f,
391 0.96817094f, 0.96761185f, 0.96705312f, 0.96649468f, 0.96593660f, 0.96537882f, 0.96482134f, 0.96426421f,
392 0.96370739f, 0.96315092f, 0.96259475f, 0.96203887f, 0.96148336f, 0.96092814f, 0.96037328f, 0.95981872f,
393 0.95926446f, 0.95871055f, 0.95815694f, 0.95760363f, 0.95705068f, 0.95649803f, 0.95594567f, 0.95539367f,
394 0.95484197f, 0.95429057f, 0.95373952f, 0.95318878f, 0.95263839f, 0.95208830f, 0.95153850f, 0.95098901f,
395 0.95043987f, 0.94989103f, 0.94934249f, 0.94879431f, 0.94824642f, 0.94769883f, 0.94715160f, 0.94660467f,
396 0.94605803f, 0.94551176f, 0.94496578f, 0.94442010f, 0.94387472f, 0.94332969f, 0.94278497f, 0.94224054f,
397 0.94169647f, 0.94115269f, 0.94060922f, 0.94006604f, 0.93952322f, 0.93898070f, 0.93843848f, 0.93789655f,
398 0.93735498f, 0.93681371f, 0.93627274f, 0.93573207f, 0.93519175f, 0.93465173f, 0.93411201f, 0.93357259f,
399 0.93303353f, 0.93249476f, 0.93195629f, 0.93141812f, 0.93088025f, 0.93034273f, 0.92980552f, 0.92926860f,
400 // TUNE_SCALING_ARR_ATTENUATE_COARSE
401 1.00000000f, 0.92873198f, 0.86254311f, 0.80107135f, 0.74398059f, 0.69095856f, 0.64171529f, 0.59598154f,
402 0.55350709f, 0.51405972f, 0.47742370f, 0.44339865f, 0.41179851f, 0.38245043f, 0.35519394f, 0.32987997f,
403 0.30637008f, 0.28453568f, 0.26425737f, 0.24542427f, 0.22793336f, 0.21168900f, 0.19660234f, 0.18259089f,
404 0.16957800f, 0.15749252f, 0.14626834f, 0.13584408f, 0.12616274f, 0.11717137f, 0.10882080f, 0.10106535f,
405 0.09386262f, 0.08717322f, 0.08096056f, 0.07519066f, 0.06983197f, 0.06485518f, 0.06023308f, 0.05594039f,
406 0.05195362f, 0.04825099f, 0.04481224f, 0.04161856f, 0.03865249f, 0.03589780f, 0.03333944f, 0.03096340f,
407 0.02875670f, 0.02670727f, 0.02480390f, 0.02303617f, 0.02139443f, 0.01986969f, 0.01845361f, 0.01713846f,
408 0.01591704f, 0.01478266f, 0.01372913f, 0.01275068f, 0.01184197f, 0.01099801f, 0.01021421f, 0.00948626f,
409 0.00881019f, 0.00818231f, 0.00759917f, 0.00705759f, 0.00655461f, 0.00608748f, 0.00565364f, 0.00525071f,
410 0.00487650f, 0.00452897f, 0.00420620f, 0.00390643f, 0.00362802f, 0.00336946f, 0.00312933f, 0.00290631f,
411 0.00269918f, 0.00250681f, 0.00232816f, 0.00216224f, 0.00200814f, 0.00186502f, 0.00173211f, 0.00160866f,
412 0.00149402f, 0.00138754f, 0.00128865f, 0.00119681f, 0.00111152f, 0.00103230f, 0.00095873f, 0.00089041f,
413 0.00082695f, 0.00076801f, 0.00071328f, 0.00066244f, 0.00061523f, 0.00057139f, 0.00053067f, 0.00049285f,
414 0.00045772f, 0.00042510f, 0.00039480f, 0.00036667f, 0.00034054f, 0.00031627f, 0.00029373f, 0.00027279f,
415 0.00025335f, 0.00023530f, 0.00021853f, 0.00020295f, 0.00018849f, 0.00017506f, 0.00016258f, 0.00015099f,
416 0.00014023f, 0.00013024f, 0.00012096f, 0.00011234f, 0.00010433f, 0.00009689f, 0.00008999f, 0.00008358f
417};

Referenced by au_compute_pitch_ratio().

◆ AU_FX_CUSTOM_PARAMS

s32* AU_FX_CUSTOM_PARAMS[0]
extern

Definition at line 103 of file reverb.c.

103 {
105};
s32 NULL_PARAMS[]
Definition reverb.c:94

Referenced by au_sfx_set_reverb_type(), and func_8005904C().

◆ CurrentSefCmdHandler

void(* CurrentSefCmdHandler) (SoundManager *, SoundPlayer *) ( SoundManager * ,
SoundPlayer *  )

Definition at line 421 of file sfx_player.c.