Register - Login
Views: 99380032
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-23-22 11:14:09 PM
Jul - SM64 Hacking (Archive) - SM64 Music Editing New poll - New thread - New reply
Pages: 1 2 3 4 5 6 7 8 Next newer thread | Next older thread
rstewart215804
User
Crazed Mario 64 Hacker!!!
Level: 11


Posts: 15/18
EXP: 5578
For next: 407

Since: 09-13-07


Since last post: 13.2 years
Last activity: 11.7 years

Posted on 08-10-08 07:55:09 AM Link | Quote
Here is some more useful information.

The commands around 0x90 change when in an instrument channel. The command now loads multiple music scores into the instrument and plays them. By assigning multiple scores to an instrument SM64 can play two or more notes at the same time, or allow the notes to offset each other. In the music data 0xFF is again used to jump back or end the note data.

------------------------------------
[9*] [0082]
1: Score number.
2: Offset to note data.
------------------------------------

In the note data there is a few other command that have different lengths. Commands such as 0xE8, 0xE6, and 0xE3 are one byte in length. I don’t quite know how they are used but I think they are used to lengthen the previous note out. (Actually since I don’t know the length of every note command, the commands might be differ.)


For experimentation in making music I suggest people use NEMU. By going to 801F8250 in the ram, you will find the exact data for the song that is currently playing in the game. You can then change the data and it will show you results without having to open and close the game. Anything you want permanently altered though has to be written to the Rom. (By the way NEMU doesn’t like the extended rom so any experimentation has to be done with the original SM64 rom.)


____________________
Just you wait until next time. Until then, keep that Control Stick smokin’! Buwaa ha ha!
messiaen
Catgirl
Level: 68


Posts: 206/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 08-10-08 06:25:56 PM (last edited by messiaen at 08-16-08 04:53 PM) Link | Quote
Ops, acidentally deleted this post. Anyway, rstewart215804, this was just the piece of info I was looking for!

I'm doing a 100% "deconstruction" of the Toad's Music, here is how far I got. I omitted the music data because I'm not done with it, and because the overall format should be our focus now.

One easy way to find out what's in a channel before looking at the music data is to replace all the main 0x9x pointers with the same value. This is a good trick to use also on level scripts to NOPe something (ie, creating a repeated 0x22 command).

It's also worth looking for bit patterns in these 1 byte commands.


------------------------
Toad's music - 0x7CA8F0
------------------------

D3 80 (Sort of Header?)

D7 01 81 <- According to DJ Bouche, Channel enable flag?

90 00 19 <-- Pointer to track data (chan 00?) --> E E E E G G F G A B
97 00 2D <-- Pointer to track data (chan 07?) --> C Bb A Ab G
98 00 47 <-- Pointer to track data (chan 08?) --> C Bb A Ab G one octave lower

DB 50

DD AA (Tempo = 170 BPM)

FD 81 28
D6 01 81 <-- Probably related to the 0xD7 on the beggining (certainly not a jump)
FF

------
0x19 <-- Entry-point for channel 00?
------

C4
90 00 5B <-- Call this
91 00 79 <-- Call this

DF 7F 6A
DD 4A
D4 14
C1 00
FD 81 20
FF

------
0x2D <-- Entry-point for channel 07?
------
C4
90 00 86 <-- Call this
91 00 93 <-- Call this
92 00 A0 <-- Call this
93 00 AB <-- Call this
DF 7F 69
DD 36 <-- In this context, I don't think this is the tempo setting.
D4 14
C1 07
FD 81 28
FF

-----
0x47 <-- Entry point for channel 08?
-----

C4 <-- Marks the beggining / initializes something?
90 00 B8 <-- Call this
91 00 C5 <-- Call this
C1 08
DF 6E 68
DD 28
D4 14
FD 81 28
FF

rstewart215804
User
Crazed Mario 64 Hacker!!!
Level: 11


Posts: 16/18
EXP: 5578
For next: 407

Since: 09-13-07


Since last post: 13.2 years
Last activity: 11.7 years

Posted on 08-10-08 09:31:28 PM Link | Quote
I chose the File Select song as the one I experimented with. Like Toads Song it is short and repeats a lot. I choose a similar way of getting only one score to play by muteing all the instruments that I don’t want and then re-pointing any extra scores to a 0xFF. Here is some of the song data and the first score to show what the notes are like.


///////////////////////////////////////

SM64 -- 7CC1D0

RAM -- 801F8250
SONG -- 801F826B
///////////////////////////////////////
D380 // Song Header
D7020F // channel enable flag
900022 // set channel instrument
910036 // set channel instrument
92004A // set channel instrument
93005E // set channel instrument
99006F // set channel instrument
DB41 // set global volume
DD64 // set speed (BPM)
////////// Start of song
FD8600
FB0005 // Number of instruments??
D6020F // Jump to
FF // End Track
C4 // Start Instrument ??
900082 // set music score
91010E // set music score
C100 // set instrument
DF7F6D // set instrument volume
DD36 // set speed (BPM)
D428
FD85F8
FF
C4
90016B // set music score
9101F9 // set music score
DF646C // set instrument volume
DD6E // set speed (BPM)
D428
C101 // set instrument
FD8600
FF // end data
C4
900256 // set music score
910272 // set music score
C102 // set instrument
DF7F6B // set instrument volume
DD46 // set speed (BPM)
D428
FD8600
FF
C4
90027F // set music score
DF506A // set instrument volume
DD1E // set speed (BPM)
D428
C103 // set instrument
FD8600
FF
C4
900299 // set music score
DF7F69 // set instrument volume
DD40 // set speed (BPM)
D428
C17F // set instrument
DC00
FD8600
FF
//////////Start of Music
[] = NOTE
() = LEGNTH
** = VOLUME
////////// -- 801F82D2
[62] (0C) *54*
[A9] 56 *6B*
[29] (24) *54* 95
[29] (48) *58* D5
[29] (0C) *4E* 2B
[A6] 52 00
[27] (24) *4E* 95
[22] (18) *52* 80
[29] (24) *4E* AA
[29] (0C) *58* 2B
[26] (78) *58* 1E
[22] (18) *54* 80
[29] (0C) *5A* 16
[24] (18) *50* 8B
[29] (48) *58* D1
[29] (0C) *56* 2B
[26] (18) *5A* 75
[A9] 5C 4B
[A2] 58 6B
[29] (24) *5A* AA
[29] (0C) *62* 2B
[26] (78) *5A* 1E
[29] (18) *52* 75
[29] (24) *52* AA
[29] (80) *84* 56 E8
[29] (18) *50* 6B
[29] (0C) *52* 16
[26] (18) *58* A0
[29] (80) *84* 54 E6
[29] (18) *5A* 6B
[29] (24) *5A* A3
[29] (80) *84* 64 E3
[30] (18) *49* 75
[30] (24) *4E* A3
[72] (0C) *50
C0 08
FF




