Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/pc/mixer.h
7857 views
1
#ifndef MIXER_H
2
#define MIXER_H
3
4
#include <stdbool.h>
5
#include <stdint.h>
6
#include <ultra64.h>
7
8
#ifdef VERSION_SH
9
#define NEW_AUDIO_UCODE
10
#endif
11
12
#undef aSegment
13
#undef aClearBuffer
14
#undef aSetBuffer
15
#undef aLoadBuffer
16
#undef aSaveBuffer
17
#undef aDMEMMove
18
#undef aMix
19
#undef aEnvMixer
20
#undef aResample
21
#undef aInterleave
22
#undef aSetVolume
23
#undef aSetVolume32
24
#undef aSetLoop
25
#undef aLoadADPCM
26
#undef aADPCMdec
27
#undef aS8Dec
28
#undef aAddMixer
29
#undef aDuplicate
30
#undef aDMEMMove2
31
#undef aResampleZoh
32
#undef aDownsampleHalf
33
#undef aEnvSetup1
34
#undef aEnvSetup2
35
#undef aFilter
36
#undef aHiLoGain
37
#undef aUnknown25
38
39
void aClearBufferImpl(uint16_t addr, int nbytes);
40
void aLoadADPCMImpl(int num_entries_times_16, const int16_t *book_source_addr);
41
void aSetBufferImpl(uint8_t flags, uint16_t in, uint16_t out, uint16_t nbytes);
42
void aDMEMMoveImpl(uint16_t in_addr, uint16_t out_addr, int nbytes);
43
void aSetLoopImpl(ADPCM_STATE *adpcm_loop_state);
44
void aADPCMdecImpl(uint8_t flags, ADPCM_STATE state);
45
void aResampleImpl(uint8_t flags, uint16_t pitch, RESAMPLE_STATE state);
46
47
#ifndef NEW_AUDIO_UCODE
48
void aSetVolumeImpl(uint8_t flags, int16_t v, int16_t t, int16_t r);
49
void aLoadBufferImpl(const void *source_addr);
50
void aSaveBufferImpl(int16_t *dest_addr);
51
void aInterleaveImpl(uint16_t left, uint16_t right);
52
void aMixImpl(int16_t gain, uint16_t in_addr, uint16_t out_addr);
53
void aEnvMixerImpl(uint8_t flags, ENVMIX_STATE state);
54
#else
55
void aLoadBufferImpl(const void *source_addr, uint16_t dest_addr, uint16_t nbytes);
56
void aSaveBufferImpl(uint16_t source_addr, int16_t *dest_addr, uint16_t nbytes);
57
void aInterleaveImpl(uint16_t dest, uint16_t left, uint16_t right, uint16_t c);
58
void aMixImpl(int16_t gain, uint16_t in_addr, uint16_t out_addr, uint16_t count);
59
void aEnvSetup1Impl(uint8_t initial_vol_wet, uint16_t rate_wet, uint16_t rate_left, uint16_t rate_right);
60
void aEnvSetup2Impl(uint16_t initial_vol_left, uint16_t initial_vol_right);
61
void aEnvMixerImpl(uint16_t in_addr, uint16_t n_samples, bool swap_reverb,
62
bool neg_left, bool neg_right,
63
uint16_t dry_left_addr, uint16_t dry_right_addr,
64
uint16_t wet_left_addr, uint16_t wet_right_addr);
65
void aS8DecImpl(uint8_t flags, ADPCM_STATE state);
66
void aAddMixerImpl(uint16_t in_addr, uint16_t out_addr, uint16_t count);
67
void aDuplicateImpl(uint16_t in_addr, uint16_t out_addr, uint16_t count);
68
void aDMEMMove2Impl(uint8_t t, uint16_t in_addr, uint16_t out_addr, uint16_t count);
69
void aResampleZohImpl(uint16_t pitch, uint16_t start_fract);
70
void aDownsampleHalfImpl(uint16_t n_samples, uint16_t in_addr, uint16_t out_addr);
71
void aFilterImpl(uint8_t flags, uint16_t count_or_buf, int16_t state_or_filter[8]);
72
void aHiLoGainImpl(uint8_t g, uint16_t count, uint16_t addr);
73
void aUnknown25Impl(uint8_t f, uint16_t count, uint16_t out_addr, uint16_t in_addr);
74
#endif
75
76
#define aSegment(pkt, s, b) do { } while(0)
77
#define aClearBuffer(pkt, d, c) aClearBufferImpl(d, c)
78
#define aLoadADPCM(pkt, c, d) aLoadADPCMImpl(c, d)
79
#define aSetBuffer(pkt, f, i, o, c) aSetBufferImpl(f, i, o, c)
80
#define aDMEMMove(pkt, i, o, c) aDMEMMoveImpl(i, o, c)
81
#define aSetLoop(pkt, a) aSetLoopImpl(a)
82
#define aADPCMdec(pkt, f, s) aADPCMdecImpl(f, s)
83
#define aResample(pkt, f, p, s) aResampleImpl(f, p, s)
84
85
#ifndef NEW_AUDIO_UCODE
86
#define aSetVolume(pkt, f, v, t, r) aSetVolumeImpl(f, v, t, r)
87
#define aSetVolume32(pkt, f, v, tr) aSetVolume(pkt, f, v, (int16_t)((tr) >> 16), (int16_t)(tr))
88
#define aLoadBuffer(pkt, s) aLoadBufferImpl(s)
89
#define aSaveBuffer(pkt, s) aSaveBufferImpl(s)
90
#define aInterleave(pkt, l, r) aInterleaveImpl(l, r)
91
#define aMix(pkt, f, g, i, o) aMixImpl(g, i, o)
92
#define aEnvMixer(pkt, f, s) aEnvMixerImpl(f, s)
93
#else
94
#define aLoadBuffer(pkt, s, d, c) aLoadBufferImpl(s, d, c)
95
#define aSaveBuffer(pkt, s, d, c) aSaveBufferImpl(s, d, c)
96
#define aInterleave(pkt, o, l, r, c) aInterleaveImpl(o, l, r, c)
97
#define aMix(pkt, g, i, o, c) aMixImpl(g, i, o, c)
98
#define aEnvSetup1(pkt, initialVolReverb, rampReverb, rampLeft, rampRight) \
99
aEnvSetup1Impl(initialVolReverb, rampReverb, rampLeft, rampRight)
100
#define aEnvSetup2(pkt, initialVolLeft, initialVolRight) \
101
aEnvSetup2Impl(initialVolLeft, initialVolRight)
102
#define aEnvMixer(pkt, inBuf, nSamples, swapReverb, negLeft, negRight, \
103
dryLeft, dryRight, wetLeft, wetRight) \
104
aEnvMixerImpl(inBuf, nSamples, swapReverb, negLeft, negRight, \
105
dryLeft, dryRight, wetLeft, wetRight)
106
#define aS8Dec(pkt, f, s) aS8DecImpl(f, s)
107
#define aAddMixer(pkt, s, d, c) aAddMixerImpl(s, d, c)
108
#define aDuplicate(pkt, s, d, c) aDuplicateImpl(s, d, c)
109
#define aDMEMMove2(pkt, t, i, o, c) aDMEMMove2Impl(t, i, o, c)
110
#define aResampleZoh(pkt, pitch, startFract) aResampleZohImpl(pitch, startFract)
111
#define aDownsampleHalf(pkt, nSamples, i, o) aDownsampleHalfImpl(nSamples, i, o)
112
#define aFilter(pkt, f, countOrBuf, addr) aFilterImpl(f, countOrBuf, addr)
113
#define aHiLoGain(pkt, g, buflen, i) aHiLoGainImpl(g, buflen, i)
114
#define aUnknown25(pkt, f, c, o, i) aUnknown25Impl(f, c, o, i)
115
#endif
116
117
#endif
118
119