summaryrefslogtreecommitdiff
path: root/src/JSystem/JAudio2/JAIStreamMgr.cpp
blob: f8157b22e0edce1e8eb6cc944c2973e9beaf7556 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
// Generated By: dol2asm
// Translation Unit: JAIStreamMgr
//

#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JAudio2/JAISoundInfo.h"

/* 802A3B68-802A3C3C 29E4A8 00D4+00 0/0 1/1 0/0 .text            __ct__12JAIStreamMgrFb */
JAIStreamMgr::JAIStreamMgr(bool param_0) : JASGlobalInstance<JAIStreamMgr>(param_0) {
    streamDataMgr_ = NULL;
    mStreamAramMgr = NULL;
    field_0x6c = NULL;
    field_0x54 = NULL;
    mParams.init();
    mActivity.init();
}

/* 802A3C3C-802A3D70 29E57C 0134+00 0/0 1/1 0/0 .text
 * startSound__12JAIStreamMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAIStreamMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
                              JGeometry::TVec3<f32> const* param_3) {
    JUT_ASSERT(37, streamDataMgr_);
    if (param_2 != NULL && *param_2) {
        (*param_2)->stop();
    }
    s32 streamFileEntry = streamDataMgr_->getStreamFileEntry(param_1);
    if (streamFileEntry < 0) {
        JUT_WARN("Cannot find the stream file entry for ID:%08x\n", param_1)
        return false;
    } 
    JAIStream* stream = newStream_();
    JAISoundInfo* piVar5 = JASGlobalInstance<JAISoundInfo>::getInstance();
    int iVar2 = -1;
    if (piVar5 != NULL) {
        iVar2 = piVar5->getCategory(param_1);
    }
    if (stream == NULL) {
        return false;
    }
    stream->JAIStreamMgr_startID_(param_1, streamFileEntry, param_3, field_0x54, iVar2);
    if (piVar5 != NULL) {
        piVar5->getStreamInfo(param_1, stream);
    }
    if (param_2 != NULL) {
        stream->attachHandle(param_2);
    }
    return false;
}

/* 802A3D70-802A3E68 29E6B0 00F8+00 1/1 0/0 0/0 .text            freeDeadStream___12JAIStreamMgrFv
 */
// NONMATCHING JASPoolAllocObject<_> locations
void JAIStreamMgr::freeDeadStream_() {
    JSULink<JAIStream>* link = mStreamList.getFirst();
    while (link != NULL) {
        JAIStream* stream = link->getObject();
        JSULink<JAIStream>* next = link->getNext();
        if (stream->status_.isDead()) {
            mStreamList.remove(link);
            void* aramAddr = stream->JAIStreamMgr_getAramAddr_();
            if (aramAddr != NULL) {
                mStreamAramMgr->deleteStreamAram((u32)aramAddr);
            }
            
            delete stream;
        }
        link = next;
    }
}

/* 802A3EBC-802A4028 29E7FC 016C+00 0/0 1/1 0/0 .text            calc__12JAIStreamMgrFv */
void JAIStreamMgr::calc() {
    mParams.calc();
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->JAIStreamMgr_calc_();
    }
    freeDeadStream_();
}

/* 802A4028-802A4068 29E968 0040+00 0/0 1/1 0/0 .text            stop__12JAIStreamMgrFv */
void JAIStreamMgr::stop() {
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->stop();
    }
}

/* 802A4068-802A40B8 29E9A8 0050+00 0/0 2/2 0/0 .text            stop__12JAIStreamMgrFUl */
void JAIStreamMgr::stop(u32 param_0) {
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->stop(param_0);
    }
}

/* 802A40B8-802A4118 29E9F8 0060+00 0/0 1/1 0/0 .text stopSoundID__12JAIStreamMgrF10JAISoundID */
void JAIStreamMgr::stopSoundID(JAISoundID param_0) {
    for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        if ((u32)link->getObject()->getID() == (u32)param_0) {
            link->getObject()->stop();
        }
    }
}

/* 802A4118-802A4174 29EA58 005C+00 0/0 1/1 0/0 .text            mixOut__12JAIStreamMgrFv */
void JAIStreamMgr::mixOut() {
     for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
        link->getObject()->JAIStreamMgr_mixOut_(mParams.mParams, mActivity);
    }
}

/* 802A4174-802A4244 29EAB4 00D0+00 1/1 0/0 0/0 .text            newStream___12JAIStreamMgrFv */
// NONMATCHING JASPoolAllocObject<_> locations
JAIStream* JAIStreamMgr::newStream_() {
    if (mStreamAramMgr == NULL) {
        JUT_WARN(229, "JAIStreamAramMgr must be set.\n");
        return NULL;
    } 
    JAIStream* stream = new JAIStream(this, field_0x6c);
    if (stream == NULL) {
        JUT_WARN(235, "JASPoolAllocObject::<JAIStream>::operator new failed .\n");
        return NULL;
    }

    mStreamList.append(stream);
    return stream;
}