PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
ssopenp.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
13s16 SsSepOpen(unsigned int *addr, s16 vab_id, s16 seq_cnt)
14{
15 s16 v4;
16 unsigned int v6;
17 s16 v8;
18
19 v4 = 0;
20 if ( _snd_openflag == (u32)-1 )
21 {
22 printf("Can't Open Sequence data any more\n\n");
23 return -1;
24 }
25 SsFCALL.noteon = _SsNoteOn;
26 SsFCALL.programchange = _SsSetProgramChange;
27 SsFCALL.metaevent = _SsGetMetaEvent;
28 SsFCALL.pitchbend = _SsSetPitchBend;
29 SsFCALL.control[CC_NUMBER] = _SsSetControlChange;
30 SsFCALL.control[CC_BANKCHANGE] = _SsContBankChange;
31 SsFCALL.control[CC_MAINVOL] = _SsContMainVol;
32 SsFCALL.control[CC_PANPOT] = _SsContPanpot;
33 SsFCALL.control[CC_EXPRESSION] = _SsContExpression;
34 SsFCALL.control[CC_DAMPER] = _SsContDamper;
35 SsFCALL.control[CC_NRPN1] = _SsContNrpn1;
36 SsFCALL.control[CC_NRPN2] = _SsContNrpn2;
37 SsFCALL.control[CC_RPN1] = _SsContRpn1;
38 SsFCALL.control[CC_RPN2] = _SsContRpn2;
39 SsFCALL.control[CC_EXTERNAL] = _SsContExternal;
40 SsFCALL.control[CC_RESETALL] = _SsContResetAll;
41 SsFCALL.control[CC_DATAENTRY] = _SsContDataEntry;
42 SsFCALL.ccentry[DE_PRIORITY] = _SsSetNrpnVabAttr0;
43 SsFCALL.ccentry[DE_MODE] = _SsSetNrpnVabAttr1;
44 SsFCALL.ccentry[DE_LIMITL] = _SsSetNrpnVabAttr2;
45 SsFCALL.ccentry[DE_LIMITH] = _SsSetNrpnVabAttr3;
46 SsFCALL.ccentry[DE_ADSR_AR_L] = _SsSetNrpnVabAttr4;
47 SsFCALL.ccentry[DE_ADSR_AR_E] = _SsSetNrpnVabAttr5;
48 SsFCALL.ccentry[DE_ADSR_DR] = _SsSetNrpnVabAttr6;
49 SsFCALL.ccentry[DE_ADSR_SL] = _SsSetNrpnVabAttr7;
50 SsFCALL.ccentry[DE_ADSR_SR_L] = _SsSetNrpnVabAttr8;
51 SsFCALL.ccentry[DE_ADSR_SR_E] = _SsSetNrpnVabAttr9;
52 SsFCALL.ccentry[DE_ADSR_RR_L] = _SsSetNrpnVabAttr10;
53 SsFCALL.ccentry[DE_ADSR_RR_E] = _SsSetNrpnVabAttr11;
54 SsFCALL.ccentry[DE_ADSR_SR] = _SsSetNrpnVabAttr12;
55 SsFCALL.ccentry[DE_VIB_TIME] = _SsSetNrpnVabAttr13;
56 SsFCALL.ccentry[DE_PORTA_DEPTH] = _SsSetNrpnVabAttr14;
57 SsFCALL.ccentry[DE_REV_TYPE] = _SsSetNrpnVabAttr15;
58 SsFCALL.ccentry[DE_REV_DEPTH] = _SsSetNrpnVabAttr16;
59 SsFCALL.ccentry[DE_ECHO_FB] = _SsSetNrpnVabAttr17;
60 SsFCALL.ccentry[DE_ECHO_DELAY] = _SsSetNrpnVabAttr18;
61 SsFCALL.ccentry[DE_DELAY] = _SsSetNrpnVabAttr19;
62 for ( v6 = 0; v6 < 32; v6 += 1 )
63 {
64 if ( (_snd_openflag & ((u32)1 << v6)) == 0 )
65 {
66 v4 = v6;
67 break;
68 }
69 }
70 _snd_openflag |= 1 << v4;
71 for ( v8 = 0; v8 < seq_cnt; v8 += 1 )
72 {
73 int inited;
74
75 inited = _SsInitSoundSep(v4, v8, vab_id, (u8 *)addr);
76 addr = (unsigned int *)((char *)addr + inited);
77 if ( inited == -1 )
78 return -1;
79 }
80 return v4;
81}