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

Go to the source code of this file.

Data Structures

struct  MusicTriggeredSound
 

Macros

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

Enumerations

enum  SoundEffectParamFlags {
  SFX_PARAM_MODE_BASIC = 0x00000000 , SFX_PARAM_MODE_SEQUENCE = 0x00000001 , SFX_PARAM_MODE_COMPACT = 0x00000002 , SFX_PARAM_MODE_MASK = 0x00000003 ,
  SFX_PARAM_LOCK_VOLUME = 0x00000004 , SFX_PARAM_LOCK_PAN = 0x00000008 , SFX_PARAM_LOCK_PITCH = 0x00000010 , SFX_PARAM_LOCK_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_begin_video_frame (SoundManager *manager)
 
s32 au_sfx_set_reverb_type (SoundManager *manager, s32 arg1)
 
void au_sfx_set_state (SoundManager *manager, s32 state)
 
void au_sfx_try_sound (SoundManager *manager, SoundRequest *request, SoundManagerCustomCmdList *customSEF)
 
s16 au_sfx_manager_audio_frame_update (SoundManager *manager)
 

Variables

s16 DummyInstrumentCodebook [32]
 
u8 DummyInstrumentWavData [190]
 
s32 CUSTOM_SMALL_ROOM_PARAMS []
 
s32 CUSTOM_ECHO_PARAMS_1 []
 
s32 CUSTOM_ECHO_PARAMS_2 []
 
s32 CUSTOM_ECHO_PARAMS_3 []
 
MusicTriggeredSound MusicSounds []
 
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 BgmTicksRates []
 
u8 BlankMseqData []
 
u16 PerceptualVolumeLevels []
 Volume steps use squared values so each level represents linear power increase, matching loudness perception.
 
EnvelopePreset DummyInstrumentEnvelope
 
u8 EnvelopePressDefault []
 
u8 EnvelopeReleaseDefault []
 
u8 EnvelopeReleaseDefaultFast []
 
s8 BgmCustomEnvLookup []
 
u8 AmbientSoundIDtoMSEQFileIndex []
 
s32 AuEnvelopeIntervals []
 
f32 AlTuneScaling []
 
s32AU_FX_CUSTOM_PARAMS [0]
 
void(* CurrentSefCmdHandler )(SoundManager *, SoundPlayer *)
 

Data Structure Documentation

◆ MusicTriggeredSound

struct MusicTriggeredSound
Data Fields
u16 sound
u16 prereq
u8 flags

Macro Definition Documentation

◆ SEC

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

Definition at line 357 of file sfx_player.c.

◆ NEXT_POLY_TRACK

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

Enumeration Type Documentation

◆ SoundEffectParamFlags

Enumerator
SFX_PARAM_MODE_BASIC 
SFX_PARAM_MODE_SEQUENCE 
SFX_PARAM_MODE_COMPACT 
SFX_PARAM_MODE_MASK 
SFX_PARAM_LOCK_VOLUME 
SFX_PARAM_LOCK_PAN 
SFX_PARAM_LOCK_PITCH 
SFX_PARAM_LOCK_REVERB 

Definition at line 54 of file sfx_player.c.

54 {
55 // 8 bytes: flags, instrument, volume, pan, reverb, pitch, randomPitch
56 SFX_PARAM_MODE_BASIC = 0x00000000,
57 // arbitrary sequence of commands
58 SFX_PARAM_MODE_SEQUENCE = 0x00000001,
59 // 4 bytes: flags, instrument, volume and randomPitch
60 SFX_PARAM_MODE_COMPACT = 0x00000002,
61 SFX_PARAM_MODE_MASK = 0x00000003,
62 // when flags below are set, these params can't be changed from api functions like sfx_play_sound_with_params
63 SFX_PARAM_LOCK_VOLUME = 0x00000004,
64 SFX_PARAM_LOCK_PAN = 0x00000008,
65 SFX_PARAM_LOCK_PITCH = 0x00000010,
66 SFX_PARAM_LOCK_REVERB = 0x00000020 // ignored SetReverb command
67};
@ SFX_PARAM_MODE_COMPACT
Definition sfx_player.c:60
@ SFX_PARAM_MODE_SEQUENCE
Definition sfx_player.c:58
@ SFX_PARAM_LOCK_PITCH
Definition sfx_player.c:65
@ SFX_PARAM_MODE_MASK
Definition sfx_player.c:61
@ SFX_PARAM_LOCK_VOLUME
Definition sfx_player.c:63
@ SFX_PARAM_LOCK_PAN
Definition sfx_player.c:64
@ SFX_PARAM_MODE_BASIC
Definition sfx_player.c:56
@ SFX_PARAM_LOCK_REVERB
Definition sfx_player.c:66

Function Documentation

◆ au_sfx_init()

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

Definition at line 466 of file sfx_player.c.

466 {
467 // odd choice of parameters, perhaps chosen for a very large LCM (67934687500)?
468 // gives a pseudo-random sfx update pattern
469 s32 c = 434782;
470 u32 i;
471
472 manager->globals = globals;
473 manager->nextUpdateStep = 312500;
474 manager->nextUpdateCounter = c;
475 manager->nextUpdateInterval = c;
476 manager->priority = priority;
477 manager->busID = busID;
478
479 if (minVoiceIdx > 16) {
480 manager->firstVoice = 16;
481 } else {
482 manager->firstVoice = minVoiceIdx;
483 }
484
485 manager->busVolume = AU_MAX_BUS_VOLUME;
486 manager->baseVolume = AU_MAX_BUS_VOLUME;
487 manager->frameCounter = 0;
488 manager->randomValue = 0;
489
490 for (i = 0; i < ARRAY_COUNT(manager->players); i++) {
491 SoundPlayer* player = &manager->players[i];
492
493 player->sefDataReadPos = NULL;
494 player->sfxVolume = 0;
495 player->delay = 0;
496 player->playLength = 0;
497 player->coarseTune = 0;
498 player->fineTune = 0;
499 player->sfxPan = 0;
500 player->reverb = 0;
501 player->instrumentIndex = 0;
502 player->envelopePreset = 0;
503 player->playVelocity = 0;
504 player->exclusiveID = 0;
505 player->cmdListOneShot[0] = 0; // will be set to bank
506 player->cmdListOneShot[1] = 0; // will be set to patch
507 player->cmdListOneShot[2] = 0; // will be set to volume
508 player->cmdListOneShot[3] = AU_PAN_MID; // default pan
509 player->cmdListOneShot[4] = 0; // reverb
510 player->cmdListOneShot[5] = 0x80 + (DEFAULT_KEYBASE / 100); // default tune, higher bit is meaningless
511 player->cmdListOneShot[6] = 0; // random pitch
512 player->cmdListOneShot[7] = 0; // unused
513 }
514
515 for (i = 0; i < ARRAY_COUNT(manager->bgmSounds); i++) {
516 manager->bgmSounds[i].raw = 0;
517 }
518
519 for (i = 0; i < ARRAY_COUNT(manager->customCmdList); i++) {
520 manager->customCmdList[i].data[0] = 0;
521 }
522
523 manager->resetPending = FALSE;
527 au_fade_set_volume(manager->busID, manager->fadeInfo.baseVolume >> 16, manager->busVolume);
528 manager->lastCustomEffectIdx = 0xFF;
529
530 manager->customReverbParams[0] = CUSTOM_SMALL_ROOM_PARAMS;
531 manager->customReverbParams[1] = CUSTOM_ECHO_PARAMS_1;
532 manager->customReverbParams[2] = CUSTOM_ECHO_PARAMS_2;
533 manager->customReverbParams[3] = CUSTOM_ECHO_PARAMS_3;
534 manager->customReverbParams[4] = CUSTOM_ECHO_PARAMS_3;
535 manager->customReverbParams[5] = CUSTOM_ECHO_PARAMS_3;
536 manager->customReverbParams[6] = CUSTOM_ECHO_PARAMS_3;
537 manager->customReverbParams[7] = CUSTOM_ECHO_PARAMS_3;
538
539 manager->customReverbAmounts[0] = 0x10;
540 manager->customReverbAmounts[1] = 0x20;
541 manager->customReverbAmounts[2] = 0x20;
542 manager->customReverbAmounts[3] = 0x20;
543 manager->customReverbAmounts[4] = 0x20;
544 manager->customReverbAmounts[5] = 0x30;
545 manager->customReverbAmounts[6] = 0x40;
546 manager->customReverbAmounts[7] = 0x50;
547
549}
BSS s32 PopupMenu_SelectedIndex
u8 cmdListOneShot[8]
Definition audio.h:734
@ SND_MANAGER_STATE_ENABLED
Definition audio.h:364
u8 instrumentIndex
Definition audio.h:753
u16 playLength
Definition audio.h:743
AuFilePos sefDataReadPos
Definition audio.h:721
s16 coarseTune
Definition audio.h:744
u8 reverb
Definition audio.h:752
u8 envelopePreset
Definition audio.h:754
#define AU_PAN_MID
Definition audio.h:66
u8 exclusiveID
Definition audio.h:749
#define DEFAULT_KEYBASE
Definition audio.h:59
s16 sfxVolume
Definition audio.h:730
s8 fineTune
Definition audio.h:745
u16 delay
Definition audio.h:742
#define AU_MAX_VOLUME_16
Definition audio.h:62
#define AU_MAX_BUS_VOLUME
Definition audio.h:40
u8 playVelocity
Definition audio.h:755
u8 sfxPan
Definition audio.h:751
void au_fade_init(Fade *fade, s32 time, s32 startValue, s32 endValue)
Definition engine.c:417
void au_fade_set_volume(u8 arg0, u16 arg1, s32 arg2)
Definition engine.c:453
#define ARRAY_COUNT(arr)
Definition macros.h:40
s32 CUSTOM_ECHO_PARAMS_1[]
Definition sfx_player.c:103
s32 CUSTOM_SMALL_ROOM_PARAMS[]
Definition sfx_player.c:92
void au_sfx_set_state(SoundManager *manager, s32 state)
Definition sfx_player.c:739
s32 CUSTOM_ECHO_PARAMS_3[]
Definition sfx_player.c:121
s32 CUSTOM_ECHO_PARAMS_2[]
Definition sfx_player.c:112
void au_sfx_clear_queue(SoundManager *manager)
Definition sfx_player.c:571
s32 au_sfx_set_reverb_type(SoundManager *manager, s32 arg1)
Definition sfx_player.c:719

Referenced by au_engine_init().

◆ au_sfx_load_groups_from_SEF()

void au_sfx_load_groups_from_SEF ( SoundManager * manager)

Definition at line 551 of file sfx_player.c.

551 {
552 SEFHeader* sefData = manager->globals->dataSEF;
553 s32 sections = ARRAY_COUNT(sefData->sections);
554 u32 i;
555
556 manager->sefData = (u8*)sefData;
557
558 for (i = 0; i < sections; i++) {
559 if (sefData->sections[i] != 0) {
560 manager->normalSounds[i] = AU_FILE_RELATIVE(sefData, sefData->sections[i]);
561 }
562 }
563
564 if (sefData->hasExtraSection == 1) {
565 if (sefData->section2000 != 0) {
566 manager->extraSounds = AU_FILE_RELATIVE(sefData, sefData->section2000);
567 }
568 }
569}
#define AU_FILE_RELATIVE(base, offset)
Definition audio.h:43
u16 sections[8]
Definition audio.h:947
u16 section2000
Definition audio.h:948
u8 hasExtraSection
Definition audio.h:945

Referenced by au_engine_init().

◆ au_sfx_clear_queue()

void au_sfx_clear_queue ( SoundManager * manager)

Definition at line 571 of file sfx_player.c.

571 {
572 s32 i;
573
574 for (i = 0; i < SFX_QUEUE_SIZE; i++) {
575 manager->soundQueue[i].soundID = SOUND_NONE;
576 manager->soundQueue[i].toReplaceID = SOUND_NONE;
577 manager->soundQueue[i].volume = 0;
578 manager->soundQueue[i].pitchShift = 0;
579 manager->soundQueue[i].pan = 0;
580 }
581
582 manager->unused_165 = 0;
583 manager->sfxQueueWritePos = 0;
584 manager->sfxQueueReadPos = 0;
585 manager->unused_162 = 0;
586}
#define SFX_QUEUE_SIZE
Definition audio.h:108
@ SOUND_NONE
Definition enums.h:550

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 590 of file sfx_player.c.

590 {
591 // Determine the number of pending sound effects in the queue
592 s32 pending = manager->sfxQueueWritePos - manager->sfxQueueReadPos;
593 if (pending < 0) {
595 }
596
597 // Only enqueue if there's room in the buffer
598 if (pending < SFX_QUEUE_SIZE) {
599 u32 nextPos = manager->sfxQueueWritePos;
600
601 manager->soundQueue[nextPos].soundID = soundID & (SOUND_ID_LOWER | SOUND_ID_STOP | SOUND_ID_ADJUST | SOUND_ID_TRIGGER_MASK);
602 manager->soundQueue[nextPos].toReplaceID = (soundID & SOUND_ID_UPPER_MASK) >> 0x10;
603 manager->soundQueue[nextPos].volume = volume;
604 manager->soundQueue[nextPos].pitchShift = pitchShift;
605 manager->soundQueue[nextPos].pan = pan;
606
607 nextPos++;
608 if (nextPos >= SFX_QUEUE_SIZE) {
609 nextPos = 0;
610 }
611
612 manager->sfxQueueWritePos = nextPos;
613 }
614}
@ SOUND_ID_UPPER_MASK
Definition enums.h:537
@ 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_begin_video_frame()

void au_sfx_begin_video_frame ( SoundManager * manager)

Definition at line 618 of file sfx_player.c.

618 {
621 u32 i, j, k;
622 s32 pending;
623
624 manager->frameCounter++;
625 if (manager->resetPending) {
626 au_sfx_reset_players(manager);
627 manager->resetPending = FALSE;
628 }
629
630 // Process sound effects triggered by music via BGM_SPECIAL_TRIGGER_SOUND
631 for (i = 0; i < ARRAY_COUNT(manager->bgmSounds); i++) {
632 k = manager->bgmSounds[i].index;
633 if (k == 0) {
634 // do nothing
635 } else if (k <= ARRAY_COUNT(MusicSounds)) {
637 u16 prereq = triggered->prereq;
638 if (prereq != 0) {
639 // try playing sound ONLY IF prereq sound is already playing
640 for (j = 0; j < ARRAY_COUNT(manager->players); j++) {
641 if (manager->players[j].curSoundID == prereq) {
642 newRequest.soundID = triggered->sound;
643 newRequest.toReplaceID = SOUND_NONE;
644 newRequest.pitchShift = 0;
645 if ((triggered->flags & 1) && (manager->bgmSounds[i].volume != 0)) {
646 newRequest.volume = (manager->bgmSounds[i].volume << 8) + 0xFF;
647 } else {
648 newRequest.volume = 0;
649 }
650 newRequest.pan = 0;
652 break;
653 }
654 }
655 } else {
656 // no prereq defined, unconditionally play the sound
657 newRequest.soundID = triggered->sound;
658 newRequest.toReplaceID = SOUND_NONE;
659 newRequest.volume = 0;
660 newRequest.pitchShift = 0;
661 newRequest.pan = 0;
663 }
664 }
665 // clear the event
666 manager->bgmSounds[i].raw = 0;
667 }
668
669 // Process sound effects triggered by SEF command 17
670 for (i = 0; i < ARRAY_COUNT(manager->customCmdList); i++) {
671 if (manager->customCmdList[i].data[0] != 0) {
672 newRequest.soundID = 1;
673 newRequest.toReplaceID = SOUND_NONE;
674 newRequest.volume = 0;
675 newRequest.pitchShift = 0;
676 newRequest.pan = 0;
677 au_sfx_try_sound(manager, &newRequest, &manager->customCmdList[i]);
678 }
679 manager->customCmdList[i].data[0] = 0;
680 }
681
682 // Determine the number of pending sound effects in the queue
683 pending = manager->sfxQueueWritePos - manager->sfxQueueReadPos;
684 if (pending < 0) {
686 }
687
688 // Process each pending sound effect in the queue
689 j = manager->sfxQueueReadPos;
690 if (pending > 0 && pending < SFX_QUEUE_SIZE) {
691 for (i = 0; i < pending; i++) {
692 request = &manager->soundQueue[j];
693 if (request->soundID & SOUND_ID_LOWER) {
694 if (request->soundID & SOUND_ID_STOP) {
695 au_sfx_stop_by_id(manager, request->soundID);
696 } else if (!(request->soundID & (SOUND_ID_ADJUST | SOUND_ID_TRIGGER_MASK))) {
698 } else {
699 if (request->soundID & SOUND_ID_TRIGGER_MASK) {
700 au_sfx_set_triggers(manager, request->soundID);
701 }
702 if (request->soundID & SOUND_ID_ADJUST) {
703 au_sfx_set_modifiers(manager, request);
704 }
705 }
706 }
707 request->soundID = SOUND_NONE;
708
709 j++;
710 if (j >= SFX_QUEUE_SIZE) {
711 j = 0;
712 }
713 }
714 manager->sfxQueueReadPos = manager->sfxQueueWritePos;
715 }
716}
MusicTriggeredSound MusicSounds[]
Definition sfx_player.c:129
void au_sfx_try_sound(SoundManager *manager, SoundRequest *request, SoundManagerCustomCmdList *customSEF)
Definition sfx_player.c:747

Referenced by au_update_clients_for_video_frame().

◆ au_sfx_set_reverb_type()

s32 au_sfx_set_reverb_type ( SoundManager * manager,
s32 arg1 )

Definition at line 719 of file sfx_player.c.

719 {
720 s32 customIdx = (u8) arg1;
721
722 if (customIdx != 0xF0) {
723 if (customIdx < ARRAY_COUNT(manager->customReverbParams)) {
724 if (manager->lastCustomEffectIdx != customIdx) {
725 manager->lastCustomEffectIdx = customIdx;
726 manager->globals->effectChanges[FX_BUS_SOUND].type = AU_FX_CUSTOM_0;
727 manager->globals->effectChanges[FX_BUS_SOUND].changed = TRUE;
728 AU_FX_CUSTOM_PARAMS[0] = manager->customReverbParams[customIdx];
729 }
730 manager->defaultReverbAmt = manager->customReverbAmounts[customIdx];
731 } else {
732 manager->lastCustomEffectIdx = 0xFF;
733 manager->defaultReverbAmt = 0;
734 }
735 }
736 return manager->lastCustomEffectIdx;
737}
@ AU_FX_CUSTOM_0
Definition audio.h:161
@ FX_BUS_SOUND
Definition audio.h:235
s32 * AU_FX_CUSTOM_PARAMS[0]
Definition reverb.c:106

Referenced by au_set_reverb_type(), and au_sfx_init().

◆ au_sfx_set_state()

void au_sfx_set_state ( SoundManager * manager,
s32 state )

Definition at line 739 of file sfx_player.c.

739 {
740 if (state == SND_MANAGER_STATE_ENABLED) {
741 manager->state = state;
742 } else if (state == SND_MANAGER_STATE_DISABLED) {
743 manager->state = state;
744 }
745}
@ SND_MANAGER_STATE_DISABLED
Definition audio.h:365

Referenced by au_sfx_init(), snd_disable_sfx(), and snd_enable_sfx().

◆ au_sfx_try_sound()

void au_sfx_try_sound ( SoundManager * manager,
SoundRequest * request,
SoundManagerCustomCmdList * customSEF )

Definition at line 747 of file sfx_player.c.

747 {
748 SoundPlayer* player;
749 s32 playerIndex;
750 u16* cmdList;
753 u32 exclusiveID;
757 s32 v1;
758 s32* normalSounds;
759
760 #define NEXT_POLY_TRACK trackCount--; if (trackCount <= 0 ) { break; } cmdList += 2;
761
762 u32 soundIndex = (request->soundID - 1) & 0xFF;
764 u16 soundID = request->soundID;
765
766 if (soundID & SOUND_ID_UNK) {
767 // sound from extra section
768 soundIndex = (request->soundID - 1) & SOUND_ID_UNK_INDEX_MASK;
769 if (soundIndex < 0x140) {
770 cmdList = (u16*)&manager->extraSounds[soundIndex];
771 if (*cmdList != 0) {
772 // check if any player is playing this sound
773 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
774 player = &manager->players[playerIndex];
775 if (player->curSoundID == soundIDLower) {
777 break;
778 }
779 }
780
781 if (!foundPlayer) {
782 //find free player
783 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
784 player = &manager->players[playerIndex];
785 if (player->sefDataReadPos == NULL) {
787 break;
788 }
789 }
790 }
791
792 if (foundPlayer) {
793 au_sfx_play_sound(manager, player, (s8*)cmdList, request, 0, 0);
794 }
795 }
796 }
797 } else {
798 if (soundIndex >= 0xC0) {
799 if (customSEF != NULL) {
800 cmdList = (u16*)customSEF;
801 } else {
802 sectionIndex = ((soundIDLower - 1) >> 8) + 4;
803 normalSounds = manager->normalSounds[sectionIndex];
804 v1 = soundIndex - 0xC0;
805 cmdList = (u16*)&manager->normalSounds[sectionIndex][v1];
806 }
807
808 if (*cmdList != 0) {
809 // check if any player is playing this sound
810 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
811 player = &manager->players[playerIndex];
812 if (player->curSoundID == soundIDLower) {
814 break;
815 }
816 }
817
818 if (!foundPlayer) {
819 //find free player
820 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
821 player = &manager->players[playerIndex];
822 if (player->sefDataReadPos == NULL) {
824 break;
825 }
826 }
827 }
828
829 if (foundPlayer) {
830 au_sfx_play_sound(manager, player, (u8*)cmdList, request, 0, 0);
831 }
832 }
833 } else {
834 if (customSEF != NULL) {
835 cmdList = (u16*)customSEF;
836 } else {
837 sectionIndex = ((soundID) >> 8) & 3;
838 cmdList = (u16*)&manager->normalSounds[sectionIndex][soundIndex];
839 }
840
841 if (*cmdList != 0) {
842 // read sound info chunk
843 soundInfo = cmdList[1];
844
845 priority = (soundInfo & 0x300) >> 8; // bits 8, 9
846 polyphonyMode = (soundInfo & 0x60) >> 5; // bits 5, 6,
848 useSpecificPlayerMode = (useSpecificPlayerMode & 0x80) >> 7; // bit 7
849
850 if (polyphonyMode == 0) {
851 if (request->toReplaceID != SOUND_NONE) {
852 for (playerIndex = 0; playerIndex < 8; playerIndex++) {
853 player = &manager->players[playerIndex];
854 if (player->curSoundID == request->toReplaceID) {
856 break;
857 }
858 }
859 }
860
861 if (useSpecificPlayerMode == 0) {
862 if (!foundPlayer) {
863 playerIndex = soundInfo & 0x7;
864 player = &manager->players[playerIndex];
865 if (player->sefDataReadPos == NULL || priority >= player->priority) {
866 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), request, priority, 0);
867 }
868 return;
869 }
870 }
871
872 if (!foundPlayer) {
873 // lower 4 bits of soundInfo: max playerIndex
874 // check if any player is playing this sound
875 for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) {
876 player = &manager->players[playerIndex];
877 if (player->curSoundID == soundIDLower) {
879 break;
880 }
881 }
882 }
883
884 if (!foundPlayer) {
885 // find free player
886 for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) {
887 player = &manager->players[playerIndex];
888 if (player->sefDataReadPos == NULL) {
890 break;
891 }
892 }
893 }
894
895 if (!foundPlayer) {
896 // if there is no free player try stealing one with lower priority
897 for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) {
898 player = &manager->players[playerIndex];
899 if (player->priority < priority) {
901 break;
902 }
903 }
904 }
905
906 if (!foundPlayer) {
907 playerIndex = soundInfo & 0x7;
908 player = &manager->players[playerIndex];
909 if (player->priority <= priority) {
911 }
912 }
913
914 if (foundPlayer) {
915 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), request, priority, 0);
916 }
917 } else {
918 cmdList = AU_FILE_RELATIVE(manager->sefData, *cmdList);
919 exclusiveID = (soundInfo & 0x1800) >> 11; // bits 11, 12
920 if (exclusiveID != 0) {
921 au_sfx_stop_by_exlusive_id(manager, exclusiveID);
922 } else {
923 au_sfx_stop_by_id(manager, request->soundID);
924 }
925
926 trackCount = 2 << (polyphonyMode - 1); // 2 or 4 or 8
927
928 if (useSpecificPlayerMode != 0) {
929 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
930 if (*cmdList != 0) {
931 // first check the players that were stopped just now
932 player = &manager->players[playerIndex];
933 if (player->sefDataReadPos == BlankSEFData) {
934 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), request, priority, exclusiveID);
936 }
937 } else {
939 }
940
941 }
942
943 if (trackCount != 0) {
944 for (playerIndex = 7; playerIndex >= 0;){
945 if (*cmdList != 0) {
946 // then check any free players
947 player = &manager->players[playerIndex];
948 if (player->sefDataReadPos == NULL) {
949 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), request, priority, exclusiveID);
951 }
952 playerIndex--;
953 } else {
955 }
956 }
957 }
958
959 if (trackCount != 0) {
960 for (playerIndex = 7; playerIndex >= 0; playerIndex--) {
961 if (*cmdList != 0) {
962 // then try to steal
963 player = &manager->players[playerIndex];
964 if (exclusiveID > player->exclusiveID && priority >= player->priority) {
965 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), request, priority, exclusiveID);
967 }
968 } else {
970 }
971 }
972 }
973 } else {
974 s32 i;
975 for (i = 0; i < trackCount; i++) {
976 if (*cmdList != 0) {
977 soundInfo = cmdList[1];
978 playerIndex = soundInfo & 7;
979 player = &manager->players[playerIndex];
980 priority = (soundInfo & 0x300) >> 8; // bits 8, 9
981 if (player->sefDataReadPos == NULL || priority >= player->priority) {
982 au_sfx_play_sound(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), request, priority, exclusiveID);
983 }
984 cmdList += 2;
985 }
986 }
987 }
988 }
989 }
990 }
991 }
992 #undef NEXT_POLY_TRACK
993}
u8 priority
Definition audio.h:748
u16 curSoundID
Definition audio.h:747
@ SOUND_ID_UNK_INDEX_MASK
Definition enums.h:535
@ SOUND_ID_UNK
Definition enums.h:528
#define NEXT_POLY_TRACK
u8 BlankSEFData[]
Definition sfx_player.c:228

