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
This commit is contained in:
hmzh 2022-07-01 10:18:50 +00:00 committed by Marc Baechinger
parent 21638fa378
commit da0a208b89
2 changed files with 636 additions and 108 deletions

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 0: track 0:
total output bytes = 96 total output bytes = 96
sample count = 30 sample count = 96
format 0: format 0:
sampleMimeType = audio/midi sampleMimeType = audio/midi
sample 0: sample 0:
@ -21,111 +21,375 @@ track 0:
flags = 1 flags = 1
data = length 3, hash FFFED75B data = length 3, hash FFFED75B
sample 3: sample 3:
time = 128 time = 100000
flags = 1
data = length 0, hash 1
sample 4:
time = 200000
flags = 1
data = length 0, hash 1
sample 5:
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 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 4: sample 8:
time = 128 time = 500000
flags = 1 flags = 1
data = length 3, hash FFFED751 data = length 3, hash FFFED751
sample 5: sample 9:
time = 256 time = 600000
flags = 1
data = length 0, hash 1
sample 10:
time = 700000
flags = 1
data = length 0, hash 1
sample 11:
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 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 6: sample 14:
time = 256 time = 1000000
flags = 1 flags = 1
data = length 3, hash FFFED839 data = length 3, hash FFFED839
sample 7: sample 15:
time = 384 time = 1100000
flags = 1
data = length 0, hash 1
sample 16:
time = 1200000
flags = 1
data = length 0, hash 1
sample 17:
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 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 8: sample 20:
time = 384 time = 1500000
flags = 1 flags = 1
data = length 3, hash FFFED83E data = length 3, hash FFFED83E
sample 9: sample 21:
time = 512 time = 1600000
flags = 1
data = length 0, hash 1
sample 22:
time = 1700000
flags = 1
data = length 0, hash 1
sample 23:
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 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 10: sample 26:
time = 512 time = 2000000
flags = 1 flags = 1
data = length 3, hash FFFED877 data = length 3, hash FFFED877
sample 11: sample 27:
time = 640 time = 2100000
flags = 1
data = length 0, hash 1
sample 28:
time = 2200000
flags = 1
data = length 0, hash 1
sample 29:
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 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 12: sample 32:
time = 640 time = 2500000
flags = 1 flags = 1
data = length 3, hash FFFED87C data = length 3, hash FFFED87C
sample 13: sample 33:
time = 768 time = 2600000
flags = 1
data = length 0, hash 1
sample 34:
time = 2700000
flags = 1
data = length 0, hash 1
sample 35:
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 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 14: sample 38:
time = 768 time = 3000000
flags = 1 flags = 1
data = length 3, hash FFFED82F data = length 3, hash FFFED82F
sample 15: sample 39:
time = 1024 time = 3100000
flags = 1
data = length 0, hash 1
sample 40:
time = 3200000
flags = 1
data = length 0, hash 1
sample 41:
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 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 16: sample 49:
time = 1024 time = 4000000
flags = 1 flags = 1
data = length 3, hash FFFED800 data = length 3, hash FFFED800
sample 17: sample 50:
time = 1152 time = 4100000
flags = 1
data = length 0, hash 1
sample 51:
time = 4200000
flags = 1
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 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 18: sample 55:
time = 1152 time = 4500000
flags = 1 flags = 1
data = length 3, hash FFFED7FB data = length 3, hash FFFED7FB
sample 19: sample 56:
time = 1280 time = 4600000
flags = 1
data = length 0, hash 1
sample 57:
time = 4700000
flags = 1
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 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 20: sample 61:
time = 1280 time = 5000000
flags = 1 flags = 1
data = length 3, hash FFFED7E1 data = length 3, hash FFFED7E1
sample 21: sample 62:
time = 1344 time = 5100000
flags = 1
data = length 0, hash 1
sample 63:
time = 5200000
flags = 1
data = length 0, hash 1
sample 64:
time = 5250000
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 22: sample 65:
time = 1408 time = 5350000
flags = 1
data = length 0, hash 1
sample 66:
time = 5450000
flags = 1
data = length 0, hash 1
sample 67:
time = 5500000
flags = 1 flags = 1
data = length 3, hash FFFED7D7 data = length 3, hash FFFED7D7
sample 23: sample 68:
time = 1472 time = 5600000
flags = 1
data = length 0, hash 1
sample 69:
time = 5700000
flags = 1
data = length 0, hash 1
sample 70:
time = 5750000
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 24: sample 71:
time = 1536 time = 5850000
flags = 1
data = length 0, hash 1
sample 72:
time = 5950000
flags = 1
data = length 0, hash 1
sample 73:
time = 6000000
flags = 1 flags = 1
data = length 3, hash FFFED79E data = length 3, hash FFFED79E
sample 25: sample 74:
time = 1600 time = 6100000
flags = 1
data = length 0, hash 1
sample 75:
time = 6200000
flags = 1
data = length 0, hash 1
sample 76:
time = 6250000
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 26: sample 77:
time = 1664 time = 6350000
flags = 1
data = length 0, hash 1
sample 78:
time = 6450000
flags = 1
data = length 0, hash 1
sample 79:
time = 6500000
flags = 1 flags = 1
data = length 3, hash FFFED7A3 data = length 3, hash FFFED7A3
sample 27: sample 80:
time = 1728 time = 6600000
flags = 1
data = length 0, hash 1
sample 81:
time = 6700000
flags = 1
data = length 0, hash 1
sample 82:
time = 6750000
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 28: sample 83:
time = 1792 time = 6850000
flags = 1
data = length 0, hash 1
sample 84:
time = 6950000
flags = 1
data = length 0, hash 1
sample 85:
time = 7000000
flags = 1 flags = 1
data = length 3, hash FFFED751 data = length 3, hash FFFED751
sample 29: sample 86:
time = 2048 time = 7100000
flags = 1
data = length 0, hash 1
sample 87:
time = 7200000
flags = 1
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 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
tracksEnded = true tracksEnded = true

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 0: track 0:
total output bytes = 96 total output bytes = 96
sample count = 30 sample count = 96
format 0: format 0:
sampleMimeType = audio/midi sampleMimeType = audio/midi
sample 0: sample 0:
@ -21,111 +21,375 @@ track 0:
flags = 1 flags = 1
data = length 3, hash FFFED75B data = length 3, hash FFFED75B
sample 3: sample 3:
time = 128 time = 100000
flags = 1
data = length 0, hash 1
sample 4:
time = 200000
flags = 1
data = length 0, hash 1
sample 5:
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 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 4: sample 8:
time = 128 time = 500000
flags = 1 flags = 1
data = length 3, hash FFFED751 data = length 3, hash FFFED751
sample 5: sample 9:
time = 256 time = 600000
flags = 1
data = length 0, hash 1
sample 10:
time = 700000
flags = 1
data = length 0, hash 1
sample 11:
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 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
sample 6: sample 14:
time = 256 time = 1000000
flags = 1 flags = 1
data = length 3, hash FFFED839 data = length 3, hash FFFED839
sample 7: sample 15:
time = 384 time = 1100000
flags = 1
data = length 0, hash 1
sample 16:
time = 1200000
flags = 1
data = length 0, hash 1
sample 17:
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 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 8: sample 20:
time = 384 time = 1500000
flags = 1 flags = 1
data = length 3, hash FFFED83E data = length 3, hash FFFED83E
sample 9: sample 21:
time = 512 time = 1600000
flags = 1
data = length 0, hash 1
sample 22:
time = 1700000
flags = 1
data = length 0, hash 1
sample 23:
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 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 10: sample 26:
time = 512 time = 2000000
flags = 1 flags = 1
data = length 3, hash FFFED877 data = length 3, hash FFFED877
sample 11: sample 27:
time = 640 time = 2100000
flags = 1
data = length 0, hash 1
sample 28:
time = 2200000
flags = 1
data = length 0, hash 1
sample 29:
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 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 12: sample 32:
time = 640 time = 2500000
flags = 1 flags = 1
data = length 3, hash FFFED87C data = length 3, hash FFFED87C
sample 13: sample 33:
time = 768 time = 2600000
flags = 1
data = length 0, hash 1
sample 34:
time = 2700000
flags = 1
data = length 0, hash 1
sample 35:
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 flags = 1
data = length 3, hash FFFED84A data = length 3, hash FFFED84A
sample 14: sample 38:
time = 768 time = 3000000
flags = 1 flags = 1
data = length 3, hash FFFED82F data = length 3, hash FFFED82F
sample 15: sample 39:
time = 1024 time = 3100000
flags = 1
data = length 0, hash 1
sample 40:
time = 3200000
flags = 1
data = length 0, hash 1
sample 41:
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 flags = 1
data = length 3, hash FFFED80C data = length 3, hash FFFED80C
sample 16: sample 49:
time = 1024 time = 4000000
flags = 1 flags = 1
data = length 3, hash FFFED800 data = length 3, hash FFFED800
sample 17: sample 50:
time = 1152 time = 4100000
flags = 1
data = length 0, hash 1
sample 51:
time = 4200000
flags = 1
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 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 18: sample 55:
time = 1152 time = 4500000
flags = 1 flags = 1
data = length 3, hash FFFED7FB data = length 3, hash FFFED7FB
sample 19: sample 56:
time = 1280 time = 4600000
flags = 1
data = length 0, hash 1
sample 57:
time = 4700000
flags = 1
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 flags = 1
data = length 3, hash FFFED7CE data = length 3, hash FFFED7CE
sample 20: sample 61:
time = 1280 time = 5000000
flags = 1 flags = 1
data = length 3, hash FFFED7E1 data = length 3, hash FFFED7E1
sample 21: sample 62:
time = 1344 time = 5100000
flags = 1
data = length 0, hash 1
sample 63:
time = 5200000
flags = 1
data = length 0, hash 1
sample 64:
time = 5250000
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 22: sample 65:
time = 1408 time = 5350000
flags = 1
data = length 0, hash 1
sample 66:
time = 5450000
flags = 1
data = length 0, hash 1
sample 67:
time = 5500000
flags = 1 flags = 1
data = length 3, hash FFFED7D7 data = length 3, hash FFFED7D7
sample 23: sample 68:
time = 1472 time = 5600000
flags = 1
data = length 0, hash 1
sample 69:
time = 5700000
flags = 1
data = length 0, hash 1
sample 70:
time = 5750000
flags = 1 flags = 1
data = length 3, hash FFFED7AF data = length 3, hash FFFED7AF
sample 24: sample 71:
time = 1536 time = 5850000
flags = 1
data = length 0, hash 1
sample 72:
time = 5950000
flags = 1
data = length 0, hash 1
sample 73:
time = 6000000
flags = 1 flags = 1
data = length 3, hash FFFED79E data = length 3, hash FFFED79E
sample 25: sample 74:
time = 1600 time = 6100000
flags = 1
data = length 0, hash 1
sample 75:
time = 6200000
flags = 1
data = length 0, hash 1
sample 76:
time = 6250000
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 26: sample 77:
time = 1664 time = 6350000
flags = 1
data = length 0, hash 1
sample 78:
time = 6450000
flags = 1
data = length 0, hash 1
sample 79:
time = 6500000
flags = 1 flags = 1
data = length 3, hash FFFED7A3 data = length 3, hash FFFED7A3
sample 27: sample 80:
time = 1728 time = 6600000
flags = 1
data = length 0, hash 1
sample 81:
time = 6700000
flags = 1
data = length 0, hash 1
sample 82:
time = 6750000
flags = 1 flags = 1
data = length 3, hash FFFED771 data = length 3, hash FFFED771
sample 28: sample 83:
time = 1792 time = 6850000
flags = 1
data = length 0, hash 1
sample 84:
time = 6950000
flags = 1
data = length 0, hash 1
sample 85:
time = 7000000
flags = 1 flags = 1
data = length 3, hash FFFED751 data = length 3, hash FFFED751
sample 29: sample 86:
time = 2048 time = 7100000
flags = 1
data = length 0, hash 1
sample 87:
time = 7200000
flags = 1
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 flags = 1
data = length 3, hash FFFED733 data = length 3, hash FFFED733
tracksEnded = true tracksEnded = true