PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
vm_no1.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 "libsnd2_internal.h"
12
13void vmNoiseOn(u8 vc)
14{
15 unsigned int right_vol_calc;
16 libsnd2_sequence_struct_t *score_struct;
17 unsigned int left_vol_calc;
18 unsigned int left_vol_final;
19 unsigned int right_vol_final;
20 int v8;
21 int v9;
22 int v11;
23 libsnd2_spu_voice_t *voice_struct;
24
25 right_vol_calc = _svm_cur.m_voll * 0x3FFF * _svm_vh->mvol / 0x3F01 * _svm_cur.m_mvol * _svm_cur.m_vol / 0x3F01u;
26 left_vol_calc = right_vol_calc;
27 score_struct = NULL;
28 if ( _svm_cur.m_seq_sep_no != 33 )
29 {
30 score_struct = &_ss_score[(_svm_cur.m_seq_sep_no & 0xFF)][(_svm_cur.m_seq_sep_no & 0xFF00) >> 8];
31 }
32 if ( score_struct != NULL )
33 {
34 left_vol_calc = right_vol_calc * (u16)score_struct->m_voll / 0x7F;
35 right_vol_calc = right_vol_calc * (u16)score_struct->m_volr / 0x7F;
36 }
37 if ( (unsigned int)_svm_cur.m_pan >= 0x40 )
38 {
39 right_vol_final = right_vol_calc;
40 left_vol_final = left_vol_calc * (127 - _svm_cur.m_pan) / 0x3F;
41 }
42 else
43 {
44 left_vol_final = left_vol_calc;
45 right_vol_final = right_vol_calc * _svm_cur.m_pan / 0x3F;
46 }
47 if ( (unsigned int)_svm_cur.m_mpan >= 0x40 )
48 left_vol_final = left_vol_final * (127 - _svm_cur.m_mpan) / 0x3F;
49 else
50 right_vol_final = right_vol_final * _svm_cur.m_mpan / 0x3F;
51 if ( (unsigned int)_svm_cur.m_unk05 >= 0x40 )
52 left_vol_final = left_vol_final * (127 - _svm_cur.m_unk05) / 0x3F;
53 else
54 right_vol_final = _svm_cur.m_unk05 * right_vol_final / 0x3F;
55 if ( _svm_stereo_mono == 1 )
56 {
57 if ( left_vol_final >= right_vol_final )
58 right_vol_final = left_vol_final;
59 else
60 left_vol_final = right_vol_final;
61 }
62 if ( score_struct != NULL )
63 {
64 left_vol_final = left_vol_final * left_vol_final / 0x3FFF;
65 right_vol_final = right_vol_final * right_vol_final / 0x3FFF;
66 }
67 SpuSetNoiseClock((_svm_cur.m_note - _svm_cur.m_centre) & 0x3F);
68 _svm_sreg_buf[vc].m_vol_left = left_vol_final;
69 _svm_sreg_buf[vc].m_vol_right = right_vol_final;
70 _svm_sreg_dirty[vc] |= 3;
71 if ( vc >= 0x10u )
72 {
73 v8 = 0;
74 v9 = 1 << (vc - 16);
75 }
76 else
77 {
78 v8 = 1 << vc;
79 v9 = 0;
80 }
81 voice_struct = &_svm_voice[vc];
82 voice_struct->m_pitch = 10;
83 for ( v11 = 0; (s16)v11 < _SsVmMaxVoice; v11 += 1 )
84 {
85 if ( (_snd_vmask & (1 << v11)) == 0 )
86 {
87 libsnd2_spu_voice_t *voice_struct_1;
88
89 voice_struct_1 = &_svm_voice[v11];
90 voice_struct_1->m_unk1d &= 1u;
91 }
92 }
93 voice_struct->m_unk1d = 2;
94 _svm_okon1 |= v8;
95 _svm_okon2 |= v9;
96 _svm_okof1 &= ~_svm_okon1;
97 _svm_okof2 &= ~_svm_okon2;
98 if ( (_svm_cur.m_mode & 4) != 0 )
99 {
100 _svm_orev1 |= v8;
101 _svm_orev2 |= v9;
102 }
103 else
104 {
105 _svm_orev1 &= ~(u16)v8;
106 _svm_orev2 &= ~(u16)v9;
107 }
108 _svm_onos1 = v8;
109 _svm_onos2 = v9;
110}