PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_gvada.c
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11#include "libspu2_internal.h"
12
13void SpuGetVoiceADSRAttr(
14 int v_num, u16 *ar, u16 *dr, u16 *sr, u16 *rr, u16 *sl, int *ar_mode, int *sr_mode, int *rr_mode)
15{
16 const vu16 *v9;
17 u16 v10;
18 unsigned int v11;
19
20 v9 = &_spu_RXX[512 * _spu_core + 8 * (v_num & 0x1F)];
21 v10 = v9[3];
22 v11 = v9[4];
23 *ar = (v10 >> 8) & 0x3F;
24 *ar_mode = SPU_VOICE_LINEARIncN;
25 if ( (v10 & 0x8000) != 0 )
26 *ar_mode = SPU_VOICE_EXPIncN;
27 *dr = (u8)(v10 & 0xF0) >> 4;
28 *sr = (v11 >> 6) & 0x7F;
29 switch ( v11 & 0xE000 )
30 {
31 case 0xc000:
32 *sr_mode = SPU_VOICE_EXPDec;
33 break;
34 case 0x8000:
35 *sr_mode = SPU_VOICE_EXPIncN;
36 break;
37 case 0x4000:
38 *sr_mode = SPU_VOICE_LINEARDecN;
39 break;
40 default:
41 *sr_mode = SPU_VOICE_LINEARIncN;
42 break;
43 }
44 *rr = v11 & 0x1F;
45 *rr_mode = SPU_VOICE_LINEARDecN;
46 if ( (v11 & 0x20) != 0 )
47 *rr_mode = SPU_VOICE_EXPDec;
48 *sl = v10 & 0xF;
49}