Fix MIDI event array traversal in TrackChunk.java and TrackEvent.java

- Corrected trackEventBytes traversal in TrackChunk where the array position marker was not incremented properly, leading to duplicate sample output.
- Amended TrackEvent "Meta Event" parsing to account for the length of variable length bytes.
- Fixed a bug with TrackEvent message parsing where message data was parsed incorrectly due to miscalculated length.

PiperOrigin-RevId: 456967968
This commit is contained in:
hmzh 2022-06-24 10:50:27 +01:00 committed by Ian Baker
parent f3893c146d
commit 638c758721
2 changed files with 108 additions and 556 deletions

View File

@ -4,8 +4,8 @@ seekMap:
getPosition(0) = [[timeUs=0, position=0]] getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1 numberOfTracks = 1
track 0: track 0:
total output bytes = 264 total output bytes = 96
sample count = 86 sample count = 30
format 0: format 0:
sampleMimeType = audio/midi sampleMimeType = audio/midi
sample 0: sample 0:
@ -21,335 +21,111 @@ track 0:
flags = 1 flags = 1
data = length 3, hash FFFED75B data = length 3, hash FFFED75B
sample 3: sample 3:
time = 2108 time = 128
flags = 1 flags = 1
data = length 3, hash FFFED448 data = length 3, hash FFFED733
sample 4: sample 4:
time = 2148 time = 128
flags = 1 flags = 1
data = length 3, hash FFFE9730 data = length 3, hash FFFED751
sample 5: sample 5:
time = 2276 time = 256
flags = 1 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 6: sample 6:
time = 4384 time = 256
flags = 1
data = length 3, hash FFFECFEF
sample 7:
time = 4384
flags = 1
data = length 3, hash FFFECF7F
sample 8:
time = 4384
flags = 1
data = length 3, hash FFFED751
sample 9:
time = 6492
flags = 1
data = length 3, hash FFFED312
sample 10:
time = 6522
flags = 1
data = length 3, hash FFFE9730
sample 11:
time = 6650
flags = 1
data = length 3, hash FFFED733
sample 12:
time = 8758
flags = 1
data = length 3, hash FFFECFEF
sample 13:
time = 8758
flags = 1
data = length 3, hash FFFECF7F
sample 14:
time = 8758
flags = 1 flags = 1
data = length 3, hash FFFED839 data = length 3, hash FFFED839
sample 15: sample 7:
time = 10873 time = 384
flags = 1
data = length 3, hash FFFED4E3
sample 16:
time = 10918
flags = 1
data = length 3, hash FFFE9730
sample 17:
time = 11046
flags = 1 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 18: sample 8:
time = 13161 time = 384
flags = 1
data = length 3, hash FFFECFEF
sample 19:
time = 13161
flags = 1
data = length 3, hash FFFECF7F
sample 20:
time = 13161
flags = 1 flags = 1
data = length 3, hash FFFED83E data = length 3, hash FFFED83E
sample 21: sample 9:
time = 15276 time = 512
flags = 1
data = length 3, hash FFFED57E
sample 22:
time = 15326
flags = 1
data = length 3, hash FFFE9730
sample 23:
time = 15454
flags = 1 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 24: sample 10:
time = 17569 time = 512
flags = 1
data = length 3, hash FFFECFEF
sample 25:
time = 17569
flags = 1
data = length 3, hash FFFECF7F
sample 26:
time = 17569
flags = 1 flags = 1
data = length 3, hash FFFED877 data = length 3, hash FFFED877
sample 27: sample 11:
time = 19686 time = 640
flags = 1
data = length 3, hash FFFED4E3
sample 28:
time = 19731
flags = 1
data = length 3, hash FFFE9730
sample 29:
time = 19859
flags = 1 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 30: sample 12:
time = 21976 time = 640
flags = 1
data = length 3, hash FFFECFEF
sample 31:
time = 21976
flags = 1
data = length 3, hash FFFECF7F
sample 32:
time = 21976
flags = 1 flags = 1
data = length 3, hash FFFED87C data = length 3, hash FFFED87C
sample 33: sample 13:
time = 24093 time = 768
flags = 1
data = length 3, hash FFFED57E
sample 34:
time = 24143
flags = 1
data = length 3, hash FFFE9730
sample 35:
time = 24271
flags = 1 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 36: sample 14:
time = 26388 time = 768
flags = 1
data = length 3, hash FFFECFEF
sample 37:
time = 26388
flags = 1
data = length 3, hash FFFECF7F
sample 38:
time = 26388
flags = 1 flags = 1
data = length 3, hash FFFED82F data = length 3, hash FFFED82F
sample 39: sample 15:
time = 28503 time = 1024
flags = 1
data = length 3, hash FFFED3AE
sample 40:
time = 28538
flags = 1
data = length 3, hash FFFE9AF1
sample 41:
time = 28794
flags = 1 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 42: sample 16:
time = 30909 time = 1024
flags = 1
data = length 3, hash FFFECFEF
sample 43:
time = 30909
flags = 1
data = length 3, hash FFFECF7F
sample 44:
time = 30909
flags = 1 flags = 1
data = length 3, hash FFFED800 data = length 3, hash FFFED800
sample 45: sample 17:
time = 33022 time = 1152
flags = 1
data = length 3, hash FFFED57E
sample 46:
time = 33072
flags = 1
data = length 3, hash FFFE9730
sample 47:
time = 33200
flags = 1 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 48: sample 18:
time = 35313 time = 1152
flags = 1
data = length 3, hash FFFECFEF
sample 49:
time = 35313
flags = 1
data = length 3, hash FFFECF7F
sample 50:
time = 35313
flags = 1 flags = 1
data = length 3, hash FFFED7FB data = length 3, hash FFFED7FB
sample 51: sample 19:
time = 37426 time = 1280
flags = 1
data = length 3, hash FFFED4E3
sample 52:
time = 37471
flags = 1
data = length 3, hash FFFE9730
sample 53:
time = 37599
flags = 1 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 54: sample 20:
time = 39712 time = 1280
flags = 1
data = length 3, hash FFFECFEF
sample 55:
time = 39712
flags = 1
data = length 3, hash FFFECF7F
sample 56:
time = 39712
flags = 1 flags = 1
data = length 3, hash FFFED7E1 data = length 3, hash FFFED7E1
sample 57: sample 21:
time = 41824 time = 1344
flags = 1
data = length 3, hash FFFED63D
sample 58:
time = 41874
flags = 1
data = length 3, hash FFFED73F
sample 59:
time = 41938
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 60: sample 22:
time = 44050 time = 1408
flags = 1
data = length 3, hash FFFED02F
sample 61:
time = 44050
flags = 1
data = length 3, hash FFFED73F
sample 62:
time = 44114
flags = 1 flags = 1
data = length 3, hash FFFED7D7 data = length 3, hash FFFED7D7
sample 63: sample 23:
time = 46226 time = 1472
flags = 1
data = length 3, hash FFFED507
sample 64:
time = 46266
flags = 1
data = length 3, hash FFFED73F
sample 65:
time = 46330
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 66: sample 24:
time = 48442 time = 1536
flags = 1
data = length 3, hash FFFED02F
sample 67:
time = 48442
flags = 1
data = length 3, hash FFFED73F
sample 68:
time = 48506
flags = 1 flags = 1
data = length 3, hash FFFED79E data = length 3, hash FFFED79E
sample 69: sample 25:
time = 50616 time = 1600
flags = 1
data = length 3, hash FFFED5A2
sample 70:
time = 50661
flags = 1
data = length 3, hash FFFED73F
sample 71:
time = 50725
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 72: sample 26:
time = 52835 time = 1664
flags = 1
data = length 3, hash FFFED02F
sample 73:
time = 52835
flags = 1
data = length 3, hash FFFED73F
sample 74:
time = 52899
flags = 1 flags = 1
data = length 3, hash FFFED7A3 data = length 3, hash FFFED7A3
sample 75: sample 27:
time = 55009 time = 1728
flags = 1
data = length 3, hash FFFED63D
sample 76:
time = 55059
flags = 1
data = length 3, hash FFFED73F
sample 77:
time = 55123
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 78: sample 28:
time = 57233 time = 1792
flags = 1
data = length 3, hash FFFED02F
sample 79:
time = 57233
flags = 1
data = length 3, hash FFFED73F
sample 80:
time = 57297
flags = 1 flags = 1
data = length 3, hash FFFED751 data = length 3, hash FFFED751
sample 81: sample 29:
time = 59405 time = 2048
flags = 1
data = length 3, hash FFFED313
sample 82:
time = 59435
flags = 1
data = length 3, hash FFFE9AF1
sample 83:
time = 59691
flags = 1 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 84:
time = 61799
flags = 1
data = length 3, hash FFFECFEF
sample 85:
time = 61799
flags = 1
data = length 3, hash FFFECFEE
tracksEnded = true tracksEnded = true