____________________
Just you wait until next time. Until then, keep that Control Stick smokin’! Buwaa ha ha!
messiaen
Catgirl
Level: 68


Posts: 207/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 08-10-08 09:44:59 PM (last edited by messiaen at 08-10-08 07:35 PM) Link | Quote
Nice, I'll check more on this track later. I think you got the correct byte order, I was experimenting before and I noticed that the velocity (volume) I was changing affected the previous note, so that's probably the correct order: [pitch] [ticks] [velocity] [something].

Have you checked all these 0xDD commands? I believe the first one is the global tempo, but I find hard to believe there's different tempo settings for each channel, especially because the values aren't simple proportions. That is just, unmusical!. Could you check on this?

Here is more from the Toad's song music. The jump structure is sort like the polygon data:

90 00 19 <-- Pointer to track data (chan 00?) --> High melody E E E E G G F G A B


------
0x19 <-- Entry-point for channel 00?
------

C4
90 00 5B <-- Call this

------
0x5B
------

[37] (18) 63 AA E (18)
~B7~ 5C B5 E
~B7~ 54 B5 E
~B7~ 61 AA E
[3A] (30) 67 E0 G (30)
~BA~ 61 DA G
[38] (52) 5F 16 F (52) [ 60 - 52 = 0E, ticks to fill the measure)

7C 07 5F
C0 06
FF

91 00 79 <-- Call this

------
0x79
------
C0
81 08
[3A] (0E) 5A 37 G

7E 09 67
C0 01
FF

DF 7F 6A
DD 4A
D4 14
C1 00
FD 81 20
FF


The problem is that I can't find the last two notes, high A and B. They should be 3C, 3E or A4, A6. Also, these two parts of data called by the 9x aren't played at the same time. I have to check more, but this could be just jumps, and simultaneuos notes are made by using a 00 duration. At least, this is how it's done in MIDI as far as I can remember.
rstewart215804
User
Crazed Mario 64 Hacker!!!
Level: 11


Posts: 17/18
EXP: 5578
For next: 407

Since: 09-13-07


Since last post: 13.2 years
Last activity: 11.7 years

Posted on 08-11-08 04:23:13 AM Link | Quote
The 0xDD command inside the instrument channel controls the balance for the instrument. Full left is 00 full right is 7F. I never noticed it before because I had the game set to mono.

I finally found out what the 4th byte does. It is part of the notes length. In SM64 notes are played one after another with out stopping. The 4th byte stops the note early leaving a section with out sound. The higher the 4th byte the early it will stop. It may be called release.

Here is a better explanation about the notes from 9C to BE. They copy the previous notes length.

[A9] [54] [6B]
1: Note
2: Volume
3: Stopping time.

I think I found your missing notes. Commands around 60 to 70 also are notes and are 3 bytes long. They are either the first or the last notes in a score, and do not contain a stopping length.

[7C] [07] [5F]
1: Note
2: Length
3: Volume

In toads song the A note is 7C075F in the first score and note B is 7E0967 in the second score.


____________________
Just you wait until next time. Until then, keep that Control Stick smokin’! Buwaa ha ha!
messiaen
Catgirl
Level: 68


Posts: 208/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 08-11-08 12:27:38 PM (last edited by messiaen at 08-12-08 01:31 PM) Link | Quote
Nice discovery, it works exactly like MIDI:

MIDI Value 0 - pan hard left
MIDI Value 1 - pan hard left
MIDI Value 64 - pan center
MIDI Value 127 - pan hard right

(edited: rephrased this) So, The last byte is the actual duration of the note, while the () one is the "tick before next event" one.

I confirmed that 0xDB and 0xDF are respectively Global Volume and Track Volume from DJBouche's notes, however I'm not getting success changing instruments, is this really done by the 0xC1 command?

---

Here is the pitch table (more testing will be necessary to find the correct range for this):

Octave|| Note Numbers
# || C | C# | D | D# | E | F | F# | G | G# | A | A# B
------------------------------------------------------------------------------
x-1 || 67 | 68 | 69 | 6A | 6B | 6C | 6D | 6E | 6F | 70 | 71 | 72
x || 73 | 74 | 75 | 76 | 77 | 78 | 79 | 7A | 7B | 7C | 7D | 7E
x+1 || 7F


I find it high likely that more optimizations of this kind will be found, especially for pauses. This 0xB0 command on the Title Music makes a two 4/4 measure pause, but I still have to check how it's used on other tracks:

B0 54 F0

(All the range between 0xB0 - 0xB9 seems to commands).

---

Look in the beggining of the Slide Melody how the three "formats" are mixed to get maximum optimization (I labeled them as [xx], ~xx~ and "xx").


0xE0 Main Melody

C4
90 04 75

0x475

