1
0
mirror of https://github.com/blawar/ooot.git synced 2024-07-02 09:03:36 +00:00
This commit is contained in:
Blake Warner 2022-03-02 12:00:18 -05:00
parent fa59744771
commit 450c832bdc
5 changed files with 86 additions and 47 deletions

@ -1 +1 @@
Subproject commit be5f78ee4c221a5112b2e9f9c3ffb4bea2f287c3
Subproject commit 8c093268854512c2a09372114ae6d71228eb4749

View File

@ -42,3 +42,75 @@
#define POINTER_ADD(a, b) ((uintptr_t)a + (uintptr_t)b)
#define POINTER_SUB(a, b) (MAX((uintptr_t)a, (uintptr_t)b) - MIN((uintptr_t)a, (uintptr_t)b))
#define POINTER_SUB2(a, b) (MAX((uintptr_t)a.get(), (uintptr_t)b.get()) - MIN((uintptr_t)a.get(), (uintptr_t)b.get()))
struct s16be
{
s16be() : value(0)
{
}
s16be(s16 v) : value((s16)BE16((u16)v))
{
}
operator s16() const
{
return (s16)BE16((u16)value);
}
s16 value;
};
struct u16be
{
u16be() : value(0)
{
}
u16be(u16 v) : value((u16)BE16((u16)v))
{
}
operator u16() const
{
return (u16)BE16((u16)value);
}
u16 value;
};
struct s32be
{
s32be() : value(0)
{
}
s32be(s32 v) : value((s32)BE32((u32)v))
{
}
operator s32() const
{
return (s32)BE32((u32)value);
}
s32 value;
};
struct u32be
{
u32be() : value(0)
{
}
u32be(u32 v) : value((u32)BE32((u32)v))
{
}
operator u32() const
{
return (u32)BE32((u32)value);
}
u32 value;
};

View File

@ -115,8 +115,8 @@ struct AdsrEnvelope {
{
}
/* 0x0 */ s16 delay;
/* 0x2 */ s16 arg;
/* 0x0 */ s16be delay;
/* 0x2 */ s16be arg;
}; // size = 0x4
struct AdpcmLoop {
@ -597,9 +597,9 @@ struct NoteSubEu {
u8 unused : 1;
u8 finished : 1; // ?
u8 needsInit : 1;
volatile u8 enabled : 1;
u8 enabled : 1;
#else
volatile u8 enabled : 1;
u8 enabled : 1;
u8 needsInit : 1;
u8 finished : 1; // ?
u8 unused : 1;

View File

@ -12,39 +12,6 @@
#include "def/audio_rsp.h"
#include "def/audio_bank.h"
static std::unordered_map<AdsrEnvelope*, AdsrEnvelope*> g_envelopeMape;
static u32 AdsrEnvelopeBE_Length(const AdsrEnvelope* env)
{
u32 len = 1;
while(BE16(env->delay) != (u16)-1)
{
env++;
len++;
}
return len;
}
static AdsrEnvelope* AdsrEnvelopeBE(AdsrEnvelope* pointer)
{
auto& ptr = g_envelopeMape[pointer];
if(!ptr)
{
u32 len = AdsrEnvelopeBE_Length(pointer);
ptr = new AdsrEnvelope[len];
for(u32 i=0; i < len; i++)
{
ptr[i].delay = BE16(pointer[i].delay);
ptr[i].arg = BE16(pointer[i].arg);
}
}
return ptr;
}
#define PORTAMENTO_IS_SPECIAL(x) ((x).mode & 0x80)
#define PORTAMENTO_MODE(x) ((x).mode & ~0x80)
#define PORTAMENTO_MODE_1 1
@ -636,7 +603,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
case 0xCB:
sp3A = AudioSeq_ScriptReadS16(state);
layer->adsr.envelope = AdsrEnvelopeBE((AdsrEnvelope*)(seqPlayer->seqData + sp3A));
layer->adsr.envelope = ((AdsrEnvelope*)(seqPlayer->seqData + sp3A));
// fallthrough
case 0xCF:
@ -784,12 +751,12 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
freqScale2 = temp_f14;
break;
default:
freqScale = temp_f2;
freqScale2 = temp_f2;
break;
}
portamento->extent = (freqScale2 / freqScale) - 1.0f;
freqScale = temp_f2; portamento->extent = (freqScale2 / freqScale) - 1.0f;
if (PORTAMENTO_IS_SPECIAL(*portamento)) {
speed = seqPlayer->tempo * 0x8000 / gAudioContext.tempoInternalToExternal;
@ -1171,7 +1138,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xDA:
offset = (u16)parameters[0];
channel->adsr.envelope = AdsrEnvelopeBE((AdsrEnvelope*)&seqPlayer->seqData[offset]);
channel->adsr.envelope = ((AdsrEnvelope*)&seqPlayer->seqData[offset]);
break;
case 0xD9:
command = (u8)parameters[0];
@ -1382,13 +1349,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xB2:
offset = (u16)parameters[0];
channel->unk_22 = *(u16*)(seqPlayer->seqData + (u32)(offset + scriptState->value * 2));
channel->unk_22 = BE16(*(u16*)(seqPlayer->seqData + (u32)(offset + scriptState->value * 2)));
break;
case 0xB4:
channel->dynTable = (u8 (*)[][2])&seqPlayer->seqData[channel->unk_22];
break;
case 0xB5:
channel->unk_22 = ((u16*)(channel->dynTable))[scriptState->value];
channel->unk_22 = BE16(((u16*)(channel->dynTable))[scriptState->value]);
break;
case 0xB6:
scriptState->value = (*channel->dynTable)[0][scriptState->value];

View File

@ -686,7 +686,7 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
s32 nTrailingSamplesToIgnore;
s32 phi_a1_2;
s32 frameIndex;
s32 skipBytes;// = 0; // TODO HACK not sure why this isnt being set
s32 skipBytes;
s32 temp_v1_6;
void* buf;
s32 nSamplesToDecode;
@ -699,9 +699,9 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
s32 phi_s4;
s32 nFirstFrameSamplesToIgnore;
s32 pad2[7];
s32 frameSize; // TODO HACK not sure why this isnt being set
s32 frameSize;
s32 nFramesToDecode;
s32 skipInitialSamples; // TODO HACK not sure why this isnt being set
s32 skipInitialSamples;
Pointer sampleDataStart;
u8* sampleData;
s32 nParts;