Fix last music conversion issues

This commit is contained in:
octorock 2021-09-17 22:52:05 +02:00
parent bc858317ec
commit a46697c2d0
4 changed files with 136 additions and 1558 deletions

View File

@ -62388,8 +62388,10 @@
group: 4 group: 4
priority: 0 priority: 0
reverb: 0x28 reverb: 0x28
nominator: 7 timeChanges:
denominator: 4 nominator: 4
denominator: 4
time: 168
- path: sounds/bgmElementGet.s - path: sounds/bgmElementGet.s
start: 0xDCCD40 start: 0xDCCD40
type: midi type: midi
@ -63707,6 +63709,10 @@
options: options:
group: 13 group: 13
reverb: 0x1e reverb: 0x1e
timeChanges:
nominator: 4
denominator: 4
time: 912
- path: sounds/bgmStory.s - path: sounds/bgmStory.s
start: 0xdd0a94 start: 0xdd0a94
type: midi type: midi
@ -68691,6 +68697,23 @@
- path: sounds/gUnk_08DD955A_1.bin - path: sounds/gUnk_08DD955A_1.bin
start: 0xdd95f9 start: 0xdd95f9
size: 0xb size: 0xb
- path: sounds/bgmRoyalCrypt.s
start: 0xdd9604
type: midi
comment: Crazy timeChanges to avoid pattern creation by mid2agb.
options:
group: 40
reverb: 0x3c
timeChanges:
- nominator: 8
denominator: 4
time: 960
- nominator: 4
denominator: 4
time: 1080
- nominator: 12
denominator: 4
time: 1560
- path: sounds/bgmElementalSanctuary_track0.bin - path: sounds/bgmElementalSanctuary_track0.bin
start: 0xdd9620 start: 0xdd9620
size: 0x6b size: 0x6b
@ -69105,6 +69128,16 @@
- path: sounds/gUnk_08DD9F29_2.bin - path: sounds/gUnk_08DD9F29_2.bin
start: 0xdd9f4c start: 0xdd9f4c
size: 0x4 size: 0x4
- path: sounds/bgmFightTheme.s
start: 0xdd9f50
type: midi
options:
group: 42
reverb: 0x28
timeChanges:
nominator: 2
denominator: 4
time: 96
- path: sounds/bgmBossTheme_track0.bin - path: sounds/bgmBossTheme_track0.bin
start: 0xdd9f74 start: 0xdd9f74
size: 0xc size: 0xc
@ -70360,6 +70393,19 @@
- path: sounds/gUnk_08DDBFE9_6.bin - path: sounds/gUnk_08DDBFE9_6.bin
start: 0xddc06d start: 0xddc06d
size: 0x3 size: 0x3
- path: sounds/bgmVaatiWrath.s
start: 0xddc070
type: midi
options:
group: 47
reverb: 0x28
timeChanges:
- nominator: 3
denominator: 4
time: 108
- nominator: 4
denominator: 4
time: 540
- path: sounds/bgmFightTheme2_track0.bin - path: sounds/bgmFightTheme2_track0.bin
start: 0xddc09c start: 0xddc09c
size: 0xc size: 0xc
@ -70441,6 +70487,16 @@
- path: sounds/gUnk_08DDC233_1.bin - path: sounds/gUnk_08DDC233_1.bin
start: 0xddc24e start: 0xddc24e
size: 0x2 size: 0x2
- path: sounds/bgmFightTheme2.s
start: 0xddc250
type: midi
options:
group: 48
reverb: 0x28
timeChanges:
nominator: 4
denominator: 4
time: 48
- path: sounds/bgmDiggingCave_track0.bin - path: sounds/bgmDiggingCave_track0.bin
start: 0xddc274 start: 0xddc274
size: 0xb size: 0xb
@ -70495,6 +70551,16 @@
- path: sounds/gUnk_08DDC35F_1.bin - path: sounds/gUnk_08DDC35F_1.bin
start: 0xddc391 start: 0xddc391
size: 0x3 size: 0x3
- path: sounds/bgmDiggingCave.s
start: 0xddc394
type: midi
options:
group: 49
reverb: 0x32
timeChanges:
nominator: 4
denominator: 4
time: 108
- path: sounds/bgmSwiftbladeDojo_track0_EU.bin - path: sounds/bgmSwiftbladeDojo_track0_EU.bin
variants: variants:
- EU - EU
@ -71047,6 +71113,22 @@
- path: sounds/gUnk_08DDCEA2_6.bin - path: sounds/gUnk_08DDCEA2_6.bin
start: 0xddcf24 start: 0xddcf24
size: 0x4 size: 0x4
- path: sounds/bgmMinishCap.s
start: 0xddcf28
type: midi
options:
group: 51
reverb: 0x32
timeChanges:
- nominator: 3
denominator: 4
time: 96
- nominator: 4
denominator: 4
time: 2952
- nominator: 3
denominator: 4
time: 3144
- path: sounds/bgmMtCrenel_track0.bin - path: sounds/bgmMtCrenel_track0.bin
start: 0xddcf4c start: 0xddcf4c
size: 0xf size: 0xf
@ -71335,6 +71417,12 @@
- path: sounds/gUnk_08DDD4A1_4.bin - path: sounds/gUnk_08DDD4A1_4.bin
start: 0xddd50e start: 0xddd50e
size: 0x2 size: 0x2
- path: sounds/bgmMtCrenel.s
start: 0xddd510
type: midi
options:
group: 52
reverb: 0x32
- path: sounds/bgmPicoriFestival_track0.bin - path: sounds/bgmPicoriFestival_track0.bin
start: 0xddd534 start: 0xddd534
size: 0x8 size: 0x8
@ -72208,6 +72296,12 @@
starts: starts:
EU: 0xeea30b EU: 0xeea30b
size: 0x1 size: 0x1
- path: sounds/bgmWindRuins.s
start: 0xddec38
type: midi
options:
group: 56
reverb: 0x28
- path: sounds/bgmLearnScroll_track0_USA-JP-DEMO_USA-DEMO_JP.bin - path: sounds/bgmLearnScroll_track0_USA-JP-DEMO_USA-DEMO_JP.bin
variants: variants:
- USA - USA