View File

@ -4,8 +4,8 @@ seekMap:
getPosition(0) = [[timeUs=0, position=0]] getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1 numberOfTracks = 1
track 0: track 0:
total output bytes = 264 total output bytes = 96
sample count = 86 sample count = 30
format 0: format 0:
sampleMimeType = audio/midi sampleMimeType = audio/midi
sample 0: sample 0:
@ -21,335 +21,111 @@ track 0:
flags = 1 flags = 1
data = length 3, hash FFFED75B data = length 3, hash FFFED75B
sample 3: sample 3:
time = 2108 time = 128
flags = 1 flags = 1
data = length 3, hash FFFED448 data = length 3, hash FFFED733
sample 4: sample 4:
time = 2148 time = 128
flags = 1 flags = 1
data = length 3, hash FFFE9730 data = length 3, hash FFFED751
sample 5: sample 5:
time = 2276 time = 256
flags = 1 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 6: sample 6:
time = 4384 time = 256
flags = 1
data = length 3, hash FFFECFEF
sample 7:
time = 4384
flags = 1
data = length 3, hash FFFECF7F
sample 8:
time = 4384
flags = 1
data = length 3, hash FFFED751
sample 9:
time = 6492
flags = 1
data = length 3, hash FFFED312
sample 10:
time = 6522
flags = 1
data = length 3, hash FFFE9730
sample 11:
time = 6650
flags = 1
data = length 3, hash FFFED733
sample 12:
time = 8758
flags = 1
data = length 3, hash FFFECFEF
sample 13:
time = 8758
flags = 1
data = length 3, hash FFFECF7F
sample 14:
time = 8758
flags = 1 flags = 1
data = length 3, hash FFFED839 data = length 3, hash FFFED839
sample 15: sample 7:
time = 10873 time = 384
flags = 1
data = length 3, hash FFFED4E3
sample 16:
time = 10918
flags = 1
data = length 3, hash FFFE9730
sample 17:
time = 11046
flags = 1 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 18: sample 8:
time = 13161 time = 384
flags = 1
data = length 3, hash FFFECFEF
sample 19:
time = 13161
flags = 1
data = length 3, hash FFFECF7F
sample 20:
time = 13161
flags = 1 flags = 1
data = length 3, hash FFFED83E data = length 3, hash FFFED83E
sample 21: sample 9:
time = 15276 time = 512
flags = 1
data = length 3, hash FFFED57E
sample 22:
time = 15326
flags = 1
data = length 3, hash FFFE9730
sample 23:
time = 15454
flags = 1 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 24: sample 10:
time = 17569 time = 512
flags = 1
data = length 3, hash FFFECFEF
sample 25:
time = 17569
flags = 1
data = length 3, hash FFFECF7F
sample 26:
time = 17569
flags = 1 flags = 1
data = length 3, hash FFFED877 data = length 3, hash FFFED877
sample 27: sample 11:
time = 19686 time = 640
flags = 1
data = length 3, hash FFFED4E3
sample 28:
time = 19731
flags = 1
data = length 3, hash FFFE9730
sample 29:
time = 19859
flags = 1 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 30: sample 12:
time = 21976 time = 640
flags = 1
data = length 3, hash FFFECFEF
sample 31:
time = 21976
flags = 1
data = length 3, hash FFFECF7F
sample 32:
time = 21976
flags = 1 flags = 1
data = length 3, hash FFFED87C data = length 3, hash FFFED87C
sample 33: sample 13:
time = 24093 time = 768
flags = 1
data = length 3, hash FFFED57E
sample 34:
time = 24143
flags = 1
data = length 3, hash FFFE9730
sample 35:
time = 24271
flags = 1 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 36: sample 14:
time = 26388 time = 768
flags = 1
data = length 3, hash FFFECFEF
sample 37:
time = 26388
flags = 1
data = length 3, hash FFFECF7F
sample 38:
time = 26388
flags = 1 flags = 1
data = length 3, hash FFFED82F data = length 3, hash FFFED82F
sample 39: sample 15:
time = 28503 time = 1024
flags = 1
data = length 3, hash FFFED3AE
sample 40:
time = 28538
flags = 1
data = length 3, hash FFFE9AF1
sample 41:
time = 28794
flags = 1 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 42: sample 16:
time = 30909 time = 1024
flags = 1
data = length 3, hash FFFECFEF
sample 43:
time = 30909
flags = 1
data = length 3, hash FFFECF7F
sample 44:
time = 30909
flags = 1 flags = 1
data = length 3, hash FFFED800 data = length 3, hash FFFED800
sample 45: sample 17:
time = 33022 time = 1152
flags = 1
data = length 3, hash FFFED57E
sample 46:
time = 33072
flags = 1
data = length 3, hash FFFE9730
sample 47:
time = 33200
flags = 1 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 48: sample 18:
time = 35313 time = 1152
flags = 1
data = length 3, hash FFFECFEF
sample 49:
time = 35313
flags = 1
data = length 3, hash FFFECF7F
sample 50:
time = 35313
flags = 1 flags = 1
data = length 3, hash FFFED7FB data = length 3, hash FFFED7FB
sample 51: sample 19:
time = 37426 time = 1280
flags = 1
data = length 3, hash FFFED4E3
sample 52:
time = 37471
flags = 1
data = length 3, hash FFFE9730
sample 53:
time = 37599
flags = 1 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 54: sample 20:
time = 39712 time = 1280
flags = 1
data = length 3, hash FFFECFEF
sample 55:
time = 39712
flags = 1
data = length 3, hash FFFECF7F
sample 56:
time = 39712
flags = 1 flags = 1
data = length 3, hash FFFED7E1 data = length 3, hash FFFED7E1
sample 57: sample 21:
time = 41824 time = 1344
flags = 1
data = length 3, hash FFFED63D
sample 58:
time = 41874
flags = 1
data = length 3, hash FFFED73F
sample 59:
time = 41938
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 60: sample 22:
time = 44050 time = 1408
flags = 1
data = length 3, hash FFFED02F
sample 61:
time = 44050
flags = 1
data = length 3, hash FFFED73F
sample 62:
time = 44114
flags = 1 flags = 1
data = length 3, hash FFFED7D7 data = length 3, hash FFFED7D7
sample 63: sample 23:
time = 46226 time = 1472
flags = 1
data = length 3, hash FFFED507
sample 64:
time = 46266
flags = 1
data = length 3, hash FFFED73F
sample 65:
time = 46330
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 66: sample 24:
time = 48442 time = 1536
flags = 1
data = length 3, hash FFFED02F
sample 67:
time = 48442
flags = 1
data = length 3, hash FFFED73F
sample 68:
time = 48506
flags = 1 flags = 1
data = length 3, hash FFFED79E data = length 3, hash FFFED79E
sample 69: sample 25:
time = 50616 time = 1600
flags = 1
data = length 3, hash FFFED5A2
sample 70:
time = 50661
flags = 1
data = length 3, hash FFFED73F
sample 71:
time = 50725
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 72: sample 26:
time = 52835 time = 1664
flags = 1
data = length 3, hash FFFED02F
sample 73:
time = 52835
flags = 1
data = length 3, hash FFFED73F
sample 74:
time = 52899
flags = 1 flags = 1
data = length 3, hash FFFED7A3 data = length 3, hash FFFED7A3
sample 75: sample 27:
time = 55009 time = 1728
flags = 1
data = length 3, hash FFFED63D
sample 76:
time = 55059
flags = 1
data = length 3, hash FFFED73F
sample 77:
time = 55123
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 78: sample 28:
time = 57233 time = 1792
flags = 1
data = length 3, hash FFFED02F
sample 79:
time = 57233
flags = 1
data = length 3, hash FFFED73F
sample 80:
time = 57297
flags = 1 flags = 1
data = length 3, hash FFFED751 data = length 3, hash FFFED751
sample 81: sample 29:
time = 59405 time = 2048
flags = 1
data = length 3, hash FFFED313
sample 82:
time = 59435
flags = 1
data = length 3, hash FFFE9AF1
sample 83:
time = 59691
flags = 1 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 84:
time = 61799
flags = 1
data = length 3, hash FFFECFEF
sample 85:
time = 61799
flags = 1
data = length 3, hash FFFECFEE
tracksEnded = true tracksEnded = true