36 (60) 57 E0
~B0~ 5A 28 <--A
[30] 30 52 3B <-- A
~B4~ 6D 3B <-- C#
~B2~ 60 30 <-- B
"71" 2A 5F <-- Bb
FF

91 04 8A
92 04 95
93 04 A0
D4 14
C1 02
DF 6E 6C
DD 48 <-- Pan
D3 00
FD
81 80


I also did a little experience setting an infinite loop:

LoopStart:
C0 83 00
notes
FC LoopStart

What's interesting is that the first "C0 83 00" is probably a pause command, because there is a delay before the loops repeats. When I change it to "C0 80 00", the loop starts right away.

---

I did a Mario 64 port of the "underwater" SMB1 theme!

<object width="425" height="350"> <embed src="http://www.youtube.com/v/SW6XEwrqq9M" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object>
Shadic
Alakadoof?
Level: 151


Posts: 2388/6927
EXP: 42322732
For next: 973744

Since: 07-22-07

Pronouns: he/him
From: Olympia, WA

Since last post: 2 days
Last activity: 5 hours

Posted on 08-12-08 06:06:57 PM Link | Quote
messiaen
Catgirl
Level: 68


Posts: 209/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 08-13-08 09:56:55 PM Link | Quote
I just noticed that there are sequences before 0x7B3E10, then went back in the ROM and guess what, I found the pointers for the sequences! They are at 0x7B0860.

Also, I took a look at the 0x37 commands in the first rstewart215804 post. They are used in the main level scripts, not only for the press start/title screen but also for the "act select" music and something else I forgot . The song numbers for this command are a bit different, but perhaps it will be clear by looking at this pointer table.
Kenshi
Member
Level: 21


Posts: 20/75
EXP: 47437
For next: 2506

Since: 09-15-07

From: NY

Since last post: 6.9 years
Last activity: 6.2 years

Posted on 08-13-08 10:22:31 PM (last edited by mortalkenshi2 at 08-13-08 07:54 PM) Link | Quote
I experimented with most of the data here.... didn't go to well because some notes were played in different lengths and it came out stupid. Has to do with instruments and track jumpings etc.

BTW messiaen, you put in all the notes from the actual song right in your smb 1 music hack?

How can I find easily in lets say another song where the notes start off? Specifically the title screen music as I am going to try a little exeriment.


____________________
messiaen
Catgirl
Level: 68


Posts: 256/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 09-19-08 06:44:52 PM (last edited by messiaen at 09-19-08 03:47 PM) Link | Quote
Here is a little tool that may help discovering more about the music format:

Mario 64 Sequenced Music Parser v0.01alpha.

It reads the raw data of a 'sequence file' (refer to first post in this thread for offsets) and outputs a parsed .txt file. I posted a few sample files at the URL above (not the same that were posted two days ago). This is something I programmed quickly for myself, however since other people might be interested (rstewart are you still there ?) I'm releasing it.

The output quality (especially for the specific music data) varies a lot, but the purpose of this is to help discovering about the format itself. I recommend reading first the "koopa.txt" file, because it's almost 100% correct, except for a bug with the 0xC0 command (which I think has a variable lenght, sometimes 1 byte sometimes 2.).

Sample output for the Title Screen SMB1 music:



0x1223: C0 --> ?
0x1224: 83 0 --> Rest related?
0x1226: Input 0x27 | Type: 0 | Note C3 | Timestamp: Dotted Quarter (0x48) | Velocity: 0x60 | Duration: 0x8e
0x122a: Input 0xa2 | Type: 2 | Note G2 | Timestamp: (same as previous one) | Velocity: 0x5e | Duration: 0xae
0x122d: Input 0x9f | Type: 2 | Note E2 | Timestamp: (same as previous one) | Velocity: 0x66 | Duration: 0xb2
0x1230: Input 0x24 | Type: 0 | Note A2 | Timestamp: Quarter note (0x30) | Velocity: 0x64 | Duration: 0xa5
0x1234: Input 0xa6 | Type: 2 | Note B2 | Timestamp: (same as previous one) | Velocity: 0x64 | Duration: 0x95
0x1237: Input 0x25 | Type: 0 | Note A#2 | Timestamp: Dotted Quarter (0x48) | Velocity: 0x5f | Duration: 0x99
0x123b: Input 0x22 | Type: 0 | Note G2 | Timestamp: Other (0x20) | Velocity: 0x62 | Duration: 0x78
0x123f: Input 0xab | Type: 2 | Note E3 | Timestamp: (same as previous one) | Velocity: 0x64 | Duration: 0x80
0x1242: Input 0xae | Type: 2 | Note G3 | Timestamp: (same as previous one) | Velocity: 0x60 | Duration: 0x70
0x1245: Input 0x30 | Type: 0 | Note A3 | Timestamp: Quarter note (0x30) | Velocity: 0x6a | Duration: 0x65
0x1249: Input 0x2c | Type: 0 | Note F3 | Timestamp: Eight-note (0x18) | Velocity: 0x60 | Duration: 0x4b
0x124d: Input 0x2e | Type: 0 | Note G3 | Timestamp: Quarter note (0x30) | Velocity: 0x66 | Duration: 0x80
0x1251: Input 0xab | Type: 2 | Note E3 | Timestamp: (same as previous one) | Velocity: 0x5c | Duration: 0x90
0x1254: Input 0xa7 | Type: 2 | Note C3 | Timestamp: (same as previous one) | Velocity: 0x50 | Duration: 0x90
0x1257: Input 0x29 | Type: 0 | Note D3 | Timestamp: Eight-note (0x18) | Velocity: 0x5e | Duration: 0x16
0x125b: Input 0x26 | Type: 0 | Note B2 | Timestamp: Other (0x81) | Velocity: 0xb0 | Duration: 0x54



____________________
Mario 64 notes @ http://sites.google.com/site/messiaen64/
Kenshi
Member
Level: 21


