bladeSk / DX7II-Librarian

Yamaha DX7II-FD / DX7II-D / DX7s / DX7 cart manager in your browser. With DX7II features support.
5 stars 2 forks source link

DX7II bank sysex file import? #4

Open solyarisoftware opened 7 months ago

solyarisoftware commented 7 months ago

Hi Matúš

beforehands, your web-application is great in terms of GUI and concept! Very well done.

I developed in 90's many DXT7II patches, see details here: https://solyaris.altervista.org/dx7.html ( see also: https://github.com/asb2m10/dexed/issues/165 ).

I still own my DX7IIFD, but it's deep enclosed on a wardrobe so I would like to use instead my bank sysex files and try to play them using a virtual emulation software (maybe overlapping 2 dexed instances). More precisely I would like to

  1. import a 32 performance bank into DX7II-librarian
  2. save the linked 2 bank of DX7 voices
  3. rebuild each performance patch sound overlapping 2 dexed vst instance (one for voice 1 and one for voice 2)....

I tried you nice web application dragging the file alienazi.sys, a BANK sysex you can download from the previous page: http://solyaris.altervista.org/dx7iipatches/alienazi.zip

Unfortunately i got an error reported on the screenshot: image

If I'm not wrong, the above sysex file is a "full dump", or a "performance bank" that means a the complete bundle of

So my feature request is to able your librarian to manage the import/export of just the "full dump" aka performance bank and all data other required. That's the common used way to exchange data from/to the synth, IMMO.

What do you think? Thanks giorgio

bladeSk commented 7 months ago

Hi, the entire premise of this project is DX7II support.

The file you mention has 7 sysex messages in total - DX7II bank header + AMEM + VMEM, another DX7II bank header + AMEM + VMEM and finally performance data. I suspect this has been stitched together by recording all the dumps one after another. As far as I know a DX7II can dump only one kind of data at a time and this librarian is built around that.

Importing files combined this way certainly could be implemented, but it's not that simple - a SYX file could conceivably contain any combination of valid DX7 dumps in any order along with any other SysEx data. I'll need to put some thought into this.

In the meantime, you can split the file into 5239 bytes + 5239 bytes + 1650 bytes and it will read just fine.

solyarisoftware commented 7 months ago

Hi Matúš,

the entire premise of this project is DX7II support.

Ok. And/or the TX802 :-)

It was 2 decades ago ... (around 1995-1996 !! ), but if I well remember I created the sysex files without sending multiple dumps one after another as you hypotized. Instead I used a synth MIDI utility like "dump all" or something. I'll double-check into the manual but I'm almost sure.

The split solution could be a workaround. Why do you say 5239 bytes + 5239 bytes + 1650 ? %239 is the size of a VOICE bank?

Thanks giorgio

bladeSk commented 7 months ago

I don't have a TX802 to test, so I can only hope it's supported. :)

You can see the sizes in the error message. 5239 is the size of a DX7II bank dump without FKS data (bank header + AMEM + VMEM), 1650 is the size of a performance dump. Let me know if splitting the data worked - it should.

solyarisoftware commented 7 months ago

Thanks. It's now more clear to me. So a possible linux cli splitter could be:

#!/bin/bash
# DX7II_dump_splitter.sh - DX7II Dump Splitter Script
#
# This script splits a DX7II SYSEX file into its individual components.
# The input file contains 7 SYSEX messages in total:
#   1. DX7II bank header + AMEM + VMEM (5239 bytes)
#   2. Another DX7II bank header + AMEM + VMEM (5239 bytes)
#   3. Performance data (1650 bytes)
#
# The size of a DX7II bank dump without FKS data (bank header + AMEM + VMEM) is 5239 bytes,
# and the size of a performance dump is 1650 bytes.
#
# Usage example: ./DX7II_dump_splitter.sh alienazi.syx

# Check if an input file is provided
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <input_file.syx>"
    exit 1
fi

# Input file name
input_file=$1

# Check if the input file exists
if [ ! -e "$input_file" ]; then
    echo "Error: File '$input_file' not found."
    exit 1
fi

# Output file names
output_file_a="${input_file}_voices_a.syx"
output_file_b="${input_file}_voices_b.syx"
output_file_c="${input_file}_performances.syx"

# Split the input file into three parts
dd if="$input_file" of="$output_file_a" bs=1 count=5239
dd if="$input_file" of="$output_file_b" bs=1 skip=5239 count=5239
dd if="$input_file" of="$output_file_c" bs=1 skip=10478 count=1650

echo "DX7II SYSEX file '$input_file' has been successfully split into $output_file_a, $output_file_b, and $output_file_c."

I'll try in the week end and I'll let you know.

I'd glad to know your point on this dexed discussion: https://github.com/asb2m10/dexed/discussions/405 ! giorgio

bladeSk commented 7 months ago

I'd glad to know your point on this dexed discussion: https://github.com/asb2m10/dexed/discussions/405 !

You can use DX7II librarian to open DX7II patches and export them as DX7 mk 1 patches. Or you could save the last 4104 bytes of a DX7II voice dump to achieve the same thing. However, all the extended parameters (AMEM) will be lost in the process, which may change the sound slightly or significantly depending on which parameters were lost. Which is probably why Dexed doesn't support mk 2 patches