PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_gvva.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 SpuGetVoiceVolumeAttr(int v_num, s16 *voll, s16 *volr, s16 *voll_mode, s16 *volr_mode)
14{
15 const vu16 *v5;
16 u16 v6;
17 u16 v7;
18 s16 v8;
19 s16 v10;
20
21 v5 = &_spu_RXX[512 * _spu_core + 8 * (v_num & 0x1F)];
22 v6 = *v5;
23 v7 = v5[1];
24 v8 = 0;
25 if ( (v6 & 0x8000) != 0 )
26 {
27 switch ( v6 & 0xF000 )
28 {
29 case 0x8000:
30 v8 = SPU_VOICE_LINEARIncN;
31 break;
32 case 0x9000:
33 v8 = SPU_VOICE_LINEARIncR;
34 break;
35 case 0xa000:
36 v8 = SPU_VOICE_LINEARDecN;
37 break;
38 case 0xb000:
39 v8 = SPU_VOICE_LINEARDecR;
40 break;
41 case 0xc000:
42 v8 = SPU_VOICE_EXPIncN;
43 break;
44 case 0xd000:
45 v8 = SPU_VOICE_EXPIncR;
46 break;
47 case 0xe000:
48 case 0xf000:
49 v8 = SPU_VOICE_EXPDec;
50 break;
51 default:
52 break;
53 }
54 v6 &= ~0xF000;
55 }
56 v10 = 0;
57 if ( (v7 & 0x8000) != 0 )
58 {
59 switch ( v7 & 0xF000 )
60 {
61 case 0x8000:
62 v10 = SPU_VOICE_LINEARIncN;
63 break;
64 case 0x9000:
65 v10 = SPU_VOICE_LINEARIncR;
66 break;
67 case 0xa000:
68 v10 = SPU_VOICE_LINEARDecN;
69 break;
70 case 0xb000:
71 v10 = SPU_VOICE_LINEARDecR;
72 break;
73 case 0xc000:
74 v10 = SPU_VOICE_EXPIncN;
75 break;
76 case 0xd000:
77 v10 = SPU_VOICE_EXPIncR;
78 break;
79 case 0xe000:
80 case 0xf000:
81 v10 = SPU_VOICE_EXPDec;
82 break;
83 default:
84 break;
85 }
86 v7 &= ~0xF000;
87 }
88 *voll_mode = v8;
89 *volr_mode = v10;
90 if ( v6 < 0x4000u )
91 *voll = v6;
92 else
93 *voll = v6 + 0x8000;
94 if ( v7 < 0x4000u )
95 *volr = v7;
96 else
97 *volr = v7 + 0x8000;
98}