Posts: 27/75
EXP: 47437
For next: 2506

Since: 09-15-07

From: NY

Since last post: 6.9 years
Last activity: 6.2 years

Posted on 09-19-08 08:54:54 PM (last edited by mortalkenshi2 at 09-19-08 05:56 PM) Link | Quote
Ok so clicking on it led me to your website, but don't have enough time to read any of it. I'll look through it when I get home.

____________________



messiaen
Catgirl
Level: 68


Posts: 257/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 09-19-08 10:11:04 PM (last edited by messiaen at 09-28-08 03:54 PM) Link | Quote
The link is to a folder which contains the program (m64parser003.zip) and also a few already processed files.

Edit: Big update! Download link for v0.03 and a specification of the format. The current version can decode about 5 or 6 tracks 100% !

Edit 3000: Here is another retro music hack .

<object width="425" height="344"><embed src="http://www.youtube.com/v/aVOyuynFN34&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>

____________________
Mario 64 notes @ http://sites.google.com/site/messiaen64/
Celux

Red Cheep-cheep
Level: 32


Posts: 16/202
EXP: 202232
For next: 4210

Since: 09-22-08


Since last post: 7.2 years
Last activity: 3.7 years

Posted on 10-22-08 04:07:30 AM (last edited by Celux at 12-09-14 08:34:33 AM) Link | Quote
Its great to see how much progress is being made in this area. To be honest, a few weeks ago I wouldn't have thought this possible.
messiaen
Catgirl
Level: 68


Posts: 346/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 10-22-08 04:38:36 PM (last edited by messiaen at 10-22-08 01:39 PM) Link | Quote
It's been a while since I last tried something with the music, but I'll try to update that specification with some very minor findings. The problem is getting the right samples to play, it seems this is something external to the sequence file.

Something I found recently is that the NDS sound format was already reverse-engineered. So, I ripped the sequence files from SM64DS and using loveemu's "sseq" tool - which has a verbose mode similar to my program output - I can compare the files and see if my program got the right notes, because the sequences are almost the same.

Here is one example, the same excerpt of Toad's Music in DS and Mario 64 format. Mario 64 format is a lot more messier (because it's more compact).

Edit: Yeah! With some minor manual editing I got one Mario Kart 64 sequence to play in Mario 64:

<object width="425" height="350"> <embed src="http://www.youtube.com/v/vTR1mJTkYMo" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object>

No Trophy For You ! I probably got a bit lucky because the samples sound very reasoneable.

____________________
Mario 64 notes @ http://sites.google.com/site/messiaen64/
Celux

Red Cheep-cheep
Level: 32


Posts: 19/202
EXP: 202232
For next: 4210

Since: 09-22-08


Since last post: 7.2 years
Last activity: 3.7 years

Posted on 10-23-08 04:07:31 AM (last edited by Celux at 12-09-14 08:34:59 AM) Link | Quote
Wow. This is really getting very advanced now. Well Done !
Deleted User
Collection of nobodies
Posted on 10-23-08 04:35:34 AM Link | Quote
Oh god...
The hard work is quite visibly showing off now.
Quite so.

____________________


===================
[Posted by Glitschen]
Lyskar
12210
-The Chaos within trumps the Chaos without-
Level: 192


Posts: 1793/12211
EXP: 99235608
For next: 637963

Since: 07-03-07

From: 52-2-88-7

Since last post: 7.4 years
Last activity: 7.3 years

Posted on 10-23-08 06:21:12 AM Link | Quote

Time/Date

10-23-08 12:21:12am

Posts

1793

Days Here

477

Level

59
Metal_Man88
Local Moderator
Yes, all it took was deleting all the junk posts and giving them room to do stuff.

Wonder what Masky64 and the other people who once plagued us think now. Mwa ha ha ha ha.

____________________
Original Layout © Tobias Kelmandia
messiaen
Catgirl
Level: 68


Posts: 355/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 10-25-08 08:33:33 PM (last edited by messiaen at 10-25-08 05:47 PM) Link | Quote
I created another handy music tool: Sequence Bank Ripper (seq_rip.zip). It extracts all the sequences from a Mario 64, Mario Kart 64 or Wave Race 64 ROM as individual files.

In this first release, you have to provide the sequence bank start offset, but this is something that won't be necessary in later versions, as soon as I learn more about binary searching .

Usage is as follows:

seq_rip.exe [rom] [hex offset]
ie: seq_rip.exe mario_us.z64 0x7B0860

Here are offsets for Mario 64 and Mario Kart 64 (US versions):

Super Mario 64 (US) - 0x7B0860
Mario Kart 64 (US) - 0xBC5F60

I don't have the Wave Race 64 ROM now, but I can provide offsets later. Something I want to look further is at the differences between NTSC and PAL Mario 64 sequences. Some commands are a bit different.

Edit: the input file must be in the .z64 format to avoid endianness (byte-order) issues

____________________
Mario 64 notes @ http://sites.google.com/site/messiaen64/
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 333/621
EXP: 1135504
For next: 21615

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 10-26-08 03:43:24 AM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
Originally posted by messiaen

Edit: the input file must be in the .z64 format to avoid endianness (byte-order) issues



I've seen .z64 ROMs that didn't have the expected byte-order, so it may be a problem even with a ROM labelled as .z64.

____________________
messiaen
Catgirl
Level: 68


Posts: 368/1085
EXP: 2594040
For next: 134760

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 11-01-08 12:57:02 PM Link | Quote
Thanks for warning this, I will check the first two bytes (0x8037 in .z64) in the ROM header to ensure that the input ROM is in the right order.

