496 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			496 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Factor
		
	
	
USING: byte-arrays.hex io.encodings.binary io.streams.byte-array
 | 
						|
midi.private sequences tools.test ;
 | 
						|
IN: midi
 | 
						|
 | 
						|
! variable-width numbers
 | 
						|
{
 | 
						|
    {
 | 
						|
        0x00
 | 
						|
        0x40
 | 
						|
        0x7f
 | 
						|
        0x80
 | 
						|
        0x2000
 | 
						|
        0x3fff
 | 
						|
        0x4000
 | 
						|
        0x100000
 | 
						|
        0x1fffff
 | 
						|
        0x200000
 | 
						|
        0x08000000
 | 
						|
        0x0fffffff
 | 
						|
    }
 | 
						|
} [
 | 
						|
    {
 | 
						|
        HEX{ 00 }
 | 
						|
        HEX{ 40 }
 | 
						|
        HEX{ 7f }
 | 
						|
        HEX{ 81 00 }
 | 
						|
        HEX{ C0 00 }
 | 
						|
        HEX{ ff 7f }
 | 
						|
        HEX{ 81 80 00 }
 | 
						|
        HEX{ C0 80 00 }
 | 
						|
        HEX{ ff ff 7f }
 | 
						|
        HEX{ 81 80 80 00 }
 | 
						|
        HEX{ C0 80 80 00 }
 | 
						|
        HEX{ ff ff ff 7f }
 | 
						|
    } [ binary [ read-number ] with-byte-reader ] map
 | 
						|
] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        HEX{ 00 }
 | 
						|
        HEX{ 40 }
 | 
						|
        HEX{ 7f }
 | 
						|
        HEX{ 81 00 }
 | 
						|
        HEX{ C0 00 }
 | 
						|
        HEX{ ff 7f }
 | 
						|
        HEX{ 81 80 00 }
 | 
						|
        HEX{ C0 80 00 }
 | 
						|
        HEX{ ff ff 7f }
 | 
						|
        HEX{ 81 80 80 00 }
 | 
						|
        HEX{ C0 80 80 00 }
 | 
						|
        HEX{ ff ff ff 7f }
 | 
						|
    }
 | 
						|
} [
 | 
						|
    {
 | 
						|
        0x00
 | 
						|
        0x40
 | 
						|
        0x7f
 | 
						|
        0x80
 | 
						|
        0x2000
 | 
						|
        0x3fff
 | 
						|
        0x4000
 | 
						|
        0x100000
 | 
						|
        0x1fffff
 | 
						|
        0x200000
 | 
						|
        0x08000000
 | 
						|
        0x0fffffff
 | 
						|
    } [ binary [ write-number ] with-byte-writer ] map
 | 
						|
] unit-test
 | 
						|
 | 
						|
