/*---------------------------------------------------------------------------* Project: Mixer application for AX File: mix.h Copyright (C)1998-2011 Nintendo. All Rights Reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #ifndef __MIX_H__ #define __MIX_H__ #include // #include // ***TBD*** temporarily copy the bits needed from sc.h here // sc functionality yet to be implemented #define SC_SOUND_MODE_MONO 0u #define SC_SOUND_MODE_STEREO 1u #define SC_SOUND_MODE_SURROUND 2u #ifdef __cplusplus extern "C" { #endif /*---------------------------------------------------------------------------* MOV aliases for enum *---------------------------------------------------------------------------*/ #define movFader drcFader #define movPan drcPan #define movAux drcAux #define MIXMOVInitChannel MIXDRCInitChannel #define MIXMOVAuxPostFader MIXDRCAuxPostFader #define MIXMOVAuxPreFader MIXDRCAuxPreFader #define MIXMOVAuxIsPostFader MIXDRCAuxIsPostFader #define MIXMOVSetAux MIXDRCSetAux #define MIXMOVAdjustAux MIXDRCAdjustAux #define MIXMOVGetAux MIXDRCGetAux #define MIXMOVSetPan MIXDRCSetPan #define MIXMOVSetSPan MIXDRCSetSPan #define MIXMOVAdjustPan MIXDRCAdjustPan #define MIXMOVGetPan MIXDRCGetPan #define MIXMOVSetFader MIXDRCSetFader #define MIXMOVAdjustFader MIXDRCAdjustFader #define MIXMOVGetFader MIXDRCGetFader /*---------------------------------------------------------------------------* mixer sound mode definitions *---------------------------------------------------------------------------*/ #define MIX_SOUND_MODE_MONO SC_SOUND_MODE_MONO #define MIX_SOUND_MODE_STEREO SC_SOUND_MODE_STEREO #define MIX_SOUND_MODE_SURROUND SC_SOUND_MODE_SURROUND #define MIX_SOUND_MODE_DPL2 3 #define MIX_SOUND_MODE_6CHAN 4 /*---------------------------------------------------------------------------* mixer channel mode definitions *---------------------------------------------------------------------------*/ #define MIX_MODE_AUXA_PREFADER 0x00000001 #define MIX_MODE_AUXB_PREFADER 0x00000002 #define MIX_MODE_AUXC_PREFADER 0x00000004 #define MIX_MODE_MUTE 0x00000008 #define MIX_MODE_MOV_PREFADER MIX_MODE_DRC_PREFADER #define MIX_MODE_DRC_PREFADER 0x00000010 #define MIX_MODE_UPDATE_INPUT 0x10000000 #define MIX_MODE_UPDATE_INPUT1 0x20000000 #define MIX_MODE_UPDATE_TARGET_INPUT MIX_MODE_UPDATE_INPUT1 #define MIX_MODE_UPDATE_MIX 0x40000000 #define MIX_MODE_UPDATE_MIX1 0x80000000 #define MIX_MODE_UPDATE_TARGET_MIX MIX_MODE_UPDATE_MIX1 /*---------------------------------------------------------------------------* mixer channel mode definitions for remote speakers *---------------------------------------------------------------------------*/ #define MIX_MODE_AUX0_PREFADER 0x00000001 #define MIX_MODE_AUX1_PREFADER 0x00000002 #define MIX_MODE_AUX2_PREFADER 0x00000004 #define MIX_MODE_AUX3_PREFADER 0x00000008 /*---------------------------------------------------------------------------* *---------------------------------------------------------------------------*/ typedef struct MIXRmtChannel { u32 mode; int fader0; int fader1; int fader2; int fader3; int aux0; int aux1; int aux2; int aux3; u16 vMain0; u16 vMain0_1; u16 vAux0; u16 vAux0_1; u16 vMain1; u16 vMain1_1; u16 vAux1; u16 vAux1_1; u16 vMain2; u16 vMain2_1; u16 vAux2; u16 vAux2_1; u16 vMain3; u16 vMain3_1; u16 vAux3; u16 vAux3_1; } MIXRmtChannel; /*---------------------------------------------------------------------------* Exposed function prototypes *---------------------------------------------------------------------------*/ void MIXInit (void); void MIXInitSpecifyMem (void* mem); void MIXQuit (void); void MIXSetSoundMode (u32 mode); u32 MIXGetSoundMode (void); #define MIXGetMemorySize(num) ((sizeof(MIXChannel) + sizeof(MIXRmtChannel)) * num) void MIXInitChannel ( AXVPB *p, // pointer to voice u32 mode, // initial aux A, B, mute modes int input, // initial input atten / gain int auxA, // initial aux A atten / gain int auxB, // initial aux B atten / gain int auxC, // initial aux C atten / gain int pan, // initial pan int span, // initial span int fader // initial fader atten / gain ); void MIXReleaseChannel (AXVPB *p); void MIXResetControls (AXVPB *p); void MIXSetInput (AXVPB *p, int dB); void MIXAdjustInput (AXVPB *p, int dB); int MIXGetInput (AXVPB *p); void MIXAuxAPostFader (AXVPB *p); void MIXAuxAPreFader (AXVPB *p); BOOL MIXAuxAIsPostFader (AXVPB *p); void MIXSetAuxA (AXVPB *p, int dB); void MIXAdjustAuxA (AXVPB *p, int dB); int MIXGetAuxA (AXVPB *p); void MIXAuxBPostFader (AXVPB *p); void MIXAuxBPreFader (AXVPB *p); BOOL MIXAuxBIsPostFader (AXVPB *p); void MIXSetAuxB (AXVPB *p, int dB); void MIXAdjustAuxB (AXVPB *p, int dB); int MIXGetAuxB (AXVPB *p); void MIXAuxCPostFader (AXVPB *p); void MIXAuxCPreFader (AXVPB *p); BOOL MIXAuxCIsPostFader (AXVPB *p); void MIXSetAuxC (AXVPB *p, int dB); void MIXAdjustAuxC (AXVPB *p, int dB); int MIXGetAuxC (AXVPB *p); void MIXSetPan (AXVPB *p, int pan); void MIXAdjustPan (AXVPB *p, int pan); int MIXGetPan (AXVPB *p); void MIXSetSPan (AXVPB *p, int span); void MIXAdjustSPan (AXVPB *p, int span); int MIXGetSPan (AXVPB *p); void MIXMute (AXVPB *p); void MIXUnMute (AXVPB *p); BOOL MIXIsMute (AXVPB *p); void MIXSetFader (AXVPB *p, int dB); void MIXAdjustFader (AXVPB *p, int dB); int MIXGetFader (AXVPB *p); // Deprecated void MIXDRCInitChannel ( AXVPB *p, // pointer to voice u32 mode, // initial aux mode int aux, // initial aux atten / gain int pan, // initial pan int fader // initial fader atten / gain ); void MIXDRCInitVoice (AXVPB *p, // pointer to voice u32 id, // device id u32 mode, // initial aux mode int aux, // initial aux atten / gain int pan, // initial pan int span, // initial span int fader); // initial fader atten / gain void MIXDRCAuxPostFader (AXVPB *p); void MIXDRCAuxPreFader (AXVPB *p); BOOL MIXDRCAuxIsPostFader (AXVPB *p); void MIXDRCSetAux (AXVPB *p, int dB); void MIXDRCAdjustAux (AXVPB *p, int dB); int MIXDRCGetAux (AXVPB *p); void MIXDRCSetPan (AXVPB *p, int pan); void MIXDRCAdjustPan (AXVPB *p, int pan); int MIXDRCGetPan (AXVPB *p); void MIXDRCSetFader (AXVPB *p, int dB); void MIXDRCAdjustFader (AXVPB *p, int dB); int MIXDRCGetFader (AXVPB *p); void MIXDRCSetSPan (AXVPB *p, int span); void MIXDRCAdjustSPan (AXVPB *p, int span); int MIXDRCGetSPan (AXVPB *p); void MIXUpdateSettings (void); void MIXRmtSetVolumes ( AXVPB *axvpb, // pointer to voice u32 mode, // aux0,1,2,3 modes int fader0, // initial fader0 atten / gain int fader1, // initial fader1 atten / gain int fader2, // initial fader2 atten / gain int fader3, // initial fader3 atten / gain int aux0, // initial aux0 atten / gain int aux1, // initial aux1 atten / gain int aux2, // initial aux2 atten / gain int aux3 // initial aux3 atten / gain ); void MIXRmtAuxPostFader (AXVPB *p, int num); void MIXRmtAuxPreFader (AXVPB *p, int num); BOOL MIXRmtAuxIsPostFader(AXVPB *p, int num); void MIXRmtSetAux (AXVPB *p, int num, int dB); void MIXRmtAdjustAux (AXVPB *p, int num, int dB); int MIXRmtGetAux (AXVPB *p, int num); void MIXRmtSetFader (AXVPB *p, int num, int dB); void MIXRmtAdjustFader (AXVPB *p, int num, int dB); int MIXRmtGetFader (AXVPB *p, int num); /* * NEW APIs to go with the new AX APIs. The library is getting expanded to * handle multiple devices and multiple channels */ typedef struct { u16 curVol; u16 targetVol; }MIXCHVOLSTRUCT; typedef struct { s16 aux[AX_AUX_ID_MAX_NUM]; // aux send values in 0.1dB s16 pan; s16 span; s16 fader; s16 lfe; }MIXCntrlStruct; // each device TV, DRC, RMT can be in a different mode typedef struct _MIXChannel { // pos16er to the voice assigned to this channel AXVPB *axvpb; u32 mixUpdate; s16 inputLevel; MIXCHVOLSTRUCT inpVol; //define the individual settings for channels // MixCntr, individual channels, input levels, volume holders for // all channels and buses MIXCntrlStruct tvMixCntrl[AX_MAX_NUM_TVS]; s16 tvChns[AX_MAX_NUM_TVS][AX_MAX_NUM_TV_CHS]; MIXCHVOLSTRUCT tvChVol[AX_MAX_NUM_TVS][AX_MAX_NUM_BUSES][AX_MAX_NUM_TV_CHS]; u32 tvMode[AX_MAX_NUM_TVS]; // define input level for individual devices types.. MIXCHVOLSTRUCT drcChVol[AX_MAX_NUM_DRCS][AX_MAX_NUM_BUSES][AX_MAX_NUM_DRC_CHS]; MIXCntrlStruct drcMixCntrl[AX_MAX_NUM_DRCS]; s16 drcChns[AX_MAX_NUM_DRCS][AX_MAX_NUM_DRC_CHS]; u32 drcMode[AX_MAX_NUM_DRCS]; // define input level for individual devices types.. MIXCHVOLSTRUCT rmtChVol[AX_MAX_NUM_RMTS][AX_MAX_NUM_BUSES][AX_MAX_NUM_RMT_CHS]; MIXCntrlStruct rmtMixCntrl[AX_MAX_NUM_RMTS]; s16 rmtChns[AX_MAX_NUM_RMTS][AX_MAX_NUM_RMT_CHS]; u32 rmtMode[AX_MAX_NUM_RMTS]; } MIXChannel; // new APIs // Init function to initialize a voice to a channel // Initialize a mixer channel to a particular device void MIXAssignChannel(AXVPB *p); void MIXInitDeviceControl(AXVPB *p, AXPBDeviceType device, u32 Id, MIXCntrlStruct *mcPtr, u32 mode); void MIXResetDeviceControl(AXVPB *p, AXPBDeviceType device, u32 Id); void MIXResetAllDeviceControls(AXVPB *p); void MIXDeviceAuxPostFader(AXVPB *p, AXPBDeviceType device, u32 Id, u32 auxId); void MIXDeviceAuxPreFader(AXVPB *p, AXPBDeviceType device, u32 Id, u32 auxId); BOOL MIXDeviceAuxIsPostFader(AXVPB *p, AXPBDeviceType device, u32 Id, u32 auxId); void MIXSetDeviceAux(AXVPB *p, AXPBDeviceType device, u32 Id, u32 auxId, s16 dB); void MIXAdjustDeviceAux(AXVPB *p, AXPBDeviceType device, u32 Id, u32 auxId, s16 dB); s16 MIXGetDeviceAux(AXVPB *p, AXPBDeviceType device, u32 Id, u32 auxId); void MIXSetDevicePan(AXVPB *p, AXPBDeviceType device, u32 Id, s16 pan); void MIXAdjustDevicePan(AXVPB *p, AXPBDeviceType device, u32 Id, s16 pan); s16 MIXGetDevicePan(AXVPB *p, AXPBDeviceType device, u32 Id); void MIXSetDeviceSPan(AXVPB *p, AXPBDeviceType device, u32 Id, s16 span); void MIXAdjustDeviceSPan(AXVPB *p, AXPBDeviceType device, u32 Id, s16 span); s16 MIXGetDeviceSPan(AXVPB *p, AXPBDeviceType device, u32 Id); void MIXSetDeviceFader(AXVPB *p, AXPBDeviceType device, u32 Id, s16 fader); void MIXAdjustDeviceFader(AXVPB *p, AXPBDeviceType device, u32 Id, s16 fader); s16 MIXGetDeviceFader(AXVPB *p, AXPBDeviceType device, u32 Id); void MIXSetDeviceLFE(AXVPB *p, AXPBDeviceType device, u32 Id, s16 lfe); void MIXAdjustDeviceLFE(AXVPB *p, AXPBDeviceType device, u32 Id, s16 lfe); s16 MIXGetDeviceLFE(AXVPB *p, AXPBDeviceType device, u32 Id); void MIXSetDeviceSoundMode(AXPBDeviceType device, u32 mode); u32 MIXGetDeviceSoundMode(AXPBDeviceType device); void MIXInitInputControl(AXVPB *voice, s16 input, u32 mode); #ifdef __cplusplus } #endif #endif // __MIX_H__