From 6034b5297484cd8308db11a9fdc56bfb20347e09 Mon Sep 17 00:00:00 2001 From: Christof Date: Thu, 13 Feb 2025 00:23:51 +0100 Subject: [PATCH] Get away without using mido for testing --- adaptations/Yamaha_FS1R.py | 50 ++++++------------ adaptations/testData/Yamaha_FS1R/Vdfs1r01.syx | Bin 0 -> 131840 bytes 2 files changed, 17 insertions(+), 33 deletions(-) create mode 100644 adaptations/testData/Yamaha_FS1R/Vdfs1r01.syx diff --git a/adaptations/Yamaha_FS1R.py b/adaptations/Yamaha_FS1R.py index d6384d62..ca86089a 100644 --- a/adaptations/Yamaha_FS1R.py +++ b/adaptations/Yamaha_FS1R.py @@ -443,7 +443,7 @@ def extractPatchesFromAllBankMessages(messages): return performances -def make_test_data(): +def convert_mid_to_syx(): from mido import MidiFile mid = MidiFile("testData/Yamaha_FS1R/Vdfs1r01.mid") program_data = [] @@ -452,46 +452,30 @@ def make_test_data(): for msg in track: if msg.type == "sysex": program_data.append(msg.bytes()) - assert isPartOfBankDump(msg.bytes()) - assert len(knobkraft.findSysexDelimiters(msg.bytes())) == 1 - #message = knobkraft.stringToSyx("f0 43 00 5e 03 10 11 00 01 43 50 2d 37 30 20 50 47 20 20 20 20 00 00 01 00 75 40 18 00 00 00 01 00 07 68 00 00 00 00 00 00 00 02 00 00 00 00 00 40 01 01 01 01 01 01 00 00 00 01 00 02 00 04 00 08 20 00 20 00 00 00 00 00 19 1a 13 14 13 14 27 28 38 38 50 50 3c 50 40 40 00 0f 00 0a 00 09 00 18 00 2a 00 00 00 00 00 00 00 00 22 04 45 0a 40 00 00 05 00 2e 00 5c 00 0a 00 4a 00 14 00 40 00 32 00 40 00 00 00 00 00 00 00 1a 00 40 00 01 00 40 00 40 00 22 00 40 00 32 00 40 00 13 00 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 40 40 01 40 40 40 15 40 00 00 7f 46 0c 07 00 42 22 07 46 36 07 00 00 04 01 01 00 10 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 0d 08 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 00 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 04 01 00 11 7f 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 00 28 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 32 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 04 01 00 11 7f 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 00 28 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 32 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 04 01 00 11 7f 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 00 28 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 32 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 03 f7") - assert isBankDumpFinished(program_data) - programs = extractPatchesFromAllBankMessages(program_data) - assert len(programs) == 128 + with open("testData/Yamaha_FS1R/Vdfs1r01.syx", "wb") as writeout: + ex = bytearray() + for data in program_data: + ex.extend(data) + writeout.write(ex) + - single_dump = [] - for message in program_data: - if isPartOfSingleProgramDump(message): - single_dump.extend(message) +def make_test_data(): + #message = knobkraft.stringToSyx("f0 43 00 5e 03 10 11 00 01 43 50 2d 37 30 20 50 47 20 20 20 20 00 00 01 00 75 40 18 00 00 00 01 00 07 68 00 00 00 00 00 00 00 02 00 00 00 00 00 40 01 01 01 01 01 01 00 00 00 01 00 02 00 04 00 08 20 00 20 00 00 00 00 00 19 1a 13 14 13 14 27 28 38 38 50 50 3c 50 40 40 00 0f 00 0a 00 09 00 18 00 2a 00 00 00 00 00 00 00 00 22 04 45 0a 40 00 00 05 00 2e 00 5c 00 0a 00 4a 00 14 00 40 00 32 00 40 00 00 00 00 00 00 00 1a 00 40 00 01 00 40 00 40 00 22 00 40 00 32 00 40 00 13 00 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 40 40 01 40 40 40 15 40 00 00 7f 46 0c 07 00 42 22 07 46 36 07 00 00 04 01 01 00 10 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 0d 08 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 00 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 04 01 00 11 7f 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 00 28 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 32 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 04 01 00 11 7f 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 00 28 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 32 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 04 01 00 11 7f 01 00 00 18 40 40 7f 40 40 40 00 7f 7f 00 28 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 02 32 42 3e 32 00 01 7f 00 01 40 40 00 00 00 00 03 f7") def edit_buffers(test_data: testing.TestData) -> List[testing.ProgramTestData]: - pass - #edit_buffer = [] - #for msg in program_data: - # if isPartOfEditBufferDump(msg): - # edit_buffer.append(msg) - # if isEditBufferDump(edit_buffer): - # yield testing.ProgramTestData(message=edit_buffer) - # edit_buffer = [] - #edit1 = convertToEditBuffer(0x01, message) - #edit1 = convertToEditBuffer(0x01, program_data[0]) - #yield testing.ProgramTestData(message=edit1, name="CP-70 PG ", rename_name="Piano 2 ") - #edit2 = convertToEditBuffer(0x01, program_data[255]) - #yield testing.ProgramTestData(message=edit2, name="Sitar ", target_no=244, rename_name="Piano 2 ") + programs = extractPatchesFromAllBankMessages(test_data.all_messages) + yield testing.ProgramTestData(message=convertToEditBuffer(12, programs[0]), name="HARDPNO PF ", rename_name="Piano 2 ", number=0, friendly_number="Bank3-2") def program_buffers(test_data: testing.TestData) -> List[testing.ProgramTestData]: - #yield testing.ProgramTestData(programs[0], name="nknonwsfsdf") - #program_buffer = [] - #for msg in programs: - # if isPartOfSingleProgramDump(msg): - # program_buffer.append(msg) - # if isSingleProgramDump(program_buffer): - # yield testing.ProgramTestData(message=program_buffer) - # program_buffer = [] + assert isBankDumpFinished(test_data.all_messages) + programs = extractPatchesFromAllBankMessages(test_data.all_messages) + assert len(programs) == 128 yield testing.ProgramTestData(message=programs[0], name="HARDPNO PF ", rename_name="Piano 2 ", number=0, friendly_number="Bank3-2") yield testing.ProgramTestData(message=programs[127], name="Sitar ", rename_name="Piano 2 ", number=127, friendly_number="Bank3-2") - return testing.TestData(program_generator=program_buffers, edit_buffer_generator=edit_buffers, + return testing.TestData(sysex="testData/Yamaha_FS1R/Vdfs1r01.syx", + program_generator=program_buffers, + edit_buffer_generator=edit_buffers, device_detect_call="F0 43 20 5E 00 00 00 F7", device_detect_reply=("f0 43 00 5e 00 4c 00 00 00 40 00 00 00 00 00 40 02 01 00 00 00 00 00 00 00 01 00 01 01 01 01 10 11 12 13 14 15 16 0d 04 02 50 51 3c 7f 3c 7f 3c 7f 3c 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 06 f7", 0x00)) diff --git a/adaptations/testData/Yamaha_FS1R/Vdfs1r01.syx b/adaptations/testData/Yamaha_FS1R/Vdfs1r01.syx new file mode 100644 index 0000000000000000000000000000000000000000..54c71a6389aeba63827db502eed042b8cd8934c4 GIT binary patch literal 131840 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 B99RGV literal 0 HcmV?d00001