! format: 0
 | 
						|
{
 | 
						|
    T{ midi
 | 
						|
        { header
 | 
						|
            T{ midi-header
 | 
						|
                { format 0 }
 | 
						|
                { #chunks 1 }
 | 
						|
                { division 96 }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        { chunks
 | 
						|
            {
 | 
						|
                T{ midi-track
 | 
						|
                    { events
 | 
						|
                        {
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "time-signature" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "clocks-per-tick" 24 }
 | 
						|
                                        { "denominator" 4 }
 | 
						|
                                        { "numerator" 4 }
 | 
						|
                                        {
 | 
						|
                                            "notated-32nd-notes-per-beat"
 | 
						|
                                            8
 | 
						|
                                        }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "set-tempo" }
 | 
						|
                                { value 500000 }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "program-change" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "program" 5 }
 | 
						|
                                        { "channel" 0 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "program-change" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "program" 46 }
 | 
						|
                                        { "channel" 1 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "program-change" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "program" 70 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 48 }
 | 
						|
                                        { "velocity" 96 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 60 }
 | 
						|
                                        { "velocity" 96 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 96 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 67 }
 | 
						|
                                        { "velocity" 64 }
 | 
						|
                                        { "channel" 1 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 96 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 76 }
 | 
						|
                                        { "velocity" 32 }
 | 
						|
                                        { "channel" 0 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 192 }
 | 
						|
                                { name "note-off" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 48 }
 | 
						|
                                        { "velocity" 64 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-off" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 60 }
 | 
						|
                                        { "velocity" 64 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-off" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 67 }
 | 
						|
                                        { "velocity" 64 }
 | 
						|
                                        { "channel" 1 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-off" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 76 }
 | 
						|
                                        { "velocity" 64 }
 | 
						|
                                        { "channel" 0 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "end-of-track" }
 | 
						|
                                { value t }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} [
 | 
						|
    HEX{
 | 
						|
        4D 54 68 64
 | 
						|
            00 00 00 06
 | 
						|
            00 00
 | 
						|
            00 01
 | 
						|
            00 60
 | 
						|
 | 
						|
        4D 54 72 6B
 | 
						|
            00 00 00 3B
 | 
						|
            00 FF 58 04 04 02 18 08
 | 
						|
            00 FF 51 03 07 A1 20
 | 
						|
            00 C0 05
 | 
						|
            00 C1 2E
 | 
						|
            00 C2 46
 | 
						|
            00 92 30 60
 | 
						|
            00 3C 60
 | 
						|
            60 91 43 40
 | 
						|
            60 90 4C 20
 | 
						|
            81 40 82 30 40
 | 
						|
            00 3C 40
 | 
						|
            00 81 43 40
 | 
						|
            00 80 4C 40
 | 
						|
            00 FF 2F 00
 | 
						|
    } >midi
 | 
						|
] unit-test
 | 
						|
 | 
						|
! format: 1
 | 
						|
{
 | 
						|
    T{ midi
 | 
						|
        { header
 | 
						|
            T{ midi-header
 | 
						|
                { format 1 }
 | 
						|
                { #chunks 4 }
 | 
						|
                { division 96 }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        { chunks
 | 
						|
            {
 | 
						|
                T{ midi-track
 | 
						|
                    { events
 | 
						|
                        {
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "time-signature" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "clocks-per-tick" 24 }
 | 
						|
                                        { "denominator" 4 }
 | 
						|
                                        { "numerator" 4 }
 | 
						|
                                        {
 | 
						|
                                            "notated-32nd-notes-per-beat"
 | 
						|
                                            8
 | 
						|
                                        }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "set-tempo" }
 | 
						|
                                { value 500000 }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 384 }
 | 
						|
                                { name "end-of-track" }
 | 
						|
                                { value t }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                T{ midi-track
 | 
						|
                    { events
 | 
						|
                        {
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "program-change" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "program" 5 }
 | 
						|
                                        { "channel" 0 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 192 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 76 }
 | 
						|
                                        { "velocity" 32 }
 | 
						|
                                        { "channel" 0 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 192 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 76 }
 | 
						|
                                        { "velocity" 0 }
 | 
						|
                                        { "channel" 0 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "end-of-track" }
 | 
						|
                                { value t }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                T{ midi-track
 | 
						|
                    { events
 | 
						|
                        {
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "program-change" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "program" 46 }
 | 
						|
                                        { "channel" 1 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 96 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 67 }
 | 
						|
                                        { "velocity" 64 }
 | 
						|
                                        { "channel" 1 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 288 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 67 }
 | 
						|
                                        { "velocity" 0 }
 | 
						|
                                        { "channel" 1 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "end-of-track" }
 | 
						|
                                { value t }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                T{ midi-track
 | 
						|
                    { events
 | 
						|
                        {
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "program-change" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "program" 70 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 48 }
 | 
						|
                                        { "velocity" 96 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 60 }
 | 
						|
                                        { "velocity" 96 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 384 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 48 }
 | 
						|
                                        { "velocity" 0 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ midi-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "note-on" }
 | 
						|
                                { value
 | 
						|
                                    H{
 | 
						|
                                        { "note" 60 }
 | 
						|
                                        { "velocity" 0 }
 | 
						|
                                        { "channel" 2 }
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            T{ meta-event
 | 
						|
                                { delta 0 }
 | 
						|
                                { name "end-of-track" }
 | 
						|
                                { value t }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} [
 | 
						|
    HEX{
 | 
						|
        4D 54 68 64
 | 
						|
            00 00 00 06
 | 
						|
            00 01
 | 
						|
            00 04
 | 
						|
            00 60
 | 
						|
 | 
						|
        4D 54 72 6B
 | 
						|
            00 00 00 14
 | 
						|
            00 FF 58 04 04 02 18 08
 | 
						|
            00 FF 51 03 07 A1 20
 | 
						|
            83 00 FF 2F 00
 | 
						|
 | 
						|
        4D 54 72 6B
 | 
						|
            00 00 00 10
 | 
						|
            00 C0 05
 | 
						|
            81 40 90 4C 20
 | 
						|
            81 40 4C 00
 | 
						|
            00 FF 2F 00
 | 
						|
 | 
						|
        4D 54 72 6B
 | 
						|
            00 00 00 0F
 | 
						|
            00 C1 2E
 | 
						|
            60 91 43 40
 | 
						|
            82 20 43 00
 | 
						|
            00 FF 2F 00
 | 
						|
 | 
						|
        4D 54 72 6B
 | 
						|
            00 00 00 15
 | 
						|
            00 C2 46
 | 
						|
            00 92 30 60
 | 
						|
            00 3C 60
 | 
						|
            83 00 30 00
 | 
						|
            00 3C 00
 | 
						|
            00 FF 2F 00
 | 
						|
    } >midi
 | 
						|
] unit-test
 |