From 84c43f855fd60f96b5f415dc316c1333cfdec704 Mon Sep 17 00:00:00 2001 From: hmzh Date: Wed, 15 Jun 2022 12:42:05 +0000 Subject: [PATCH] Implement seeking to the start of a MIDI file - Fixed MidiExtractor state issues which caused seeking to behave unexpectedly. Ensures the extractor is now always in the file loading state after returning RESULT_END_OF_INPUT. - Fixed an infinite loop in MidiExtractor caused by the file data array having an initial size of 0. The extractor attempted to increase the capacity of the array by using this size of 0 in it's calculations. PiperOrigin-RevId: 455107511 --- .../extractordumps/midi/Twinkle.mid.0.dump | 355 ++++++++++++++++++ .../midi/Twinkle.mid.unknown_length.dump | 355 ++++++++++++++++++ .../src/test/assets/media/midi/Twinkle.mid | Bin 0 -> 162 bytes 3 files changed, 710 insertions(+) create mode 100644 libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/midi/Twinkle.mid diff --git a/libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.0.dump b/libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.0.dump new file mode 100644 index 0000000000..9bbb94438c --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.0.dump @@ -0,0 +1,355 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 0: + total output bytes = 264 + sample count = 86 + format 0: + sampleMimeType = audio/midi + sample 0: + time = 0 + flags = 1 + data = length 7, hash C95FA520 + sample 1: + time = 0 + flags = 1 + data = length 5, hash 1CF3DA7 + sample 2: + time = 0 + flags = 1 + data = length 3, hash FFFED75B + sample 3: + time = 2108 + flags = 1 + data = length 3, hash FFFED448 + sample 4: + time = 2148 + flags = 1 + data = length 3, hash FFFE9730 + sample 5: + time = 2276 + 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 + 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 + data = length 3, hash FFFED839 + sample 15: + time = 10873 + flags = 1 + data = length 3, hash FFFED4E3 + sample 16: + time = 10918 + flags = 1 + data = length 3, hash FFFE9730 + sample 17: + time = 11046 + 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 + flags = 1 + data = length 3, hash FFFED83E + sample 21: + time = 15276 + flags = 1 + data = length 3, hash FFFED57E + sample 22: + time = 15326 + flags = 1 + data = length 3, hash FFFE9730 + sample 23: + time = 15454 + 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 + flags = 1 + data = length 3, hash FFFED877 + sample 27: + time = 19686 + flags = 1 + data = length 3, hash FFFED4E3 + sample 28: + time = 19731 + flags = 1 + data = length 3, hash FFFE9730 + sample 29: + time = 19859 + 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 + flags = 1 + data = length 3, hash FFFED87C + sample 33: + time = 24093 + flags = 1 + data = length 3, hash FFFED57E + sample 34: + time = 24143 + flags = 1 + data = length 3, hash FFFE9730 + sample 35: + time = 24271 + 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 + flags = 1 + data = length 3, hash FFFED82F + sample 39: + time = 28503 + flags = 1 + data = length 3, hash FFFED3AE + sample 40: + time = 28538 + flags = 1 + data = length 3, hash FFFE9AF1 + sample 41: + time = 28794 + 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 + flags = 1 + data = length 3, hash FFFED800 + sample 45: + time = 33022 + flags = 1 + data = length 3, hash FFFED57E + sample 46: + time = 33072 + flags = 1 + data = length 3, hash FFFE9730 + sample 47: + time = 33200 + 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 + flags = 1 + data = length 3, hash FFFED7FB + sample 51: + time = 37426 + flags = 1 + data = length 3, hash FFFED4E3 + sample 52: + time = 37471 + flags = 1 + data = length 3, hash FFFE9730 + sample 53: + time = 37599 + 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 + flags = 1 + data = length 3, hash FFFED7E1 + sample 57: + time = 41824 + flags = 1 + data = length 3, hash FFFED63D + sample 58: + time = 41874 + flags = 1 + data = length 3, hash FFFED73F + sample 59: + time = 41938 + flags = 1 + data = length 3, hash FFFED7AF + sample 60: + time = 44050 + flags = 1 + data = length 3, hash FFFED02F + sample 61: + time = 44050 + flags = 1 + data = length 3, hash FFFED73F + sample 62: + time = 44114 + flags = 1 + data = length 3, hash FFFED7D7 + sample 63: + time = 46226 + flags = 1 + data = length 3, hash FFFED507 + sample 64: + time = 46266 + flags = 1 + data = length 3, hash FFFED73F + sample 65: + time = 46330 + flags = 1 + data = length 3, hash FFFED7AF + sample 66: + time = 48442 + flags = 1 + data = length 3, hash FFFED02F + sample 67: + time = 48442 + flags = 1 + data = length 3, hash FFFED73F + sample 68: + time = 48506 + flags = 1 + data = length 3, hash FFFED79E + sample 69: + time = 50616 + flags = 1 + data = length 3, hash FFFED5A2 + sample 70: + time = 50661 + flags = 1 + data = length 3, hash FFFED73F + sample 71: + time = 50725 + flags = 1 + data = length 3, hash FFFED771 + sample 72: + time = 52835 + flags = 1 + data = length 3, hash FFFED02F + sample 73: + time = 52835 + flags = 1 + data = length 3, hash FFFED73F + sample 74: + time = 52899 + flags = 1 + data = length 3, hash FFFED7A3 + sample 75: + time = 55009 + flags = 1 + data = length 3, hash FFFED63D + sample 76: + time = 55059 + flags = 1 + data = length 3, hash FFFED73F + sample 77: + time = 55123 + flags = 1 + data = length 3, hash FFFED771 + sample 78: + time = 57233 + flags = 1 + data = length 3, hash FFFED02F + sample 79: + time = 57233 + flags = 1 + data = length 3, hash FFFED73F + sample 80: + time = 57297 + flags = 1 + data = length 3, hash FFFED751 + sample 81: + time = 59405 + flags = 1 + data = length 3, hash FFFED313 + sample 82: + time = 59435 + flags = 1 + data = length 3, hash FFFE9AF1 + sample 83: + time = 59691 + 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 diff --git a/libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.unknown_length.dump new file mode 100644 index 0000000000..9bbb94438c --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/midi/Twinkle.mid.unknown_length.dump @@ -0,0 +1,355 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 0: + total output bytes = 264 + sample count = 86 + format 0: + sampleMimeType = audio/midi + sample 0: + time = 0 + flags = 1 + data = length 7, hash C95FA520 + sample 1: + time = 0 + flags = 1 + data = length 5, hash 1CF3DA7 + sample 2: + time = 0 + flags = 1 + data = length 3, hash FFFED75B + sample 3: + time = 2108 + flags = 1 + data = length 3, hash FFFED448 + sample 4: + time = 2148 + flags = 1 + data = length 3, hash FFFE9730 + sample 5: + time = 2276 + 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 + 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 + data = length 3, hash FFFED839 + sample 15: + time = 10873 + flags = 1 + data = length 3, hash FFFED4E3 + sample 16: + time = 10918 + flags = 1 + data = length 3, hash FFFE9730 + sample 17: + time = 11046 + 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 + flags = 1 + data = length 3, hash FFFED83E + sample 21: + time = 15276 + flags = 1 + data = length 3, hash FFFED57E + sample 22: + time = 15326 + flags = 1 + data = length 3, hash FFFE9730 + sample 23: + time = 15454 + 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 + flags = 1 + data = length 3, hash FFFED877 + sample 27: + time = 19686 + flags = 1 + data = length 3, hash FFFED4E3 + sample 28: + time = 19731 + flags = 1 + data = length 3, hash FFFE9730 + sample 29: + time = 19859 + 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 + flags = 1 + data = length 3, hash FFFED87C + sample 33: + time = 24093 + flags = 1 + data = length 3, hash FFFED57E + sample 34: + time = 24143 + flags = 1 + data = length 3, hash FFFE9730 + sample 35: + time = 24271 + 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 + flags = 1 + data = length 3, hash FFFED82F + sample 39: + time = 28503 + flags = 1 + data = length 3, hash FFFED3AE + sample 40: + time = 28538 + flags = 1 + data = length 3, hash FFFE9AF1 + sample 41: + time = 28794 + 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 + flags = 1 + data = length 3, hash FFFED800 + sample 45: + time = 33022 + flags = 1 + data = length 3, hash FFFED57E + sample 46: + time = 33072 + flags = 1 + data = length 3, hash FFFE9730 + sample 47: + time = 33200 + 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 + flags = 1 + data = length 3, hash FFFED7FB + sample 51: + time = 37426 + flags = 1 + data = length 3, hash FFFED4E3 + sample 52: + time = 37471 + flags = 1 + data = length 3, hash FFFE9730 + sample 53: + time = 37599 + 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 + flags = 1 + data = length 3, hash FFFED7E1 + sample 57: + time = 41824 + flags = 1 + data = length 3, hash FFFED63D + sample 58: + time = 41874 + flags = 1 + data = length 3, hash FFFED73F + sample 59: + time = 41938 + flags = 1 + data = length 3, hash FFFED7AF + sample 60: + time = 44050 + flags = 1 + data = length 3, hash FFFED02F + sample 61: + time = 44050 + flags = 1 + data = length 3, hash FFFED73F + sample 62: + time = 44114 + flags = 1 + data = length 3, hash FFFED7D7 + sample 63: + time = 46226 + flags = 1 + data = length 3, hash FFFED507 + sample 64: + time = 46266 + flags = 1 + data = length 3, hash FFFED73F + sample 65: + time = 46330 + flags = 1 + data = length 3, hash FFFED7AF + sample 66: + time = 48442 + flags = 1 + data = length 3, hash FFFED02F + sample 67: + time = 48442 + flags = 1 + data = length 3, hash FFFED73F + sample 68: + time = 48506 + flags = 1 + data = length 3, hash FFFED79E + sample 69: + time = 50616 + flags = 1 + data = length 3, hash FFFED5A2 + sample 70: + time = 50661 + flags = 1 + data = length 3, hash FFFED73F + sample 71: + time = 50725 + flags = 1 + data = length 3, hash FFFED771 + sample 72: + time = 52835 + flags = 1 + data = length 3, hash FFFED02F + sample 73: + time = 52835 + flags = 1 + data = length 3, hash FFFED73F + sample 74: + time = 52899 + flags = 1 + data = length 3, hash FFFED7A3 + sample 75: + time = 55009 + flags = 1 + data = length 3, hash FFFED63D + sample 76: + time = 55059 + flags = 1 + data = length 3, hash FFFED73F + sample 77: + time = 55123 + flags = 1 + data = length 3, hash FFFED771 + sample 78: + time = 57233 + flags = 1 + data = length 3, hash FFFED02F + sample 79: + time = 57233 + flags = 1 + data = length 3, hash FFFED73F + sample 80: + time = 57297 + flags = 1 + data = length 3, hash FFFED751 + sample 81: + time = 59405 + flags = 1 + data = length 3, hash FFFED313 + sample 82: + time = 59435 + flags = 1 + data = length 3, hash FFFE9AF1 + sample 83: + time = 59691 + 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 diff --git a/libraries/test_data/src/test/assets/media/midi/Twinkle.mid b/libraries/test_data/src/test/assets/media/midi/Twinkle.mid new file mode 100644 index 0000000000000000000000000000000000000000..8c25f4fbaecf0357b2ceac07e82178d35a11684f GIT binary patch literal 162 zcmeYb$w*;fU|<7cMurC8kfLlLtB2u#1Pcq30SCkXNG2eEf{jKakN`2{pbTeSAj26b z;%o$ExPnAnfg-LT5fH;!xe21i5hUUW6mbNp0Wlnm940t00I>#yw$pW(U