Referenced by au_sfx_begin_video_frame().

◆ au_sfx_manager_audio_frame_update()

s16 au_sfx_manager_audio_frame_update ( SoundManager * manager)

Definition at line 1139 of file sfx_player.c.

1139 {
1140 SoundPlayer* player;
1141 AuVoice* voice;
1143 u8 end;
1144 u8 i;
1145
1146 // update pseudorandom number with fast 'good enough' method
1147 manager->randomValue = (u16)manager->randomValue + (u16)manager->frameCounter;
1148
1149 startVoice = manager->firstVoice;
1150 for (i = startVoice, end = startVoice + ARRAY_COUNT(manager->players); i < end; i++) {
1151 player = &manager->players[i - manager->firstVoice];
1152 if (player->sefDataReadPos != NULL) {
1153 voice = &manager->globals->voices[i];
1154 manager->curVoice = voice;
1155 if (voice->priority <= manager->priority) {
1156 manager->curVoiceIndex = i;
1157 switch (player->sfxParamsFlags & SFX_PARAM_MODE_MASK) {
1159 au_sfx_update_basic(manager, player, voice, i);
1160 break;
1162 au_sfx_update_sequence(manager, player, voice, i);
1163 break;
1165 break;
1166 }
1167 } else {
1168 player->sefDataReadPos = NULL;
1169 player->curSoundID = SOUND_NONE;
1170 player->priority = 0;
1171 }
1172 }
1173 }
1174 return 0;
1175}
u8 sfxParamsFlags
Definition audio.h:750

