summaryrefslogtreecommitdiff
path: root/src/Z2AudioCS/SpkWave.cpp
blob: 98c8e81a812b517ad9fff18396207fe2a12522f4 (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
#include "Z2AudioCS/SpkWave.h"

#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JUtility/JUTAssert.h"
#include <revolution/os.h>
#include <revolution/types.h>

SpkWave::SpkWave(void) {
    mWaveData = NULL;
}

void SpkWave::setResource(void* res) {
    JUT_ASSERT(30, res);

    JASCriticalSection cs;

    mWaveData = res;
}

s32 SpkWave::getNumOfWaves(void) const {
    if (mWaveData == NULL) {
        return 0;
    }

    return ((s32*)mWaveData)[1];
}

s32 SpkWave::getWaveSize(s32 num) const {
    JUT_ASSERT(57, num >= 0);
    if (!mWaveData) {
        return 0;
    }
    JUT_ASSERT(60, num < getNumOfWaves());

    WaveData* data = getWaveData(num);
    JUT_ASSERT(63, data);
    return data->size;
}

u32 SpkWave::getLoopStartPos(s32 num) const {
    JUT_ASSERT(76, num >= 0);
    if (!mWaveData) {
        return 0;
    }
    JUT_ASSERT(79, num < getNumOfWaves());

    WaveData* data = getWaveData(num);
    JUT_ASSERT(82, data);
    return data->loopStartPos;
}

u32 SpkWave::getLoopEndPos(s32 num) const {
    JUT_ASSERT(95, num >= 0);
    if (!mWaveData) {
        return 0;
    }
    JUT_ASSERT(98, num < getNumOfWaves());

    WaveData* data = getWaveData(num);
    JUT_ASSERT(101, data);
    return data->loopEndPos;
}

s16* SpkWave::getWave(s32 num) const {
    JUT_ASSERT(114, num >= 0);
    if (!mWaveData) {
        return 0;
    }
    JUT_ASSERT(117, num < getNumOfWaves());

    WaveData* data = getWaveData(num);
    JUT_ASSERT(120, data);
    return data->wave;
}

WaveData* SpkWave::getWaveData(s32 num) const {
    JUT_ASSERT(138, num >= 0);
    JUT_ASSERT(139, mWaveData);
    JUT_ASSERT(140, num < getNumOfWaves());

    WaveData* data = (WaveData*)((u32)mWaveData + *(u32*)((u32)mWaveData + num * 4 + 8));
    return data;
}