So far, getting the Mario Kart 64 sequences to play has been just a matter of stripping a few commands from the 'track headers', so I can probably write a simple converter (which doesn't mean the track will sound perfect).

One thing that I can't understand is how the samples (instruments) are loaded. This isn't specified in the sequence file (it's something external to it) so if you simply overwrite one of the 'sequence files' you still be limited to the samples used in that specific sequence.

---

Let me bump this again. I just released a minor update of the Mario64 sequenced music parser (m64parser004.zip) including the source for the last version (some parts may be ugly and bad written but it's simple to understand).

I'm experimenting what can be done using the midifile.c library, which is really great. It can read, parse and write MIDI files, all you have to do is hook your functions in the existing code in a very straightforward manner. I got a minimal midi export for individual tracks, but getting everything togheter will be a bit more difficult. Eventually I want to try some very limited MIDI importer, the problem is condensating "Note On + Note Offs" commands into the Mario 64 format.

____________________
Mario 64 notes @ http://sites.google.com/site/messiaen64/
Pages: 1 2 3 4 5 6 7 8 Next newer thread | Next older thread
Jul - SM64 Hacking (Archive) - SM64 Music Editing New poll - New thread - New reply


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

33 database queries, 12 query cache hits.
Query execution time:  0.092180 seconds
Script execution time:  0.041026 seconds
Total render time:  0.133206 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 299 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 189 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 93 - Warning: unescaped & or unknown entity "&page"
line 149 column 124 - Warning: unescaped & or unknown entity "&page"
line 149 column 155 - Warning: unescaped & or unknown entity "&page"
line 149 column 188 - Warning: unescaped & or unknown entity "&page"
line 149 column 219 - Warning: unescaped & or unknown entity "&page"
line 149 column 250 - Warning: unescaped & or unknown entity "&page"
line 149 column 281 - Warning: unescaped & or unknown entity "&page"
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 316 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 176 column 13 - Warning: missing <tr>
line 177 column 98 - Warning: unescaped & or unknown entity "&postid"
line 196 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 198 column 9 - Warning: missing <tr>
line 216 column 13 - Warning: missing <tr>
line 217 column 98 - Warning: unescaped & or unknown entity "&postid"
line 295 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 297 column 9 - Warning: missing <tr>
line 315 column 13 - Warning: missing <tr>
line 316 column 98 - Warning: unescaped & or unknown entity "&postid"
line 430 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 432 column 9 - Warning: missing <tr>
line 450 column 13 - Warning: missing <tr>
line 451 column 98 - Warning: unescaped & or unknown entity "&postid"
line 509 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 511 column 9 - Warning: missing <tr>
line 529 column 13 - Warning: missing <tr>
line 530 column 98 - Warning: unescaped & or unknown entity "&postid"
line 554 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 556 column 9 - Warning: missing <tr>
line 574 column 13 - Warning: missing <tr>
line 575 column 98 - Warning: unescaped & or unknown entity "&postid"
line 651 column 2560 - Warning: discarding unexpected <param>
line 651 column 2626 - Warning: discarding unexpected </param>
line 654 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 656 column 9 - Warning: missing <tr>
line 674 column 13 - Warning: missing <tr>
line 675 column 98 - Warning: unescaped & or unknown entity "&postid"
line 677 column 198 - Warning: missing <tr>
line 677 column 202 - Warning: <style> isn't allowed in <td> elements
line 677 column 198 - Info: <td> previously mentioned
line 678 column 1208 - Warning: missing <tr>
line 678 column 1268 - Warning: missing </div>
line 677 column 1156 - Warning: missing </div>
line 677 column 1133 - Warning: missing </div>
line 677 column 1112 - Warning: missing </div>
line 677 column 1092 - Warning: missing </div>
line 677 column 1073 - Warning: missing </div>
line 685 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 687 column 9 - Warning: missing <tr>
line 705 column 13 - Warning: missing <tr>
line 706 column 98 - Warning: unescaped & or unknown entity "&postid"
line 713 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 715 column 9 - Warning: missing <tr>
line 733 column 13 - Warning: missing <tr>
line 734 column 98 - Warning: unescaped & or unknown entity "&postid"
line 741 column 601 - Warning: unescaped & or unknown entity "&GamerTag"
line 744 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 746 column 9 - Warning: missing <tr>
line 764 column 13 - Warning: missing <tr>
line 765 column 98 - Warning: unescaped & or unknown entity "&postid"
line 798 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 800 column 9 - Warning: missing <tr>
line 818 column 13 - Warning: missing <tr>
line 819 column 98 - Warning: unescaped & or unknown entity "&postid"
line 821 column 277 - Warning: unescaped & or unknown entity "&GamerTag"
line 827 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 829 column 9 - Warning: missing <tr>
line 847 column 13 - Warning: missing <tr>
line 848 column 98 - Warning: unescaped & or unknown entity "&postid"
line 856 column 716 - Warning: unescaped & or unknown entity "&hl"
line 856 column 722 - Warning: unescaped & or unknown entity "&fs"
line 856 column 653 - Warning: discarding unexpected <param>
line 856 column 729 - Warning: discarding unexpected </param>
line 856 column 737 - Warning: discarding unexpected <param>
line 856 column 780 - Warning: discarding unexpected </param>
line 856 column 839 - Warning: unescaped & or unknown entity "&hl"
line 856 column 845 - Warning: unescaped & or unknown entity "&fs"
line 859 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 861 column 9 - Warning: missing <tr>
line 865 column 82 - Warning: unescaped & or unknown entity "&r"
line 879 column 13 - Warning: missing <tr>
line 880 column 98 - Warning: unescaped & or unknown entity "&postid"
line 885 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 887 column 9 - Warning: missing <tr>
line 905 column 13 - Warning: missing <tr>
line 906 column 98 - Warning: unescaped & or unknown entity "&postid"
line 916 column 1069 - Warning: discarding unexpected <param>
line 916 column 1135 - Warning: discarding unexpected </param>
line 921 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 923 column 9 - Warning: missing <tr>
line 927 column 82 - Warning: unescaped & or unknown entity "&r"
line 941 column 13 - Warning: missing <tr>
line 942 column 98 - Warning: unescaped & or unknown entity "&postid"
line 946 column 15 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 947 column 25 - Warning: missing <tr>
line 954 column 33 - Warning: missing <tr>
line 955 column 118 - Warning: unescaped & or unknown entity "&postid"
line 961 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 963 column 9 - Warning: missing <tr>
line 981 column 13 - Warning: missing <tr>
line 982 column 98 - Warning: unescaped & or unknown entity "&postid"
line 984 column 73 - Warning: <style> isn't allowed in <td> elements
line 984 column 9 - Info: <td> previously mentioned
line 984 column 960 - Error: <z> is not recognized!
line 984 column 960 - Warning: discarding unexpected <z>
line 984 column 982 - Warning: discarding unexpected </z>
line 984 column 1008 - Error: <z> is not recognized!
line 984 column 1008 - Warning: discarding unexpected <z>
line 984 column 1015 - Warning: discarding unexpected </z>
line 984 column 1045 - Error: <z> is not recognized!
line 984 column 1045 - Warning: discarding unexpected <z>
line 984 column 1051 - Warning: discarding unexpected </z>
line 984 column 1077 - Error: <z> is not recognized!
line 984 column 1077 - Warning: discarding unexpected <z>
line 984 column 1082 - Warning: discarding unexpected </z>
line 989 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 991 column 9 - Warning: missing <tr>
line 1009 column 13 - Warning: missing <tr>
line 1010 column 98 - Warning: unescaped & or unknown entity "&postid"
line 1031 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1033 column 9 - Warning: missing <tr>
line 1051 column 13 - Warning: missing <tr>
line 1052 column 98 - Warning: unescaped & or unknown entity "&postid"
line 1054 column 73 - Warning: <style> isn't allowed in <td> elements
line 1054 column 9 - Info: <td> previously mentioned
line 1054 column 1511 - Warning: missing </font> before <blockquote>
line 1054 column 1590 - Warning: inserting implicit <font>
line 1054 column 1590 - Warning: missing </font> before <hr>
line 1055 column 1 - Warning: inserting implicit <font>
line 1055 column 1 - Warning: missing </font> before <hr>
line 1055 column 1758 - Warning: inserting implicit <font>
line 1056 column 1 - Warning: inserting implicit <font>
line 1054 column 137 - Warning: missing </div>
line 1060 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1062 column 9 - Warning: missing <tr>
line 1080 column 13 - Warning: missing <tr>
line 1081 column 98 - Warning: unescaped & or unknown entity "&postid"
line 1096 column 17 - Warning: missing <tr>
line 1096 column 17 - Warning: discarding unexpected <table>
line 1099 column 35 - Warning: missing <tr>
line 1099 column 93 - Warning: unescaped & or unknown entity "&page"
line 1099 column 124 - Warning: unescaped & or unknown entity "&page"
line 1099 column 155 - Warning: unescaped & or unknown entity "&page"
line 1099 column 188 - Warning: unescaped & or unknown entity "&page"
line 1099 column 219 - Warning: unescaped & or unknown entity "&page"
line 1099 column 250 - Warning: unescaped & or unknown entity "&page"
line 1099 column 281 - Warning: unescaped & or unknown entity "&page"
line 1099 column 50 - Warning: missing </font> before </td>
line 1099 column 316 - Warning: missing </font> before </table>
line 1101 column 35 - Warning: missing <tr>
line 1101 column 50 - Warning: missing </font> before </td>
line 1102 column 37 - Warning: unescaped & or unknown entity "&id"
line 1101 column 189 - Warning: missing </font> before </table>
line 1103 column 17 - Warning: discarding unexpected </textarea>
line 1103 column 28 - Warning: discarding unexpected </form>
line 1103 column 35 - Warning: discarding unexpected </embed>
line 1103 column 43 - Warning: discarding unexpected </noembed>
line 1103 column 53 - Warning: discarding unexpected </noscript>
line 1103 column 64 - Warning: discarding unexpected </noembed>
line 1103 column 74 - Warning: discarding unexpected </embed>
line 1103 column 82 - Warning: discarding unexpected </table>
line 1103 column 90 - Warning: discarding unexpected </table>
line 1105 column 9 - Warning: missing </font> before <table>
line 1117 column 25 - Warning: discarding unexpected </font>
line 1126 column 58 - Warning: discarding unexpected </font>
line 1104 column 1 - Warning: missing </center>
line 120 column 63 - Warning: <img> lacks "alt" attribute
line 125 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 125 column 93 - Warning: <img> lacks "alt" attribute
line 141 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 141 column 98 - Warning: <img> lacks "alt" attribute
line 148 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 244 - Warning: <img> proprietary attribute value "absmiddle"
line 161 column 22 - Warning: <img> lacks "alt" attribute
line 161 column 63 - Warning: <img> lacks "alt" attribute
line 161 column 112 - Warning: <img> lacks "alt" attribute
line 161 column 162 - Warning: <img> lacks "alt" attribute
line 162 column 11 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 201 column 22 - Warning: <img> lacks "alt" attribute
line 201 column 63 - Warning: <img> lacks "alt" attribute
line 201 column 111 - Warning: <img> lacks "alt" attribute
line 201 column 161 - Warning: <img> lacks "alt" attribute
line 212 column 15 - Warning: <img> lacks "alt" attribute
line 300 column 22 - Warning: <img> lacks "alt" attribute
line 300 column 63 - Warning: <img> lacks "alt" attribute
line 300 column 112 - Warning: <img> lacks "alt" attribute
line 300 column 162 - Warning: <img> lacks "alt" attribute
line 301 column 11 - Warning: <img> lacks "alt" attribute
line 311 column 15 - Warning: <img> lacks "alt" attribute
line 435 column 22 - Warning: <img> lacks "alt" attribute
line 435 column 63 - Warning: <img> lacks "alt" attribute
line 435 column 111 - Warning: <img> lacks "alt" attribute
line 435 column 161 - Warning: <img> lacks "alt" attribute
line 446 column 15 - Warning: <img> lacks "alt" attribute
line 514 column 22 - Warning: <img> lacks "alt" attribute
line 514 column 63 - Warning: <img> lacks "alt" attribute
line 514 column 112 - Warning: <img> lacks "alt" attribute
line 514 column 162 - Warning: <img> lacks "alt" attribute
line 515 column 11 - Warning: <img> lacks "alt" attribute
line 525 column 15 - Warning: <img> lacks "alt" attribute
line 559 column 22 - Warning: <img> lacks "alt" attribute
line 559 column 63 - Warning: <img> lacks "alt" attribute
line 559 column 111 - Warning: <img> lacks "alt" attribute
line 559 column 161 - Warning: <img> lacks "alt" attribute
line 570 column 15 - Warning: <img> lacks "alt" attribute
line 659 column 23 - Warning: <img> lacks "alt" attribute
line 659 column 64 - Warning: <img> lacks "alt" attribute
line 659 column 112 - Warning: <img> lacks "alt" attribute
line 659 column 162 - Warning: <img> lacks "alt" attribute
line 660 column 11 - Warning: <img> lacks "alt" attribute
line 670 column 15 - Warning: <img> lacks "alt" attribute
line 682 column 1470 - Warning: <img> proprietary attribute value "absmiddle"
line 682 column 1470 - Warning: <img> lacks "alt" attribute
line 682 column 1599 - Warning: <img> lacks "alt" attribute
line 690 column 22 - Warning: <img> lacks "alt" attribute
line 690 column 63 - Warning: <img> lacks "alt" attribute
line 690 column 111 - Warning: <img> lacks "alt" attribute
line 690 column 161 - Warning: <img> lacks "alt" attribute
line 701 column 15 - Warning: <img> lacks "alt" attribute
line 710 column 478 - Warning: <img> proprietary attribute value "absmiddle"
line 710 column 478 - Warning: <img> lacks "alt" attribute
line 718 column 22 - Warning: <img> lacks "alt" attribute
line 718 column 63 - Warning: <img> lacks "alt" attribute
line 718 column 112 - Warning: <img> lacks "alt" attribute
line 718 column 162 - Warning: <img> lacks "alt" attribute
line 719 column 11 - Warning: <img> lacks "alt" attribute
line 729 column 15 - Warning: <img> lacks "alt" attribute
line 741 column 625 - Warning: <img> lacks "alt" attribute
line 749 column 22 - Warning: <img> lacks "alt" attribute
line 749 column 63 - Warning: <img> lacks "alt" attribute
line 749 column 111 - Warning: <img> lacks "alt" attribute
line 749 column 161 - Warning: <img> lacks "alt" attribute
line 760 column 15 - Warning: <img> lacks "alt" attribute
line 771 column 624 - Warning: <img> proprietary attribute value "absmiddle"
line 771 column 624 - Warning: <img> lacks "alt" attribute
line 803 column 22 - Warning: <img> lacks "alt" attribute
line 803 column 63 - Warning: <img> lacks "alt" attribute
line 803 column 112 - Warning: <img> lacks "alt" attribute
line 803 column 162 - Warning: <img> lacks "alt" attribute
line 804 column 11 - Warning: <img> lacks "alt" attribute
line 814 column 15 - Warning: <img> lacks "alt" attribute
line 821 column 301 - Warning: <img> lacks "alt" attribute
line 823 column 450 - Warning: <img> lacks "alt" attribute
line 832 column 22 - Warning: <img> lacks "alt" attribute
line 832 column 63 - Warning: <img> lacks "alt" attribute
line 832 column 111 - Warning: <img> lacks "alt" attribute
line 832 column 161 - Warning: <img> lacks "alt" attribute
line 843 column 15 - Warning: <img> lacks "alt" attribute
line 854 column 555 - Warning: <img> proprietary attribute value "absmiddle"
line 854 column 555 - Warning: <img> lacks "alt" attribute
line 863 column 11 - Warning: <img> lacks "alt" attribute
line 864 column 22 - Warning: <img> lacks "alt" attribute
line 864 column 63 - Warning: <img> lacks "alt" attribute
line 864 column 112 - Warning: <img> lacks "alt" attribute
line 864 column 162 - Warning: <img> lacks "alt" attribute
line 865 column 11 - Warning: <img> lacks "alt" attribute
line 875 column 15 - Warning: <img> lacks "alt" attribute
line 890 column 22 - Warning: <img> lacks "alt" attribute
line 890 column 63 - Warning: <img> lacks "alt" attribute
line 890 column 111 - Warning: <img> lacks "alt" attribute
line 890 column 161 - Warning: <img> lacks "alt" attribute
line 901 column 15 - Warning: <img> lacks "alt" attribute
line 918 column 1326 - Warning: <img> proprietary attribute value "absmiddle"
line 918 column 1326 - Warning: <img> lacks "alt" attribute
line 925 column 11 - Warning: <img> lacks "alt" attribute
line 926 column 22 - Warning: <img> lacks "alt" attribute
line 926 column 63 - Warning: <img> lacks "alt" attribute
line 926 column 112 - Warning: <img> lacks "alt" attribute
line 926 column 162 - Warning: <img> lacks "alt" attribute
line 927 column 11 - Warning: <img> lacks "alt" attribute
line 937 column 15 - Warning: <img> lacks "alt" attribute
line 944 column 130 - Warning: <img> proprietary attribute value "absmiddle"
line 944 column 130 - Warning: <img> lacks "alt" attribute
line 950 column 37 - Warning: <img> lacks "alt" attribute
line 959 column 273 - Warning: <font> attribute "color" had invalid value "888888" and has been replaced
line 965 column 17 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 17 - Warning: <img> lacks "alt" attribute
line 965 column 60 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 60 - Warning: <img> lacks "alt" attribute
line 965 column 103 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 103 - Warning: <img> lacks "alt" attribute
line 965 column 146 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 146 - Warning: <img> lacks "alt" attribute
line 965 column 189 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 189 - Warning: <img> lacks "alt" attribute
line 965 column 232 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 232 - Warning: <img> lacks "alt" attribute
line 965 column 275 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 275 - Warning: <img> lacks "alt" attribute
line 965 column 318 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 318 - Warning: <img> lacks "alt" attribute
line 965 column 361 - Warning: <img> proprietary attribute value "absmiddle"
line 965 column 361 - Warning: <img> lacks "alt" attribute
line 966 column 23 - Warning: <img> lacks "alt" attribute
line 966 column 64 - Warning: <img> lacks "alt" attribute
line 966 column 113 - Warning: <img> lacks "alt" attribute
line 966 column 163 - Warning: <img> lacks "alt" attribute
line 967 column 11 - Warning: <img> lacks "alt" attribute
line 977 column 15 - Warning: <img> lacks "alt" attribute
line 984 column 1515 - Warning: <img> lacks "alt" attribute
line 984 column 1725 - Warning: <img> lacks "alt" attribute
line 984 column 1813 - Warning: <img> lacks "alt" attribute
line 984 column 2057 - Warning: <img> lacks "alt" attribute
line 986 column 2502 - Warning: <img> lacks "alt" attribute
line 986 column 2691 - Warning: <img> lacks "alt" attribute
line 994 column 22 - Warning: <img> lacks "alt" attribute
line 994 column 63 - Warning: <img> lacks "alt" attribute
line 994 column 111 - Warning: <img> lacks "alt" attribute
line 994 column 161 - Warning: <img> lacks "alt" attribute
line 1005 column 15 - Warning: <img> lacks "alt" attribute
line 1014 column 514 - Warning: <img> proprietary attribute value "absmiddle"
line 1014 column 514 - Warning: <img> lacks "alt" attribute
line 1036 column 22 - Warning: <img> lacks "alt" attribute
line 1036 column 63 - Warning: <img> lacks "alt" attribute
line 1036 column 112 - Warning: <img> lacks "alt" attribute
line 1036 column 162 - Warning: <img> lacks "alt" attribute
line 1047 column 15 - Warning: <img> lacks "alt" attribute
line 1054 column 693 - Warning: <img> lacks "alt" attribute
line 1057 column 1979 - Warning: <img> lacks "alt" attribute
line 1057 column 2138 - Warning: <img> lacks "alt" attribute
line 1065 column 22 - Warning: <img> lacks "alt" attribute
line 1065 column 63 - Warning: <img> lacks "alt" attribute
line 1065 column 111 - Warning: <img> lacks "alt" attribute
line 1065 column 161 - Warning: <img> lacks "alt" attribute
line 1076 column 15 - Warning: <img> lacks "alt" attribute
line 1102 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 1102 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 1102 column 244 - Warning: <img> proprietary attribute value "absmiddle"
line 1111 column 25 - Warning: <img> lacks "alt" attribute
line 1116 column 267 - Warning: <img> lacks "alt" attribute
line 1054 column 1511 - Warning: trimming empty <font>
line 1055 column 1758 - Warning: trimming empty <font>
line 1096 column 17 - Warning: trimming empty <tr>
line 125 column 68 - Warning: <nobr> is not approved by W3C
line 141 column 68 - Warning: <nobr> is not approved by W3C
line 177 column 27 - Warning: <nobr> is not approved by W3C
line 217 column 27 - Warning: <nobr> is not approved by W3C
line 316 column 27 - Warning: <nobr> is not approved by W3C
line 451 column 27 - Warning: <nobr> is not approved by W3C
line 530 column 27 - Warning: <nobr> is not approved by W3C
line 575 column 27 - Warning: <nobr> is not approved by W3C
line 675 column 27 - Warning: <nobr> is not approved by W3C
line 677 column 73 - Warning: <table> proprietary attribute "background"
line 678 column 1179 - Warning: <table> proprietary attribute "height"
line 706 column 27 - Warning: <nobr> is not approved by W3C
line 734 column 27 - Warning: <nobr> is not approved by W3C
line 765 column 27 - Warning: <nobr> is not approved by W3C
line 819 column 27 - Warning: <nobr> is not approved by W3C
line 848 column 27 - Warning: <nobr> is not approved by W3C
line 880 column 27 - Warning: <nobr> is not approved by W3C
line 906 column 27 - Warning: <nobr> is not approved by W3C
line 942 column 27 - Warning: <nobr> is not approved by W3C
line 955 column 47 - Warning: <nobr> is not approved by W3C
line 982 column 27 - Warning: <nobr> is not approved by W3C
line 984 column 1594 - Warning: <td> proprietary attribute "background"
line 984 column 1894 - Warning: <td> proprietary attribute "background"
line 984 column 2147 - Warning: <table> proprietary attribute "height"
line 986 column 2583 - Warning: <td> proprietary attribute "background"
line 1010 column 27 - Warning: <nobr> is not approved by W3C
line 1052 column 27 - Warning: <nobr> is not approved by W3C
line 1054 column 157 - Warning: <table> proprietary attribute "height"
line 1054 column 222 - Warning: <td> proprietary attribute "background"
line 1054 column 318 - Warning: <td> proprietary attribute "background"
line 1054 column 408 - Warning: <table> proprietary attribute "height"
line 1054 column 488 - Warning: <td> proprietary attribute "background"
line 1054 column 1443 - Warning: <td> proprietary attribute "background"
line 1081 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 377 warnings and 4 errors!

The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md