Referenced by au_update_clients_for_audio_frame().

Variable Documentation

◆ DummyInstrumentCodebook

s16 DummyInstrumentCodebook[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 69 of file sfx_player.c.

69 {
70 0xF803, 0x0125, 0x07D0, 0xFDBC, 0xF886, 0x0355, 0x06FC, 0xFBAB,
71 0xFEDA, 0xF82D, 0x0245, 0x077D, 0xFCA9, 0xF901, 0x0456, 0x065D,
72 0xFC33, 0xFBB2, 0xFCEF, 0xFE94, 0xFFD8, 0x0080, 0x00A4, 0x007D,
73 0x090E, 0x0673, 0x02FF, 0x0053, 0xFEF2, 0xFEA7, 0xFEF9, 0xFF7B
74};

◆ DummyInstrumentWavData

u8 DummyInstrumentWavData[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 76 of file sfx_player.c.

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

◆ 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 92 of file sfx_player.c.

92 {
93 /* sections length */
94 3, 11,
95 /* chorus chorus filter
96 input output fbcoef ffcoef gain rate depth coef */
97 0, 9, 9830, -9830, 0, 0, 0, 0,
98 3, 7, 3276, -3276, 0x3FFF, 0, 0, 0,
99 0, 10, 5000, 0, 0, 0, 0, 0x5000
100};

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 103 of file sfx_player.c.

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

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 112 of file sfx_player.c.

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

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 121 of file sfx_player.c.

121 {
122 /* sections length */
123 1, 14,
124 /* chorus chorus filter
125 input output fbcoef ffcoef gain rate depth coef */
126 0, 13, 20000, 0, 0x7FFF, 0, 0, 0x7FFF
127};

Referenced by au_sfx_init().

◆ MusicSounds

MusicTriggeredSound MusicSounds[]
Initial value:
= {
{
.sound = SOUND_SHORT_CLAP,
.flags = 1
}
}
@ SOUND_LRAW_CHEERING
Definition enums.h:1154
@ SOUND_SHORT_CLAP
Definition enums.h:1155

Definition at line 129 of file sfx_player.c.

129 {
130 {
131 .sound = SOUND_SHORT_CLAP,
132 .prereq = SOUND_LRAW_CHEERING,
133 .flags = 1
134 }
135};

Referenced by au_sfx_begin_video_frame().

◆ SFXEnvelopeFast

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

Definition at line 138 of file sfx_player.c.

138 {
139 .count = 1,
140 .offsets = { { 0x08, 0x12 } },
141};

◆ SFXEnvelopeFastData

u8 SFXEnvelopeFastData[]
Initial value:
= {
}
@ ENV_CMD_END
Definition audio.h:257
@ ENV_TIME_1400MS
Definition audio.h:300
@ ENV_TIME_3S
Definition audio.h:290
@ ENV_TIME_1S
Definition audio.h:304
@ ENV_TIME_900MS
Definition audio.h:306
@ ENV_TIME_290MS
Definition audio.h:321

Definition at line 143 of file sfx_player.c.

143 {
144 // press
145 ENV_TIME_290MS, 127,
146 ENV_TIME_900MS, 127,
147 ENV_TIME_1S, 95,
148 ENV_TIME_3S, 0,
149 ENV_CMD_END, 0,
150 // release
152 ENV_CMD_END, 0
153};

◆ SFXEnvelopeSlow

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

Definition at line 155 of file sfx_player.c.

155 {
156 .count = 1,
157 .offsets = { { 0x08, 0x1A } },
158};

◆ SFXEnvelopeSlowData

u8 SFXEnvelopeSlowData[]
Initial value:
= {
}
@ ENV_TIME_1100MS
Definition audio.h:303
@ ENV_TIME_1800MS
Definition audio.h:296
@ ENV_TIME_450MS
Definition audio.h:315

Definition at line 160 of file sfx_player.c.

160 {
161 // press
162 ENV_TIME_290MS, 127,
163 ENV_TIME_1800MS, 127,
164 ENV_TIME_290MS, 63,
165 ENV_TIME_1100MS, 31,
166 ENV_TIME_1100MS, 15,
170 ENV_CMD_END, 0,
171 // release
173 ENV_CMD_END, 0,
174};

◆ D_800783B0

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

Definition at line 177 of file sfx_player.c.

177 {
178 0x34337F26, 0x3F1600FF, 0x343B7F3B, 0x3FFF0000
179};

◆ 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_SetRandomUnused,
au_SEFCmd_16_SetEnvelopePress,
au_SEFCmd_17_PlaySound,
au_SEFCmd_18_SetAlternativeVolume
}

Definition at line 200 of file sfx_player.c.

200 {
201 au_SEFCmd_00_SetVolume,
202 au_SEFCmd_01_SetPan,
203 au_SEFCmd_02_SetInstrument,
204 au_SEFCmd_03_SetReverb,
205 au_SEFCmd_04_SetEnvelope,
206 au_SEFCmd_05_CoarseTune,
207 au_SEFCmd_06_FineTune,
208 au_SEFCmd_07_WaitForEnd,
209 au_SEFCmd_08_PitchSweep,
210 au_SEFCmd_09_StartLoop,
211 au_SEFCmd_0A_EndLoop,
212 au_SEFCmd_0B_WaitForRelease,
213 au_SEFCmd_0C_SetCurrentVolume,
214 au_SEFCmd_0D_VolumeRamp,
215 au_SEFCmd_0E_SetAlternativeSound,
216 au_SEFCmd_0F_Stop,
217 au_SEFCmd_10_Jump,
218 au_SEFCmd_11_Restart,
219 au_SEFCmd_12_NOP,
220 au_SEFCmd_13_SetRandomPitch,
221 au_SEFCmd_14_SetRandomVelocity,
222 au_SEFCmd_15_SetRandomUnused,
223 au_SEFCmd_16_SetEnvelopePress,
224 au_SEFCmd_17_PlaySound,
225 au_SEFCmd_18_SetAlternativeVolume
226};

◆ BlankSEFData

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

Definition at line 228 of file sfx_player.c.

228 {
229 0x00, 0x00, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00
232};

Referenced by au_sfx_try_sound().

◆ SeqCmdHandlers

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

Definition at line 237 of file sfx_player.c.

237 {
270};
void au_BGMCmd_F1_TrackTremoloRate(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F7_ReverbType(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FF_Special(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FD_EventTrigger(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FC_Branch(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_FE_Detour(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F4_SubTrackRandomPan(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E3(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EA_InstrumentPan(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_ED_InstrumentCoarseTune(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EC_TrackVolume(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E2_MasterDetune(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E5_MasterVolumeFade(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_EE_InstrumentFineTune(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F5_UseInstrument(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EC_TrackDetune(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_NOP(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F2_TrackTremoloDepth(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E6_MasterEffect(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EB_InstrumentReverb(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E9_InstrumentVolume(BGMPlayer *arg0, BGMPlayerTrack *track)
void au_BGMCmd_F6_InstrumentVolumeLerp(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)

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 272 of file sfx_player.c.

272 {
273 2, 1, 1, 1, 4, 3, 2, 0,
274 2, 1, 1, 1, 1, 1, 1, 2,
275 3, 1, 1, 0, 2, 1, 3, 1,
276 0, 0, 0, 0, 3, 3, 3, 3
277};

Referenced by au_bgm_player_update_playing().

◆ BgmTicksRates

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

Definition at line 279 of file sfx_player.c.

279 {
280 48, 24, 32, 40, 48, 56, 64, 48,
281 0, 0, 0, 0, 0, 0, 0, 0
282};

Referenced by au_bgm_begin_video_frame(), and au_bgm_process_init_song().

◆ BlankMseqData

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

Definition at line 287 of file sfx_player.c.

287 {
288 0x00, 0x00, 0x00, 0x00,
289 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x00,
291 0x00, 0x00, 0x00, 0x00
292};

Referenced by au_mseq_player_update(), and au_mseq_stop_quick().

◆ PerceptualVolumeLevels

u16 PerceptualVolumeLevels[]
Initial value:
= {
}
@ VOL_LEVEL_FULL
Definition enums.h:1822
@ VOL_LEVEL_5
Definition enums.h:1819
@ VOL_LEVEL_2
Definition enums.h:1816
@ VOL_LEVEL_4
Definition enums.h:1818
@ VOL_LEVEL_MUTE
Definition enums.h:1814
@ VOL_LEVEL_6
Definition enums.h:1820
@ VOL_LEVEL_3
Definition enums.h:1817
@ VOL_LEVEL_7
Definition enums.h:1821
@ VOL_LEVEL_1
Definition enums.h:1815
#define SQ(x)
Definition macros.h:178

Volume steps use squared values so each level represents linear power increase, matching loudness perception.

This makes each step sound evenly spaced.

Definition at line 299 of file sfx_player.c.

299 {
300 [VOL_LEVEL_MUTE] 0, // 0.0 %
301 [VOL_LEVEL_1] AU_MAX_BUS_VOLUME * SQ(0.125), // 1.5625 %
302 [VOL_LEVEL_2] AU_MAX_BUS_VOLUME * SQ(0.250), // 6.25 %
303 [VOL_LEVEL_3] AU_MAX_BUS_VOLUME * SQ(0.375), // 14.0625 %
304 [VOL_LEVEL_4] AU_MAX_BUS_VOLUME * SQ(0.500), // 25.0 %
305 [VOL_LEVEL_5] AU_MAX_BUS_VOLUME * SQ(0.625), // 39.0625 %
306 [VOL_LEVEL_6] AU_MAX_BUS_VOLUME * SQ(0.750), // 56.25 %
307 [VOL_LEVEL_7] AU_MAX_BUS_VOLUME * SQ(0.875), // 76.5625 %
309};

Referenced by au_set_bus_volume_level().

◆ DummyInstrumentEnvelope

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

Definition at line 312 of file sfx_player.c.

312 {
313 .count = 1,
314 .offsets = { { 0x8, 0xC } }, // EnvelopePressDefault, EnvelopePressDefault
315};

◆ EnvelopePressDefault

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

Definition at line 317 of file sfx_player.c.

317 {
318 ENV_TIME_280MS, 127,
319 ENV_CMD_END, 0
320};

Referenced by au_get_instrument().

◆ EnvelopeReleaseDefault

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

Definition at line 322 of file sfx_player.c.

322 {
324 ENV_CMD_END, 0
325};

◆ EnvelopeReleaseDefaultFast

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

Definition at line 327 of file sfx_player.c.

327 {
329 ENV_CMD_END, 0
330};

Referenced by au_bgm_set_linked_tracks().

◆ BgmCustomEnvLookup

s8 BgmCustomEnvLookup[]
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 335 of file sfx_player.c.

335 {
336 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x58, 0x56, 0x53,
337 0x51, 0x4F, 0x4A, 0x45, 0x40, 0x3B, 0x37, 0x35,
338 0x33, 0x31, 0x2F, 0x2D, 0x2B, 0x29, 0x27, 0x26,
339 0x25, 0x23, 0x21, 0x20, 0x1F, 0x1E, 0x1D, 0x1C,
340 0x1B, 0x1A, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14
341};

Referenced by au_BGMCmd_FF_Special().

◆ 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 346 of file sfx_player.c.

346 {
347 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
348 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
349 0x13, 0x14, 0x15, 0x16, 0x17, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
351};

◆ AuEnvelopeIntervals

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

Definition at line 359 of file sfx_player.c.

359 {
360 SEC(60), SEC(55), SEC(50), SEC(45), SEC(40), SEC(35), SEC(30), SEC(27.5), SEC(25), SEC(22.5),
361 SEC(20), SEC(19), SEC(18), SEC(17), SEC(16), SEC(15), SEC(14), SEC(13), SEC(12), SEC(11),
362 SEC(10), SEC(9), SEC(8), SEC(7), SEC(6), SEC(5), SEC(4.5), SEC(4), SEC(3.5), SEC(3),
363 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),
364 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),
365 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),
366 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),
367 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),
370 4 * AU_FRAME_USEC, 3 * AU_FRAME_USEC, 2 * AU_FRAME_USEC, 1 * AU_FRAME_USEC, 0, 0, 0, 0, 0, 0,
371};
#define SEC(x)
Definition sfx_player.c:357

Referenced by au_update_voices(), and au_voice_start().

◆ AlTuneScaling

f32 AlTuneScaling[]

Definition at line 378 of file sfx_player.c.

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

Referenced by au_compute_pitch_ratio().

◆ AU_FX_CUSTOM_PARAMS

s32* AU_FX_CUSTOM_PARAMS[0]
extern

Definition at line 106 of file reverb.c.

106 {
108};
s32 NULL_PARAMS[]
Definition reverb.c:97

Referenced by au_fx_load_preset(), and au_sfx_set_reverb_type().

◆ CurrentSefCmdHandler

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

Definition at line 464 of file sfx_player.c.