File diff suppressed because it is too large Load Diff

View File

@ -152,7 +152,7 @@ void ReadAgbTracks() {
int addedPadding = 0; int addedPadding = 8;
// TODO configurable??? // TODO configurable???
g_midiTimeDiv = 24; g_midiTimeDiv = 24;
@ -180,19 +180,27 @@ void ReadAgbTracks() {
int loopStartTime = 0; int loopStartTime = 0;
unsigned int trackEnd = unsigned int trackEnd =
(trackPointers.size() > count ? trackPointers[count] : (g_fileStartOffset + REDUCE_POINTERS)) - 10 - (trackPointers.size() > count ? trackPointers[count] : (g_fileStartOffset + REDUCE_POINTERS)) ; // Use offset to header as end for last track
addedPadding; // Use offset to header as end for last track
if (g_verbose) if (g_verbose)
std::printf("End of track: %X\n", trackEnd); std::printf("End of track: %X\n", trackEnd);
Seek(FILE_OFFSET + trackEnd - REDUCE_POINTERS); Seek(FILE_OFFSET + trackEnd - REDUCE_POINTERS);
// search for a few bytes whether there is a loop end // search for a few bytes whether there is a loop end
for (int i = 0; i < 5 + addedPadding; i++) { for (int i = 5; i < 10 + addedPadding; i++) {
if (trackEnd - i < trackPointer) {
// Ignore GOTOs from the previous track.
continue;
}
Seek(FILE_OFFSET + trackEnd - REDUCE_POINTERS -i);
if (ReadInt8() == GOTO) { if (ReadInt8() == GOTO) {
if (g_verbose) if (g_verbose)
std::printf("Has loop: %d\n", i); std::printf("Has loop: %d\n", i);
hasLoop = true;
loopAddress = lReadInt32() + FILE_OFFSET - REDUCE_POINTERS; loopAddress = lReadInt32() + FILE_OFFSET - REDUCE_POINTERS;
if (loopAddress > 0x1000000) {
// The 0xB1 was probably part of the pointer or something.
continue;
}
hasLoop = true;
if (g_verbose) { if (g_verbose) {
std::printf("Addr: %X\n", GetCurrentPtr()); std::printf("Addr: %X\n", GetCurrentPtr());
std::printf("Addr: %X\n", loopAddress); std::printf("Addr: %X\n", loopAddress);
@ -266,6 +274,17 @@ void ReadAgbTracks() {
while (!endOfTrack) { while (!endOfTrack) {
// std::printf("type: %X\n", type); // std::printf("type: %X\n", type);
if (hasLoop && !foundLoop && GetCurrentPtr()-1 == loopAddress) {
if (g_verbose)
std::printf("<<<< inserted loop start\n");
//foundLoop = true;
loopStartTime = currentTime;
Event event;
event.time = loopStartTime;
event.type = EventType::LoopBegin;
events.push_back(event);
}
if (g_verbose) if (g_verbose)
std::printf("%X|@%d\t ", GetCurrentPtr() - 1, currentTime); std::printf("%X|@%d\t ", GetCurrentPtr() - 1, currentTime);
if (type < 0x80) { if (type < 0x80) {
@ -449,6 +468,7 @@ void ReadAgbTracks() {
} else { } else {
type = note; type = note;
note = lastNote; note = lastNote;
velocity = lastVelocity;
lastNoteUsed = true; lastNoteUsed = true;
lastVelocityUsed = true; lastVelocityUsed = true;
} }
@ -769,16 +789,7 @@ void ReadAgbTracks() {
break; break;
} }
if (hasLoop && !foundLoop && GetCurrentPtr() == loopAddress) {
if (g_verbose)
std::printf("<<<< inserted loop start\n");
//foundLoop = true;
loopStartTime = currentTime;
Event event;
event.time = loopStartTime;
event.type = EventType::LoopBegin;
events.push_back(event);
}
// TODO notes, waits, // TODO notes, waits,
type = ReadInt8(); type = ReadInt8();

View File

@ -472,7 +472,8 @@ void PrintAgbTrack(std::vector<Event>& events)
case EventType::LoopEnd: case EventType::LoopEnd:
PrintByte("GOTO"); PrintByte("GOTO");
PrintWord("%s_%u_B%u", g_asmLabel.c_str(), g_agbTrack, loopEndBlockNum); PrintWord("%s_%u_B%u", g_asmLabel.c_str(), g_agbTrack, loopEndBlockNum);
PrintSeqLoopLabel(event); //PrintSeqLoopLabel(event); // Breaks same note in EOT bgmCrenelStorm 0xDD4356
PrintWait(event.time); // instead just print the wait
break; break;
case EventType::LoopEndBegin: case EventType::LoopEndBegin:
PrintByte("GOTO"); PrintByte("GOTO");