Fix MIDI command timestamp calculations and synthesization duration.

- Improve variable naming to include time units for clarity
- Fix existing timestamp calculations to respect time units as well as track tempo (default values for now)
- Ensure the synthesizer produces PCM for the correct amount of time (including gaps between commands).

PiperOrigin-RevId: 458428243
(cherry picked from commit bce59b1ac20725f34362caeebfd337d565790f32)
This commit is contained in:
hmzh 2022-07-01 10:18:50 +00:00 committed by microkatz
parent 25ece32dda
commit d03fb39469
2 changed files with 514 additions and 434 deletions

View File

@ -4,8 +4,8 @@ seekMap:
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
total output bytes = 264
sample count = 86
total output bytes = 96
sample count = 96
format 0:
sampleMimeType = audio/midi
sample 0:
@ -21,335 +21,375 @@ track 0:
flags = 1
data = length 3, hash FFFED75B
sample 3:
time = 2108
time = 100000
flags = 1
data = length 3, hash FFFED448
data = length 0, hash 1
sample 4:
time = 2148
time = 200000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 5:
time = 2276
time = 300000
flags = 1
data = length 0, hash 1
sample 6:
time = 400000
flags = 1
data = length 0, hash 1
sample 7:
time = 500000
flags = 1
data = length 3, hash FFFED733
sample 6:
time = 4384
flags = 1
data = length 3, hash FFFECFEF
sample 7:
time = 4384
flags = 1
data = length 3, hash FFFECF7F
sample 8:
time = 4384
time = 500000
flags = 1
data = length 3, hash FFFED751
sample 9:
time = 6492
time = 600000
flags = 1
data = length 3, hash FFFED312
data = length 0, hash 1
sample 10:
time = 6522
time = 700000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 11:
time = 6650
time = 800000
flags = 1
data = length 0, hash 1
sample 12:
time = 900000
flags = 1
data = length 0, hash 1
sample 13:
time = 1000000
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
time = 1000000
flags = 1
data = length 3, hash FFFED839
sample 15:
time = 10873
time = 1100000
flags = 1
data = length 3, hash FFFED4E3
data = length 0, hash 1
sample 16:
time = 10918
time = 1200000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 17:
time = 11046
time = 1300000
flags = 1
data = length 0, hash 1
sample 18:
time = 1400000
flags = 1
data = length 0, hash 1
sample 19:
time = 1500000
flags = 1
data = length 3, hash FFFED80C
sample 18:
time = 13161
flags = 1
data = length 3, hash FFFECFEF
sample 19:
time = 13161
flags = 1
data = length 3, hash FFFECF7F
sample 20:
time = 13161
time = 1500000
flags = 1
data = length 3, hash FFFED83E
sample 21:
time = 15276
time = 1600000
flags = 1
data = length 3, hash FFFED57E
data = length 0, hash 1
sample 22:
time = 15326
time = 1700000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 23:
time = 15454
time = 1800000
flags = 1
data = length 0, hash 1
sample 24:
time = 1900000
flags = 1
data = length 0, hash 1
sample 25:
time = 2000000
flags = 1
data = length 3, hash FFFED80C
sample 24:
time = 17569
flags = 1
data = length 3, hash FFFECFEF
sample 25:
time = 17569
flags = 1
data = length 3, hash FFFECF7F
sample 26:
time = 17569
time = 2000000
flags = 1
data = length 3, hash FFFED877
sample 27:
time = 19686
time = 2100000
flags = 1
data = length 3, hash FFFED4E3
data = length 0, hash 1
sample 28:
time = 19731
time = 2200000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 29:
time = 19859
time = 2300000
flags = 1
data = length 0, hash 1
sample 30:
time = 2400000
flags = 1
data = length 0, hash 1
sample 31:
time = 2500000
flags = 1
data = length 3, hash FFFED84A
sample 30:
time = 21976
flags = 1
data = length 3, hash FFFECFEF
sample 31:
time = 21976
flags = 1
data = length 3, hash FFFECF7F
sample 32:
time = 21976
time = 2500000
flags = 1
data = length 3, hash FFFED87C
sample 33:
time = 24093
time = 2600000
flags = 1
data = length 3, hash FFFED57E
data = length 0, hash 1
sample 34:
time = 24143
time = 2700000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 35:
time = 24271
time = 2800000
flags = 1
data = length 0, hash 1
sample 36:
time = 2900000
flags = 1
data = length 0, hash 1
sample 37:
time = 3000000
flags = 1
data = length 3, hash FFFED84A
sample 36:
time = 26388
flags = 1
data = length 3, hash FFFECFEF
sample 37:
time = 26388
flags = 1
data = length 3, hash FFFECF7F
sample 38:
time = 26388
time = 3000000
flags = 1
data = length 3, hash FFFED82F
sample 39:
time = 28503
time = 3100000
flags = 1
data = length 3, hash FFFED3AE
data = length 0, hash 1
sample 40:
time = 28538
time = 3200000
flags = 1
data = length 3, hash FFFE9AF1
data = length 0, hash 1
sample 41:
time = 28794
time = 3300000
flags = 1
data = length 0, hash 1
sample 42:
time = 3400000
flags = 1
data = length 0, hash 1
sample 43:
time = 3500000
flags = 1
data = length 0, hash 1
sample 44:
time = 3600000
flags = 1
data = length 0, hash 1
sample 45:
time = 3700000
flags = 1
data = length 0, hash 1
sample 46:
time = 3800000
flags = 1
data = length 0, hash 1
sample 47:
time = 3900000
flags = 1
data = length 0, hash 1
sample 48:
time = 4000000
flags = 1
data = length 3, hash FFFED80C
sample 42:
time = 30909
flags = 1
data = length 3, hash FFFECFEF
sample 43:
time = 30909
flags = 1
data = length 3, hash FFFECF7F
sample 44:
time = 30909
sample 49:
time = 4000000
flags = 1
data = length 3, hash FFFED800
sample 45:
time = 33022
sample 50:
time = 4100000
flags = 1
data = length 3, hash FFFED57E
sample 46:
time = 33072
data = length 0, hash 1
sample 51:
time = 4200000
flags = 1
data = length 3, hash FFFE9730
sample 47:
time = 33200
data = length 0, hash 1
sample 52:
time = 4300000
flags = 1
data = length 0, hash 1
sample 53:
time = 4400000
flags = 1
data = length 0, hash 1
sample 54:
time = 4500000
flags = 1
data = length 3, hash FFFED7CE
sample 48:
time = 35313
flags = 1
data = length 3, hash FFFECFEF
sample 49:
time = 35313
flags = 1
data = length 3, hash FFFECF7F
sample 50:
time = 35313
sample 55:
time = 4500000
flags = 1
data = length 3, hash FFFED7FB
sample 51:
time = 37426
sample 56:
time = 4600000
flags = 1
data = length 3, hash FFFED4E3
sample 52:
time = 37471
data = length 0, hash 1
sample 57:
time = 4700000
flags = 1
data = length 3, hash FFFE9730
sample 53:
time = 37599
data = length 0, hash 1
sample 58:
time = 4800000
flags = 1
data = length 0, hash 1
sample 59:
time = 4900000
flags = 1
data = length 0, hash 1
sample 60:
time = 5000000
flags = 1
data = length 3, hash FFFED7CE
sample 54:
time = 39712
flags = 1
data = length 3, hash FFFECFEF
sample 55:
time = 39712
flags = 1
data = length 3, hash FFFECF7F
sample 56:
time = 39712
sample 61:
time = 5000000
flags = 1
data = length 3, hash FFFED7E1
sample 57:
time = 41824
sample 62:
time = 5100000
flags = 1
data = length 3, hash FFFED63D
sample 58:
time = 41874
data = length 0, hash 1
sample 63:
time = 5200000
flags = 1
data = length 3, hash FFFED73F
sample 59:
time = 41938
data = length 0, hash 1
sample 64:
time = 5250000
flags = 1
data = length 3, hash FFFED7AF
sample 60:
time = 44050
sample 65:
time = 5350000
flags = 1
data = length 3, hash FFFED02F
sample 61:
time = 44050
data = length 0, hash 1
sample 66:
time = 5450000
flags = 1
data = length 3, hash FFFED73F
sample 62:
time = 44114
data = length 0, hash 1
sample 67:
time = 5500000
flags = 1
data = length 3, hash FFFED7D7
sample 63:
time = 46226
sample 68:
time = 5600000
flags = 1
data = length 3, hash FFFED507
sample 64:
time = 46266
data = length 0, hash 1
sample 69:
time = 5700000
flags = 1
data = length 3, hash FFFED73F
sample 65:
time = 46330
data = length 0, hash 1
sample 70:
time = 5750000
flags = 1
data = length 3, hash FFFED7AF
sample 66:
time = 48442
sample 71:
time = 5850000
flags = 1
data = length 3, hash FFFED02F
sample 67:
time = 48442
data = length 0, hash 1
sample 72:
time = 5950000
flags = 1
data = length 3, hash FFFED73F
sample 68:
time = 48506
data = length 0, hash 1
sample 73:
time = 6000000
flags = 1
data = length 3, hash FFFED79E
sample 69:
time = 50616
sample 74:
time = 6100000
flags = 1
data = length 3, hash FFFED5A2
sample 70:
time = 50661
data = length 0, hash 1
sample 75:
time = 6200000
flags = 1
data = length 3, hash FFFED73F
sample 71:
time = 50725
data = length 0, hash 1
sample 76:
time = 6250000
flags = 1
data = length 3, hash FFFED771
sample 72:
time = 52835
sample 77:
time = 6350000
flags = 1
data = length 3, hash FFFED02F
sample 73:
time = 52835
data = length 0, hash 1
sample 78:
time = 6450000
flags = 1
data = length 3, hash FFFED73F
sample 74:
time = 52899
data = length 0, hash 1
sample 79:
time = 6500000
flags = 1
data = length 3, hash FFFED7A3
sample 75:
time = 55009
sample 80:
time = 6600000
flags = 1
data = length 3, hash FFFED63D
sample 76:
time = 55059
data = length 0, hash 1
sample 81:
time = 6700000
flags = 1
data = length 3, hash FFFED73F
sample 77:
time = 55123
data = length 0, hash 1
sample 82:
time = 6750000
flags = 1
data = length 3, hash FFFED771
sample 78:
time = 57233
sample 83:
time = 6850000
flags = 1
data = length 3, hash FFFED02F
sample 79:
time = 57233
data = length 0, hash 1
sample 84:
time = 6950000
flags = 1
data = length 3, hash FFFED73F
sample 80:
time = 57297
data = length 0, hash 1
sample 85:
time = 7000000
flags = 1
data = length 3, hash FFFED751
sample 81:
time = 59405
sample 86:
time = 7100000
flags = 1
data = length 3, hash FFFED313
sample 82:
time = 59435
data = length 0, hash 1
sample 87:
time = 7200000
flags = 1
data = length 3, hash FFFE9AF1
sample 83:
time = 59691
data = length 0, hash 1
sample 88:
time = 7300000
flags = 1
data = length 0, hash 1
sample 89:
time = 7400000
flags = 1
data = length 0, hash 1
sample 90:
time = 7500000
flags = 1
data = length 0, hash 1
sample 91:
time = 7600000
flags = 1
data = length 0, hash 1
sample 92:
time = 7700000
flags = 1
data = length 0, hash 1
sample 93:
time = 7800000
flags = 1
data = length 0, hash 1
sample 94:
time = 7900000
flags = 1
data = length 0, hash 1
sample 95:
time = 8000000
flags = 1
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

View File

@ -4,8 +4,8 @@ seekMap:
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
total output bytes = 264
sample count = 86
total output bytes = 96
sample count = 96
format 0:
sampleMimeType = audio/midi
sample 0:
@ -21,335 +21,375 @@ track 0:
flags = 1
data = length 3, hash FFFED75B
sample 3:
time = 2108
time = 100000
flags = 1
data = length 3, hash FFFED448
data = length 0, hash 1
sample 4:
time = 2148
time = 200000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 5:
time = 2276
time = 300000
flags = 1
data = length 0, hash 1
sample 6:
time = 400000
flags = 1
data = length 0, hash 1
sample 7:
time = 500000
flags = 1
data = length 3, hash FFFED733
sample 6:
time = 4384
flags = 1
data = length 3, hash FFFECFEF
sample 7:
time = 4384
flags = 1
data = length 3, hash FFFECF7F
sample 8:
time = 4384
time = 500000
flags = 1
data = length 3, hash FFFED751
sample 9:
time = 6492
time = 600000
flags = 1
data = length 3, hash FFFED312
data = length 0, hash 1
sample 10:
time = 6522
time = 700000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 11:
time = 6650
time = 800000
flags = 1
data = length 0, hash 1
sample 12:
time = 900000
flags = 1
data = length 0, hash 1
sample 13:
time = 1000000
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
time = 1000000
flags = 1
data = length 3, hash FFFED839
sample 15:
time = 10873
time = 1100000
flags = 1
data = length 3, hash FFFED4E3
data = length 0, hash 1
sample 16:
time = 10918
time = 1200000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 17:
time = 11046
time = 1300000
flags = 1
data = length 0, hash 1
sample 18:
time = 1400000
flags = 1
data = length 0, hash 1
sample 19:
time = 1500000
flags = 1
data = length 3, hash FFFED80C
sample 18:
time = 13161
flags = 1
data = length 3, hash FFFECFEF
sample 19:
time = 13161
flags = 1
data = length 3, hash FFFECF7F
sample 20:
time = 13161
time = 1500000
flags = 1
data = length 3, hash FFFED83E
sample 21:
time = 15276
time = 1600000
flags = 1
data = length 3, hash FFFED57E
data = length 0, hash 1
sample 22:
time = 15326
time = 1700000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 23:
time = 15454
time = 1800000
flags = 1
data = length 0, hash 1
sample 24:
time = 1900000
flags = 1
data = length 0, hash 1
sample 25:
time = 2000000
flags = 1
data = length 3, hash FFFED80C
sample 24:
time = 17569
flags = 1
data = length 3, hash FFFECFEF
sample 25:
time = 17569
flags = 1
data = length 3, hash FFFECF7F
sample 26:
time = 17569
time = 2000000
flags = 1
data = length 3, hash FFFED877
sample 27:
time = 19686
time = 2100000
flags = 1
data = length 3, hash FFFED4E3
data = length 0, hash 1
sample 28:
time = 19731
time = 2200000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 29:
time = 19859
time = 2300000
flags = 1
data = length 0, hash 1
sample 30:
time = 2400000
flags = 1
data = length 0, hash 1
sample 31:
time = 2500000
flags = 1
data = length 3, hash FFFED84A
sample 30:
time = 21976
flags = 1
data = length 3, hash FFFECFEF
sample 31:
time = 21976
flags = 1
data = length 3, hash FFFECF7F
sample 32:
time = 21976
time = 2500000
flags = 1
data = length 3, hash FFFED87C
sample 33:
time = 24093
time = 2600000
flags = 1
data = length 3, hash FFFED57E
data = length 0, hash 1
sample 34:
time = 24143
time = 2700000
flags = 1
data = length 3, hash FFFE9730
data = length 0, hash 1
sample 35:
time = 24271
time = 2800000
flags = 1
data = length 0, hash 1
sample 36:
time = 2900000
flags = 1
data = length 0, hash 1
sample 37:
time = 3000000
flags = 1
data = length 3, hash FFFED84A
sample 36:
time = 26388
flags = 1
data = length 3, hash FFFECFEF
sample 37:
time = 26388
flags = 1
data = length 3, hash FFFECF7F
sample 38:
time = 26388
time = 3000000
flags = 1
data = length 3, hash FFFED82F
sample 39:
time = 28503
time = 3100000
flags = 1
data = length 3, hash FFFED3AE
data = length 0, hash 1
sample 40:
time = 28538
time = 3200000
flags = 1
data = length 3, hash FFFE9AF1
data = length 0, hash 1
sample 41:
time = 28794
time = 3300000
flags = 1
data = length 0, hash 1
sample 42:
time = 3400000
flags = 1
data = length 0, hash 1
sample 43:
time = 3500000
flags = 1
data = length 0, hash 1
sample 44:
time = 3600000
flags = 1
data = length 0, hash 1
sample 45:
time = 3700000
flags = 1
data = length 0, hash 1
sample 46:
time = 3800000
flags = 1
data = length 0, hash 1
sample 47:
time = 3900000
flags = 1
data = length 0, hash 1
sample 48:
time = 4000000
flags = 1
data = length 3, hash FFFED80C
sample 42:
time = 30909
flags = 1
data = length 3, hash FFFECFEF
sample 43:
time = 30909
flags = 1
data = length 3, hash FFFECF7F
sample 44:
time = 30909
sample 49:
time = 4000000
flags = 1
data = length 3, hash FFFED800
sample 45:
time = 33022
sample 50:
time = 4100000
flags = 1
data = length 3, hash FFFED57E
sample 46:
time = 33072
data = length 0, hash 1
sample 51:
time = 4200000
flags = 1
data = length 3, hash FFFE9730
sample 47:
time = 33200
data = length 0, hash 1
sample 52:
time = 4300000
flags = 1
data = length 0, hash 1
sample 53:
time = 4400000
flags = 1
data = length 0, hash 1
sample 54:
time = 4500000
flags = 1
data = length 3, hash FFFED7CE
sample 48:
time = 35313
flags = 1
data = length 3, hash FFFECFEF
sample 49:
time = 35313
flags = 1
data = length 3, hash FFFECF7F
sample 50:
time = 35313
sample 55:
time = 4500000
flags = 1
data = length 3, hash FFFED7FB
sample 51:
time = 37426
sample 56:
time = 4600000
flags = 1
data = length 3, hash FFFED4E3
sample 52:
time = 37471
data = length 0, hash 1
sample 57:
time = 4700000
flags = 1
data = length 3, hash FFFE9730
sample 53:
time = 37599
data = length 0, hash 1
sample 58:
time = 4800000
flags = 1
data = length 0, hash 1
sample 59:
time = 4900000
flags = 1
data = length 0, hash 1
sample 60:
time = 5000000
flags = 1
data = length 3, hash FFFED7CE
sample 54:
time = 39712
flags = 1
data = length 3, hash FFFECFEF
sample 55:
time = 39712
flags = 1
data = length 3, hash FFFECF7F
sample 56:
time = 39712
sample 61:
time = 5000000
flags = 1
data = length 3, hash FFFED7E1
sample 57:
time = 41824
sample 62:
time = 5100000
flags = 1
data = length 3, hash FFFED63D
sample 58:
time = 41874
data = length 0, hash 1
sample 63:
time = 5200000
flags = 1
data = length 3, hash FFFED73F
sample 59:
time = 41938
data = length 0, hash 1
sample 64:
time = 5250000
flags = 1
data = length 3, hash FFFED7AF
sample 60:
time = 44050
sample 65:
time = 5350000
flags = 1
data = length 3, hash FFFED02F
sample 61:
time = 44050
data = length 0, hash 1
sample 66:
time = 5450000
flags = 1
data = length 3, hash FFFED73F
sample 62:
time = 44114
data = length 0, hash 1
sample 67:
time = 5500000
flags = 1
data = length 3, hash FFFED7D7
sample 63:
time = 46226
sample 68:
time = 5600000
flags = 1
data = length 3, hash FFFED507
sample 64:
time = 46266
data = length 0, hash 1
sample 69:
time = 5700000
flags = 1
data = length 3, hash FFFED73F
sample 65:
time = 46330
data = length 0, hash 1
sample 70:
time = 5750000
flags = 1
data = length 3, hash FFFED7AF
sample 66:
time = 48442
sample 71:
time = 5850000
flags = 1
data = length 3, hash FFFED02F
sample 67:
time = 48442
data = length 0, hash 1
sample 72:
time = 5950000
flags = 1
data = length 3, hash FFFED73F
sample 68:
time = 48506
data = length 0, hash 1
sample 73:
time = 6000000
flags = 1
data = length 3, hash FFFED79E
sample 69:
time = 50616
sample 74:
time = 6100000
flags = 1
data = length 3, hash FFFED5A2
sample 70:
time = 50661
data = length 0, hash 1
sample 75:
time = 6200000
flags = 1
data = length 3, hash FFFED73F
sample 71:
time = 50725
data = length 0, hash 1
sample 76:
time = 6250000
flags = 1
data = length 3, hash FFFED771
sample 72:
time = 52835
sample 77:
time = 6350000
flags = 1
data = length 3, hash FFFED02F
sample 73:
time = 52835
data = length 0, hash 1
sample 78:
time = 6450000
flags = 1
data = length 3, hash FFFED73F
sample 74:
time = 52899
data = length 0, hash 1
sample 79:
time = 6500000
flags = 1
data = length 3, hash FFFED7A3
sample 75:
time = 55009
sample 80:
time = 6600000
flags = 1
data = length 3, hash FFFED63D
sample 76:
time = 55059
data = length 0, hash 1
sample 81:
time = 6700000
flags = 1
data = length 3, hash FFFED73F
sample 77:
time = 55123
data = length 0, hash 1
sample 82:
time = 6750000
flags = 1
data = length 3, hash FFFED771
sample 78:
time = 57233
sample 83:
time = 6850000
flags = 1
data = length 3, hash FFFED02F
sample 79:
time = 57233
data = length 0, hash 1
sample 84:
time = 6950000
flags = 1
data = length 3, hash FFFED73F
sample 80:
time = 57297
data = length 0, hash 1
sample 85:
time = 7000000
flags = 1
data = length 3, hash FFFED751
sample 81:
time = 59405
sample 86:
time = 7100000
flags = 1
data = length 3, hash FFFED313
sample 82:
time = 59435
data = length 0, hash 1
sample 87:
time = 7200000
flags = 1
data = length 3, hash FFFE9AF1
sample 83:
time = 59691
data = length 0, hash 1
sample 88:
time = 7300000
flags = 1
data = length 0, hash 1
sample 89:
time = 7400000
flags = 1
data = length 0, hash 1
sample 90:
time = 7500000
flags = 1
data = length 0, hash 1
sample 91:
time = 7600000
flags = 1
data = length 0, hash 1
sample 92:
time = 7700000
flags = 1
data = length 0, hash 1
sample 93:
time = 7800000
flags = 1
data = length 0, hash 1
sample 94:
time = 7900000
flags = 1
data = length 0, hash 1
sample 95:
time = 8000000
flags = 1
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