- Many thanks to Douglas Carmichael for plenty of contributions and fixes!
- New: Added support for the E-mu Emulator (1981), the first Emulator (HFE, EMUFD, IMG). Written disks are not yet verified on hardware.
- New: Added support for the E-mu Emax and Emax II (EM1, EB1, EM2, EB2, EM1FD, EM2FD, EZ1, EZ2, IMG, ISO, HFE). Written banks are not yet verified on hardware.
- New: Added support for the sample instruments of the Sequential Prophet X / XL (GRP, ZIP): the instrument folders with their group file and the ZIP archives which the device imports from a USB drive, as written by the mapping utility of 8Dio and by PXToolkit. Reading was verified on a third-party sample pack; written instruments follow the same conventions but are not yet verified on hardware.
- New: If no category could be detected, another attempt is made by using all group and zone names.
- New: The fixed loop cross-fade of the processing options can be set on only the loops which click ('Only loops which click',
-Zlctogether with-Zlon the command line). The loops which the note about clicking loops reports get the cross-fade - after they were snapped to zero-crossings, if that is enabled, so only the loops which snapping could not fix - and all other loops keep what they have, including their own cross-fades. Since a cross-fade blends the end of the loop with the audio in front of the loop start, it is limited to the audio which is there. Converted to Waldorf Quantum/Iridium with 8%, Espen Kraft's 'DX Dreams' gets a cross-fade on 18 of its 2,336 loops in 12 presets, where the fixed cross-fade sets all of them, and the notes about clicking loops are gone; without the option the output is unchanged. - Fixed: That attempt crashed when a group has no name, which e.g. the round-robin groups of an Elektron Tonverk preset do not have: the preset was skipped with 'Cannot invoke "String.split(String)" because the return value of "IGroup.getName()" is null' whenever the file and folder names gave no category, e.g. when converting a single preset file.
- Fixed: The main window had a minimum size of 1280x840 pixels and therefore did not fit onto smaller screens like the 1366x768 pixels of many laptops - it opened larger than the screen and could not be made smaller. The minimum and the initial size of the window are now limited to the visible area of the screen.
- Fixed: 32-bit float samples (e.g. the WAV files which DirectWave writes) were always converted to 16 bit, even though the log announced the 24 bit of the destination format. A float sample is now converted to the highest resolution the destination supports - 24 bit for e.g. SoundFont 2, Bliss, Tonverk, DirectWave and FLAC, 32 bit for ALAC - and keeps its float format for destinations without a restriction, e.g. when only the chunks of a WAV file are updated.
- Fixed: Sample search did only search upwards but not downwards from the current directory.
- Fixed: Ignore very short loops (1-2 samples) stored in WAV sample chunks.
- Fixed: Converting the sample frequency of a sample made seamless loops click at every repeat - with the processing options as well as for a destination which converts it itself (e.g. Waldorf Quantum/Iridium, Yamaha YSFC, Roland MC-707 and MV-8000). The frames behind the loop end are not the frames which are played after it, but the conversion mixed them into the end of the loop, and a loop rarely has a whole number of frames at the new frequency, so its end moved against its waveform. A loop is now converted as the repeating audio it is and stretched to a whole number of frames, which changes its pitch by less than a quarter of a cent for a loop of 4096 frames. Espen Kraft's 'PX Vol. 2 Digital Voices' (1,129 stereo loops, measured in each channel, with the loop end of the SoundFonts read correctly - see SoundFont 2) converted from 48 kHz to 44.1 kHz: 493 of the 2,258 loop channels clicked and 103 do now, as many as at 48 kHz (115); written by the Waldorf Quantum/Iridium destination without processing, 342 of its 1,145 looped sample map entries clicked and 100 do now. Samples without a loop are converted exactly as before.
- Fixed: 'Snap loops to zero-crossings' broke loops which were fine. It moved the loop start and the loop end independently to zero-crossings of the mixed channels, which changes the length of the loop, and applied it whenever the two values came closer together. On the same library it moved 862 of the 1,129 loops and then 613 of the 2,258 loop channels clicked instead of 103. Now only a loop which clicks is moved - to a nearby zero-crossing or to where the waveform continues best, whichever clicks less - and only if that clearly reduces the click, measured in every channel; a loop with a cross-fade is left alone. Now 32 click and none of them was clean before; of the 105 loops of Espen Kraft's 'Digital Collection Vol. 1' without their cross-fades 68 click instead of 94 with the old method. The option is therefore now called 'Snap loops which click'.
- Fixed: 'Trim sample start/end' cut off the last frame of a loop which ends before the end of the sample.
- Fixed: AIFF files with a chunk of an odd length in front of their sound data - e.g. an author chunk of 13 characters - could not be read. The audio system of Java does not skip the pad byte which follows such a chunk and rejects the file, so the conversion failed with 'Could not retrieve audio file format' or wrote the sample as an empty file ('Resetting to invalid mark'). The format and the audio of such a file are now read from its chunks, as they already were for AIFC files. On the test machine this affected the 45 samples of the 'EmptyVessel' factory presets of TAL-Sampler, which now convert to exactly the audio which macOS decodes from them; the other 974 AIFF files convert as before.
- Fixed: A file name could contain a character which a shell or the Windows command processor expands before the file is ever opened - the back-tick, the dollar sign, the semicolon and the percent sign. A converted library is copied to a card, renamed, backed up and read by scripts, and the back-tick substitutes a command, so the E-mu Xtreme Lead 1 preset named "4AM` Flyin'" was written as a preset file and a sample folder which carry it. The apostrophe and the ampersand were already replaced for the same reason, and these four now are as well. The number sign is kept - it is part of almost every note name - and so are the exclamation mark, which only an interactive shell expands, and the tilde, which only expands where it starts a path. Only the names of files and folders are affected: the name a device displays still carries the characters of the source.
- Fixed: The destination was not asked whether it can work with the processing options when converting from the command line - only the graphical interface asked it. A destination which cannot use an option now reports that on the command line as well.
- Fixed: Zones which the source panned hard left and right were combined into stereo samples even when they were not the two channels of one recording. A sound which layers the same mono samples hard panned and detuned against each other - a common way to create a wide pad - became a dual mono file of twice the size and lost the tuning of one of its two layers. Only zones which reference two different samples and share their tuning are combined now, all others are kept as the separate layers they are. The 'Super Pad' of the E-mu Xtreme Lead 1 library for example arrives at the Waldorf Quantum/Iridium as two oscillators panned left and right and detuned by -4 and +4 cent, the way the source has it, instead of one centred oscillator which plays the same sample on both channels.
- Fixed: Two sets of hard panned zones which do not map alike - e.g. two velocity layers, one panned hard left and one hard right - were combined into stereo samples as well. The left and the right zones were paired by their order alone, so a pair could consist of zones with different key or velocity ranges; the two channels of one recording share their key range, root note, velocity range, play range and tuning, and only such pairs are combined now. The name of a combined zone was the part which the names of its two channels share at their start, which is nothing when the channel is marked at the start ('L Piano C3', 'R Piano C3') - every combined zone was then named the same and wrote one and the same sample file, so the patch played a single sample on every key. The shared part is now taken from the end of the names as well, and a name which is not shared at all is kept as the one of the left channel.
- Fixed: A zone whose sample is FLAC or OGG had no play range, so destinations which write one wrote the -1 of an unset range. Every sample format fills the play range of a zone in when the source format does not supply one - the length of the audio - but the FLAC and the OGG reader did not, since neither format stores a root key or loops and there seemed to be nothing to add. Converting FLAC or OGG sources therefore wrote -1 as the sample end into Korg KMP/KSF and Reason SXT (as 0xFFFFFFFF), as the slice start and end of an Akai MPC keygroup, and into the Kontakt NKI; the TAL Sampler sums the length of all zones for its amplitude release, which came out negative and clamped the release to its maximum; SoundFont-style destinations like SFZ and Bitwig left the sample end out altogether. The two readers now fill the play range in like the WAV, AIFF, CAF and NCW readers already do.
- Fixed: The keywords of a preset were matched as parts of words, so a harp got the keyword 'arp', a trumpet 'mpe', a harmonica 'harmonic' and a harpsichord 'chord'. A keyword now has to be a whole word of the name, of the folder names or of the description; the words of a compound name like 'PPG_PadSlow3WaveWideST' count as well. Destinations which write the keywords, e.g. the attributes of a Waldorf Quantum/Iridium patch, no longer show them.
- Fixed: Every word of a folder name which is a keyword was given to all presets in the folder, even when the folder name is the title of a library and not a description of its sounds. All presets of Espen Kraft's 'The Digital Collection' got the keyword 'digital' - a Waldorf Quantum/Iridium shows it as the attribute 'Digital' - the strings of Vol. 6 as well, which were sampled from an Oberheim Matrix-12, an analog synthesizer. Whether a volume got it depended only on how its download folder was named. A folder name now provides keywords only if all of its words are keywords or category names, like 'Digital', 'Mono' or 'Analog Synths', whichever folder is selected as the source. Of 975 presets from 12 libraries, 'digital' was removed from the 367 of the four volumes whose folder names carry the word and of 'PX Vol. 2 Digital Voices', and 'poly' from one preset; no category changed. With 'Category from name prefix' the name of the preset is now checked before the folder names, as documented: 2 of 921 presets change, e.g. 'Flute Pad' in the folder 'STRINGS PADS' is now Pipe instead of Strings.
- Fixed: The name of a folder decided the category of all presets in it even when it is the title of a library, since the longest category keyword wins: 'Prophet' in 'Espen Kraft TAL The digital collection Vol4 Sequential Prophet VS' made synthesizers of 'Bass 1', 'Bells 1', 'Choir 1', 'Organ 1' and 'Piano 1', 'Voices' in 'Espen Kraft PX Vol 2 Digital Voices 43 patches SF2' made vocals of 'D-50 EP Classic' and 'D-50 Dry Organ', and the 'str' of the folder 'Sampler Instruments' of E-mu's 'Planet Earth' (Logic EXS24) made strings of its drum kits. As for the keywords, only a folder name which describes the sound of its content takes part now. The last attempt, which uses the names of the groups and zones, read note names as organs, since the letters and digits of a name were not separated: the 'c3' of the sample 'S_000_060_c3' is the Hammond C3 of the organ category. Now they are separate words. Of 2,521 presets of 26 libraries in 7 formats, 423 changed their category: 321 lost a wrong one and are left without a category when their names carry none, 102 got the one of their names or of a describing folder, like 'Bass 1' Bass and 'Earth Kit 01' Drum. A category keyword inside another word still matches, e.g. 'Prima Domra' is a snare (from 'prima').
- Fixed: 'Wave' was a keyword of the Chip category, so every sound whose name or folder contains it - the wavetable synthesizers Waldorf Microwave, PPG Wave and Korg Wavestation among them - was categorized as Chip unless a longer keyword matched: 27 of the 50 presets in the 'Waldorf MicroWaveXT' folder of Espen Kraft's 'Digital Collection Vol. 7' came out as Chip, e.g. 'MWIIXT Mellow Pad', 'PPG Wavetable Sawmill' of Vol. 1 as well, and 162 of the 214 presets of the 'BlueWave' pack, whose folder carries the word. The Chip category now recognizes Chiptune, Computer, Gameboy, Nintendo, Commodore, Arcade, 8-Bit, Atari, Amiga, C64 and CPU instead.
- Ableton
- Fixed: A filter whose resonance is not stored in the preset got a resonance of 16,000 on a scale of 0 to 1 - the default of the cutoff frequency had been copied - which a destination like the Waldorf Quantum/Iridium writes as it is; the default is now 0. The amount of the filter envelope (+-72 semitones in Simpler) was read and written with 72 semitones as the full depth of the model instead of its 120, so an envelope of e.g. 36 semitones arrived as one of 60 semitones at a destination which applies the depth of the model.
- Akai MPC
- Fixed: Writing a sample chunk is now enabled by default. It seems that the MPC is always reading the loop data from the chunk.
- Fixed: Writing/reading XTY format was off by 1 semitone.
- Fixed: Writing XTY used a template which had a panning of +13 and a reverb effect. Panning is now centered and the reverb effect has been removed.
- Fixed: Creator configuration was not always stored.
- Akai MPC500/MPC1000/MPC2500
- Fixed: The length of a sample was rounded down to whole seconds before it became the release of a one-shot pad, so every one-shot shorter than a second got a release of 0 seconds - which a destination with an amplitude envelope cuts off at note-off - and a longer one a release up to a second too short.
- Akai S900/S950
- Fixed: The vibrato depth was converted ten times too deep: the full depth of the sampler is 3 semitones, but it was written as a quarter of the 120 semitones of the model, so a program with a vibrato arrived on a Waldorf Iridium with a wobble of the 24 semitones its pitch modulation allows at most.
- Akai S-1000/S-3000
- New: The octave shift, the stereo level and the stereo pan of a program are converted (also for MESA S3P files). A program which is shifted by one or two octaves was converted at its unshifted pitch; the level (0-99) and the pan (-50..50) of the program in the stereo mix are applied on top of the levels and pans of its key-groups.
- Audiomodern Soundbox
- Fixed: Every sample position of a pack whose samples are FLAC was lost, which made converted presets silent on some destinations. The positions of a sound are fractions of the length of its sample, and the frame count they were multiplied with was taken from the zone, where only a WAV sample fills it in - for FLAC it was still -1. Every trimmed sample start was dropped and every loop became a loop of zero length at the start of the sample, which e.g. a Waldorf Iridium plays as silence. The frame count now comes from the audio metadata, which every sample format supplies. The packs of the factory corpus hold WAV and were not affected; in the 'Wired' pack, which holds FLAC, 743 of the 1553 zones had such a loop.
- Fixed: The band-pass and the high-pass of a filter effect were swapped, which silenced converted presets. The plug-in stores the filter type as a juce::dsp::StateVariableTPTFilterType (0 = low-pass, 1 = band-pass, 2 = high-pass) and not in the assumed low-pass/high-pass/band-pass order, so e.g. the high-pass at 62 Hz which the 'Wired' pack puts on many of its pads - a plain rumble filter - became a band-pass at 62 Hz, which removes practically the whole sound. The three types the plug-in has are now read and written with their own indices; a band-rejection, which the plug-in cannot store, is written as its low-pass default.
- Casio FZ
- Fixed: The levels of the filter envelope were scaled twice: its depth was set to the highest level of its stages, but the stage levels were still taken as fractions of the full range instead of that highest level, so an envelope which peaks below the full range sustained lower than the voice does - at a quarter of the range instead of the half for a peak of 128 and a sustain of 64. The stage levels are now relative to the peak.
- E-mu Emax
- New: The LFO modulation of the filter cutoff is read and written (the LFO to cutoff amount, 340 cents per step); before, only the vibrato and the tremolo of the LFO were converted.
- E-mu Emulator II
- New: Writing of Emulator II disks (HFE, EMUIIFD): each multi-sample becomes a preset of the bank, several of them as a library on one disk, with the voices of the key ranges, second voices, loops and the companded audio at 27,777 Hz. The settings of the voices are not decoded and are taken from a voice of the factory library; the operating system is copied from a system file or a disk image named in the settings. Not yet verified on hardware.
- New: Bank files (EII) are read: the bank memory alone, without the operating system, as the Sound Designer software of 1985 received it from the sampler, as the EMXP tools extract and write it and as Arturia's Emulator II V imports it.
- New: The settings of the voices are converted: the 4-pole low-pass filter with cutoff, Q, keyboard tracking, envelope and velocity amount, the amplitude envelope with its velocity amounts on the level and the attack, the LFO with rate, delay and its depths on pitch, filter and level, the fine tuning and the level. The bytes hold them the way the playback engine uses them - velocity tables, envelope counters, pointers into depth tables - and were decoded by aligning 9,563 voice records of the factory and OMI libraries with the SoundFont conversions which EMXP made of the same banks; read from the disk and read from those SoundFonts, the 512 presets of the factory library agree on 96-99% of their cutoffs, envelope times, sustains, velocity depths, tunings and levels (the rest are EMXP's own quirks). The chorus of a voice is not converted.
- Fixed: Disks written by the sampler itself could not be read at all - only images which the HxC tools generated from raw dumps. The Emulator II writes the header and the data field of a track separately and the data field starts half a byte earlier than the published track description says, which the byte-aligned decoder never found. The decoder now works on the flux pulses and re-synchronizes on each mark; all 160 tracks of each of the 90 factory disks decode with valid checksums, and the older images still do.
- Fixed: Every converted preset was an octave too low and shifted by ten keys. The key map was read with the lowest key at MIDI note 26 and the transposition value 0x0E as unity; the six voices of the factory disk 'Grand Piano', whose names state their pitch, prove the lowest key to be C2 (36) and the unity value to be 0x10.
- Fixed: Only the working copy of the selected preset was read, so a disk with several presets gave one of them and a disk whose selected preset was empty gave nothing. The preset records are now decoded - the factory disks hold up to 18 presets and 605 in total instead of 84 - including the second voice which a key range can play, which becomes a second group.
- Fixed: The loop of every voice was converted whether it was switched on or not, so plucked and struck voices looped their first period. The loop flag is now read; the loop of a voice may reach beyond its sample end, which the memory slot of the voice reserves room for, and the audio is read up to the end of the loop.
- Fixed: A voice whose audio reaches beyond the end of the disk was skipped with a note; the audio which is on the disk is now used.
- Fixed: Nearly every looped voice lost its loop, and with it the end of its audio. The loop switch is bit 2 of the voice flags and not bit 1, and the field which was read as the sample end is the loop start: on the Emulator II the loop is the end of a voice - the audio in front of it plays once, the loop repeats. 3,311 of the 3,848 voices of the factory library are looped and the reading agrees with the playback counters which the sampler stores next to the fields on all of them; before, 274 voices looped their beginning and all others ended at their loop start. Voices which start their playback later than their memory begins - the sustain-only layers of the stacked strings - and voices which are windows into a recording they share ('Mallet Cymbals') are read as the sampler plays them.
- Fixed: A bank was reported to continue on another disk when a voice reached beyond the disk. The sampler saves 485,888 bytes of bank memory, from its address 0x9600 to the end of its 512 KB, and the last 8,704 bytes of the bank region of a disk are always blank - they were read as audio. A voice which was sampled into the memory behind that - 124 voices on 32 of the 90 factory disks - is cut there and noted; the rest of its audio is on no disk, a bank on two disks does not exist.
- Fixed: The presets behind a preset whose name holds characters outside ASCII were lost - the copyright presets with which the Northstar and OMI libraries sign their banks ('p&c© 1986 N*') stopped the reading of the preset chain, which cost 142 of the 1,481 banks of the community library 792 presets ('Bamboo Flute Fx': 2 of 10). A preset record is now recognised by its structure (header and key ranges) and the names are decoded with the Mac Roman characters which the Sound Designer software wrote; a stray control character at the end of a name no longer turns a voice into 'Voice n'. Voices which no preset plays are no longer counted in the note about the bank memory.
- Fixed: Written disks laid the loop out the same wrong way and flagged voices without a loop as looped. The audio of a voice is now written up to the end of its loop and the records match the factory library; still not verified on hardware.
- Fixed: The end of a loop lay one frame behind the audio of its voice. A voice stores the loop start and the loop length - the number of frames of the loop, whose last frame is also the last frame of the voice - but the start plus the length was taken as the last frame of the loop. Written disks dropped that last frame from the audio and stored a loop one frame shorter than the source loop.
- E-mu Emulator III
- New: The 'Reverse Playback' flag of a sample is now read and applied to its zones.
- New: The tremolo (LFO to VCA) and the LFO modulation of the filter cutoff are read; the Emulator III documentation gives no depth for a full amount, so they are scaled like the LFO depths of the Emax, whose steps are known. The vibrato was read but never written: the shape, the rate, the delay and the three amounts of the LFO are now written as well, so a conversion between Emulator III banks keeps them.
- Fixed: Every loop was read one frame too long, which makes a seamless loop click in the converted preset. The loop end of a sample is stored as the last frame of the loop, and one frame was added to it. That frame had been found by measuring the step from the loop end to the loop start, which is smallest one frame too late since a seamless loop repeats its first frame behind its last one; the curvature across the seam is smallest at the stored frame itself (library CD-ROMs 'ESI-32 General MIDI' and 'Analog Odyssey', 300 loops each).
- Fixed: Forward/backward ('fwd/bkwd') loops of Emulator III banks were lost. The loop type of a sample is a 2 bit field - 0: off, 1: forward, 2: forward/backward - and only the forward bit was tested, so a forward/backward sample was converted as not looped at all. Such loops are now read as alternating loops, which destinations that support them play as intended (e.g. TAL Sampler as a ping-pong loop). The field layout was verified against the sampler's OS 2.42 firmware; only the original Emulator III knows this loop type, the Emulator IIIX and ESI have dropped it.
- E-mu Emulator IV
- New: The velocity to filter cutoff modulation (the velocity to filter frequency cord, slot 4 of the EOS default cord set) is read and written.
- Fixed: Every loop was read one frame too long, which makes a seamless loop click in the converted preset - the same mistake as for the Emulator III, whose sample structure the format uses. The curvature across the loop seam is smallest at the stored frame for 261 of 300 loops of the 'Analogia' CD-ROM. Reading a factory bank and writing it again now reproduces its loop positions exactly; before, every loop end grew by one frame.
- E-mu Emulator X
- New: The velocity to VCF attack amount of a voice is read: the low nibble of the byte whose high nibble holds the velocity to VCA attack amount, set on exactly the 199 factory voices whose VCF attack table varies with the velocity.
- New: The velocity to filter cutoff modulation cord is read and written.
- New: A written voice carries the fine tuning, the level and the velocity to level amount of its zone instead of the ones of the template voice, which played every voice about 6 dB down and without velocity sensitivity. The 16 entries of the level table run linearly from the level at the highest velocity to the one at the lowest, as the sampler fills them on all 2,935 factory voices with a velocity range. The other settings of a voice are still taken from the template.
- Fixed: Every loop was read one frame too long and written one frame too short. The loop end of the model is the last frame of the loop, but it was handled as the frame behind the loop. The header of a sample stores the last frame of the loop and its marker trailer the frame behind it, which is what the sample files of the factory banks hold: all 2002 looped samples written from the 'Vintage Keys' bank now match them, and the curvature across the loop seams of that bank is smallest at the stored frame.
- Elektron Tonverk Preset
- Fixed: A sample which could not be found was reported once for every key-zone which is cut out of it - a Multi preset which spreads one WAV file across the keyboard gave a dozen identical lines. A missing sample is now reported once per preset, and a preset none of whose samples could be found is reported as skipped.
- Fixed: The samples which alternate on successive notes within one velocity layer (round robins) were converted as layers which sound at the same time - the five round robins of a key became five stacked layers, which e.g. the Waldorf Quantum/Iridium spread over three oscillators and played three at once on the lowest keys. Also for elmulti files.
- Logic EXS24
- Fixed: Instruments which are stored in the big-endian variant of the format could not be read at all - the log only said 'Unknown magic tag'. Those files flag the type byte of a block with 0x80 and additionally set bit 15 of its size, so the very first block was read 32,768 bytes too long and swallowed all of the following ones. The flag is now masked out and such an instrument reads completely: e.g. the 'Muted Electric Bass' and 'Muted Electric Guitar' instruments of the Logic library give their 218 and 125 zones with their groups, velocity ranges, loops, envelopes and filter.
- Fixed: An instrument whose zones share their samples never finished being analysed. The sample file of a zone was searched for, opened and - if it is compressed - decoded again for every single zone, and Logic instruments with consolidated samples map all of their zones into one file: the 'Erhu' instrument of the Logic library has 6,083 zones which all play one 17 minute AAC-compressed CAF file, which meant 6,083 decodes of the same audio. Each sample of an instrument is now looked up and read once, which converts that instrument in about a minute; a sample which cannot be found is likewise reported once instead of once per zone.
- Fixed: A block of type 5, which Logic writes behind the parameters block of some instruments, was reported as an unknown block type. It holds tagged records of float values which do not belong to the multi-sample and is now skipped silently.
- NI Kontakt
- Fixed: Fixed a null pointer exception reading Kontakt 1 NKIs which was introduced in 20.2.
- Fixed: Prevent adding duplicated website info to metadata description (reading Kontakt 2 - 4.2).
- Fixed: An instrument with the 'Wave' icon - the waveform, Kontakt's generic icon of a sampled sound - was categorized as Chip. Like an instrument with the 'New' icon it is now categorized from its name and folder.
- Renoise
- New: The 'Map key to pitch' switch of a sample is read and written. A drum kit whose samples do not follow the key was converted as a chromatic instrument, and the switch was always written as on.
- Roland S-10 Series
- Fixed: The vibrato depth was converted as if the full depth of the model were 2 octaves instead of 10, five times too deep, and a layer which is enabled for the vibrato kept the full depth of 10 octaves when the performance parameters of the disk are missing.
- Roland SP-404MK2
- Fixed: The loop of a pad which loops the whole sample ended one frame behind the sample, e.g. 0..144000 for a sample of 144000 frames. It ends at the last frame of the sample now.
- Roland MC-707/MC-101
- New: The pitch key follow of a partial (100 = chromatic, 0 = the same pitch on every key) is read and written, and the keys of a written drum kit which play a zone without key tracking all get the pitch of its root key.
- Fixed: A stereo sample was read and written with its two channels interleaved, but the project stores all frames of the left channel followed by all frames of the right channel. Every stereo sample of a read project therefore played at double speed, an octave up and twice in a row - the left channel, then the right one - which the audition of the Contents dialog played as two notes for every tone of the VHS Soundpack, and a written project would have played its samples the same way on the device. Both directions now use the layout of the device. Roland's own projects store every sample in stereo; a project recorded on the device stores mono samples, which were not affected.
- Fixed: The key range, the velocity range and the switch of the partials of a tone were not read, so every partial covered the whole keyboard: a keyboard split - 'VHS 4LAY PIANO1' of the VHS Soundpack puts four piano samples on partials with the ranges C-2..C2, C#2..G2, G#2..D3 and D#3..G8 - arrived as four layers which all sound on every key, which is also what the audition of the Contents dialog played, and a switched-off partial which kept its wave played as well. The keyboard table of the tone (one 12-byte row per partial with its switch, key range and velocity range) is now read: a switched-off partial is skipped and the zones of a partial are limited to its key range.
- Roland ZEN-Core
- New: The pitch key follow of a partial is read and written - the same field as on the MC-707, 100 = chromatic in all templates. A drum zone was converted as chromatic and written to follow the keyboard.
- Fixed: Loops were read one frame too long, and written one frame too short unless the seam search moved their end. The engine loops from the loop start up to the frame before the end point (measured on the hardware), while the end of a loop in this application is its last frame. On the loops of samples exported by a FANTOM-0 the curvature across the loop seam was smallest one frame before the end which was read and is smallest at it now; a loop ending at frame 29999 is written with the end point 30000 instead of 29999.
- Fixed: Every loop was read one frame too long and written one frame too short. Kontakt stores a loop as its start and its length - the number of frames of the loop - but the start plus the length was taken as the last frame. Reading the Kontakt, Logic EXS24 and TAL-Sampler editions of the BlueWave library, which use the same samples, gave loop ends one frame behind the other two editions for 3557 of the 3634 zones of the 'Raw_Osc' instruments; now all three agree, and the curvature across the loop seams is smallest at the end which is read.
- Fixed: The switch and the key range of the partials of a tone were not read, only their velocity range: a switched-off partial which kept its wave played, and a partial with a key range covered the whole keyboard. The keyboard table is one 12-byte row per partial starting at 0x98 (switch, key range, velocity range), which also explains why its switch byte seemed to belong to the next partial.
- Fixed: The samples of sample packs which store their WAV files scrambled, e.g. the '02_Melodic' pack, were read as noise. Such a sample holds a complete WAV file like the ones of Roland's SVZ Sample Converter, but every byte of it is substituted - with one law for the low and one for the high bytes of the 16-bit samples - and it was taken for raw audio behind a longer header. The WAV file is now decoded and read like the converter's.
- SFZ
- New: The modulation of the filter cutoff by the modulation wheel is read and written (cutoff_oncc1 or cutoff_cc1, in cent).
- New: Opcode groups are now aggregated to group and global level.
- New: The 'transpose' opcode is read; it was ignored, so a region which is transposed by whole semitones played at the wrong pitch (75 of the 1,787 SFZ files on the test machine use it). When writing, whole semitones go into 'transpose' and only the remainder into 'tune', whose range the specification limits to one semitone.
- Fixed: Unused opcodes were not logged.
- Fixed: The key tracking of the filter ('fil_keytrack') was read and written with 1,200 as the full tracking. The opcode is in cent per key, so 100 is the cutoff following the keyboard one to one, which is what the model calls full tracking: a fully tracked filter of an SFZ from another tool arrived with 8 % tracking, e.g. on a Waldorf Iridium. SFZ to SFZ conversions are unchanged.
- Fixed: The depth of the pitch LFO ('pitchlfo_depth') and of the filter LFO ('fillfo_depth') was read and written with 1,200 cent as the full depth of the model, while the pitch and filter envelopes and every other format use the 12,000 cent of IEnvelope.MAX_ENVELOPE_DEPTH - the law with which the Waldorf Quantum/Iridium destination was verified on the device. A vibrato of 50 cent therefore arrived on an Iridium as one of 500 cent and a filter LFO of 600 cent as one of 60 semitones. The depths are now read and written in the unit of the model, limited to the +-1,200 cent of the opcodes when written; SFZ to SFZ conversions are unchanged.
- Sample Files
- New: The 'Pitch' switch of a zone is read and written: a zone with the switch off plays its sample at the same pitch on every key (e.g. a drum) and was converted as a chromatic instrument - 644 of the 66,392 zones of the DSF E-mu Proteus library have it off - and every written zone had it on. The transposition of the instrument is read as well.
- Fixed: Sub-folders were scanned once for each of the configured sample file types and every scan converted the multi-samples it found again - with all six types enabled, a folder one level below the source folder gave six copies of its multi-sample and a folder two levels below 36. The folders are now listed once and the files are sorted into their types afterwards, which also stops the report of a type of which a folder holds no file at all ('Detected 0 CAF (*.caf) files.').
- Fixed: Only the first multi-sample of a folder was converted, so a folder which holds sample files of several of the configured types - e.g. both WAV and AIFF files - lost all but the first of them.
- SoundFont 2
- Fixed: Every loop was one frame too long when reading and one frame too short when writing. The loop end of a SoundFont is the first frame behind the loop, the loop end of all other formats and of this application is the last frame of the loop, but the value was taken over unchanged in both directions. A loop which is seamless in the SoundFont therefore clicked at every repeat after the conversion: of the 2,254 loops of Espen Kraft's 'PX Vol. 2 Digital Voices', 1,023 did so in a plain conversion to WAV files and 115 do now, about as many as the SoundFonts themselves contain. A written SoundFont plays its loops correctly now as well - fluidsynth played a loop of whole sine periods with a glitch at every repeat before and plays it seamlessly now.
- Fixed: 24-bit samples were missing the padding byte in case that the number of samples were uneven. This made reading the created SF2 file fail in some tools (e.g. Polyphone).
- Fixed: The specification version is now set to 2.04 if 24-bit samples are used otherwise it is still 2.01. This prevented 24-bit files to be loaded in Viena.
- Fixed: Set bank and program number for the closing EOP preset to 0 (was 255) to comply with specification.
- Fixed: Written SoundFonts were silent at full velocity in players which apply modulators (e.g. FL Studio, fluidsynth). The velocity to volume modulator was written with the positive direction, which attenuates by the full 96 dB at velocity 127 and not at all at velocity 0, so only the softest notes were audible - the velocity to filter cutoff modulator was inverted the same way. Both are now written with the negative direction of the default modulators of the SoundFont specification; the volume one thereby also supersedes that default, so a source without velocity sensitivity no longer falls back to the full sensitivity of the default.
- Fixed: The key range and the velocity range were written behind the panning and tuning generators of a zone. The SoundFont specification requires them to be the first two generators, and players which enforce this (e.g. fluidsynth) discarded them, so every zone played on all keys.
- Fixed: Negative modulator amounts, e.g. of a velocity to filter cutoff modulator, were read as large positive numbers, and the direction of a velocity modulator was ignored when reading.
- Fixed: The coarse offset generators of a zone - sample start, sample end, loop start and loop end in units of 32768 frames - were ignored when reading, so a play range or loop which begins beyond the first 32768 frames of a sample was placed 32768 frames (or a multiple) too early, e.g. the loops of the E-mu library SoundFonts which EMXP writes.
- Fixed: The modulators of the global zone of an instrument or preset were ignored - only the modulators of the zone itself were read - so e.g. the velocity to volume and velocity to cutoff amounts of SoundFonts which keep them in the global zone (again the EMXP conversions of the E-mu libraries) were lost.
- Fixed: The depth of the vibrato LFO ('vibLfoToPitch') was read and written with 1,200 cent as the full depth of the model instead of the 12,000 cent which the modulation envelope of the same file and every other format use, so a SoundFont vibrato arrived ten times too deep at a destination which applies the depth of the model - a 50 cent vibrato as 500 cent on a Waldorf Iridium. SoundFont to SoundFont conversions are unchanged.
- Synclavier Regen
- Fixed: Partials which are muted in the editor were converted as layers. The editor keeps the samples of a muted partial in the timbre, so e.g. the switched-off sub-octave pulse of 'Prodigy Pad' (Starsky's Prodigy) became the first layer - and since it has no release time, destinations with one amplitude envelope per preset (e.g. Waldorf Iridium/Quantum) got an instant release instead of the 3.5 seconds of the pad. Only the active partials are converted now - those which carry a volume line, which is also how the device builds the active-partial mask of its timbre index.
- Fixed: The contour of the note filter envelope was lost: only its peak level was read, the start level and the end level which the release heads to were ignored, and no sustain level was set - so destinations which default a missing sustain to the full level (e.g. Waldorf Iridium/Quantum) kept the filter at its peak for the whole note; none of the 26 filter envelopes of 'Starsky's Prodigy' ever decayed there. The three levels are octaves relative to the cutoff, which is the sustain level of the contour (Regen manual, 'Filter Envelope'); they are now read and written completely, and a contour which reaches below the cutoff is re-based so that the envelope of the model can carry it.
- TAL Sampler
- Fixed: The cross-fade of a loop was ignored when reading and always written as 0. TAL-Sampler stores it in the attribute 'fadeinsamples', which despite its name is not a fade-in but the cross-fade relative to the length of the loop, ending at the loop end, and plays its loops with it - 104 of the 105 loops of Espen Kraft's 'Digital Collection Vol. 1' have one of 55% to 100%. Without it the loops wrapped with an audible click, e.g. in the presets converted for the Waldorf Iridium, which plays the cross-fade from its sample map. The cross-fade is now read and written.
- Fixed: A preset without a velocity range - e.g. all 138 presets of Espen Kraft's 'Digital Collection Vol. 1' - was read with the velocity range -1 to -1, and most destinations wrote it as it was: Waldorf Quantum/Iridium, Bliss and Omnisphere wrote -1, Yamaha YSFC 255, E-mu Emulator IV and Emulator X 0 to 0, E-mu Emulator III and Roland MV-8000 1 to 1, Kurzweil played the sample only up to velocity 15, Synclavier Regen closed the velocity window and 1010music blackbox and bento did not write the preset at all. A missing key or velocity range now covers the full range.
- Fixed: The name of a preset was taken from the 'programname' attribute inside the file instead of from the file name. TAL Sampler lists its presets by file name, and the attribute keeps the name the program was saved under, which the producer of a pack often changes afterwards by renaming the file - Espen Kraft's 'Vol. 7 Super Hybrid' prefixes the synthesizer the samples come from ('MM Bass 13.talsmpl' holds the program name 'Bass 13'), so 65 of its 99 presets lost that part of their name and the presets of its three synthesizers collided under one name.
- Fixed: The amount of the filter envelope was read and written as if 0 were no modulation, but TAL-Sampler stores it bipolar with 0.5 as 0 % - the value the plug-in shows as '0.00 %'. Every preset whose filter envelope is turned off was therefore converted with a filter envelope of +50 % (209 of the 391 presets with a filter on the test machine), and a negative amount became a positive one. With the instant filter release of the plug-in's default and a low cutoff this snapped the filter shut at every note-off: 'MWIIXT MKS Strings' of Espen Kraft's 'Vol. 7 Super Hybrid' stopped the moment a key was released on a Waldorf Iridium, whatever its 6 second amplitude release said.
- Fixed: The times of the envelopes were scaled with the average length of the samples, so the same envelope came out differently with different samples, and far off: the amplitude release of 'MWIIXT MKS Strings' (0.59) was written as 6.18 seconds and its attack (0.336) as 3.52 seconds. TAL-Sampler plays a stage of the value x in 7.2 x^4 seconds whatever the samples are - measured by rendering the plug-in (4.7.2) offline: the release values 0.4, 0.6, 0.8 and 1.0 fade a note out in 0.19, 0.93, 2.95 and 7.2 seconds, and the attack follows the same law. The preset above now gets a release of 0.87 seconds and an attack of 0.09 seconds, which is what the plug-in plays.
- Fixed: Samples were only looked up at the path stored in the preset, appended to the folder of the preset: an absolute path was therefore never found, and on macOS and Linux, where the back-slash does not separate folders, no path of Windows either. A sample which is not at its path is now looked up by its file name next to the preset and in the folders below it, where packs keep their samples. Of 1,602 presets on the test machine 29 lost samples this way and all of them find them now: the 25 presets of the 'SOURCE Sample Pack 1' reference all their samples like
..\SOURCE\SoundFont\0- LEAD Source Triangl-0-C1.wav, andString 1of Espen Kraft'sVol. 4 Sequential Prophet VSstores its samples asF:\Nuendo\000007 Prophet VS\Samples\STRINGS\String 1 C3.wav- they lie next to it - and was not converted at all. - Fixed: The transpose of a layer was read as a tuning of its samples, but TAL-Sampler adds it to the played note before it looks up the zone which plays that note. Both layers of Espen Kraft's 'T1000 Strings' ('Digital Collection Vol. 6') are transposed by -24 semi-tones, so the key C3 plays the zone of C1 as it plays C1 - the conversion played the zone of C3 two octaves lower instead, at a quarter of the speed of its sample, which sounds slowed down and unnatural. The zones of a transposed layer are now moved on the keyboard by the transpose: rendered offline with the plug-in (4.7.2), the preset with its zones moved by 24 keys and without the transpose plays the keys G1, G2, G3 and G4 identically to the original, sample for sample. 234 of the 1,644 programs in the TAL-Sampler libraries on the test machine transpose a layer, mostly by an octave.
- Fixed: The panning and the volume of a layer were not read. 'T1000 Strings' plays its two layers detuned against each other and panned 70 % left and 81 % right, the conversion put both into the centre; 171 of the 1,644 programs pan a layer, and 303 of the 431 programs with more than one layer give their layers different volumes. The volume is read with the law which the plug-in displays, 40 log(2x) dB - 0.5 is 0 dB and 1.0 is +12 dB; measured, 0.25 plays 11.9 dB quieter than 0.5. A layer with the volume 0 keeps the level of its zones, since it is only heard through a modulation of its volume.
- Fixed: The volume of a sample was read and written as if 0.353 were -12 dB and 1.0 were +6 dB, but TAL-Sampler plays it as a linear amplitude factor: 0.7843 is 0 dB, 0.353 is -6.9 dB and 1.0 - the volume of every sample in Espen Kraft's libraries - is +2.1 dB (rendered offline at eight volumes, within 0.01 dB). The main volume of a program, 40 log(2x) dB like the volume of a layer, was not read at all, although it balances the presets of a library: Espen Kraft sets 'Kawai PHM Digi StringChoir' of 'Digital Collection Vol. 1' to -1.1 dB and 'D-50 Subdude Reso Pad' to +6.3 dB, so converted, the first played 5.0 dB louder than in TAL-Sampler and the second 2.4 dB quieter. Of the 598 presets of the eight volumes the typical one was 3.9 dB too loud, 338 by 3 to 7.6 dB, and 43 were up to 4.8 dB too quiet. Both are now read with the laws of the plug-in. When writing, the volume of a sample reaches only +2.1 dB, so the main volume and then the volume of the layers carry the gain above it, up to +26 dB: written again as a TAL-Sampler preset, 'D-50 Subdude Reso Pad' played 12.9 dB quieter than the original and now plays within 0.04 dB of it.
- New: A modulation of the filter cutoff by the modulation wheel - an entry of the modulation matrix with the source MW on the cutoff - is read and written. Espen Kraft's 'Vol. 7 Super Hybrid' builds its seven string presets on it: their filter is closed until the wheel opens it, so converted without the routing they stay closed.
- Waldorf Quantum/Iridium
- New: The modulation of the filter cutoff by the modulation wheel is read and written, with the source Wheel on the destination Filter1 Cutoff. The written slots of the matrix are now filled from the first one, the wheel first and then the pitch envelopes, the vibrato, the tremolo and the filter LFO, so a preset shows its modulations at the top of its matrix page - previously each modulation had a fixed slot and a preset with only a wheel showed it in the slot 7. The amount is the share of the range of the filter which the wheel at its top adds to the cutoff, which is how the device applies it (Iridium MK2 firmware 4.0.6); 291 of the 1,787 factory patches of an Iridium MK2 route the wheel to the cutoff this way.
- New: The Author and Bank options only take as much text as the device shows completely. Its Load Patch page shows the bank and the author of a preset in a narrow column and leaves out what does not fit - of the bank 'Digital Collection Vintage' only 'Digital Collection Vinta'. The font is proportional, so the width of the text is measured with the widths of the characters of its DIN font instead of counting characters: 'Digital Vintage Voices' (22 characters) fits, 'DW-8000 Breathy Breakup Pad' is cut after 20. On the command line a value which is too wide is reported with the part the device would show.
- New: The volume and the pan of the whole timbre (TBPIVolume, an attenuation in dB, and TBPIPan, -63..63) are read and applied on top of the settings of the partials; a timbre which the editor turned down - by up to 16 dB in the Studio G Dallas library - was converted at full level.
- New: The 'Use a second layer' option became 'Maximum number of layers' with 1 to 4 layers. With 3 or 4 layers a source with more than 6 groups is written with up to 9 or 12 multi-samples in the layout of the MK2 generation: the layer count 2, the format version 15 and always four stored layers, of which the unused ones are switched off, exactly as the Iridium MK2 stores its own patches (304 files of the corpus). The loader of the device clears the file offsets of the layers 3 and 4 in files up to the version 14, which is why four layers need the version 15; the first generation of the instruments holds two layers (its manuals) and cannot play such a file. Verified on an Iridium MK2 (OS 4.0.6): a written 4-layer patch with one sample pitch per layer plays all four pitches, a 3-layer patch with its switched-off fourth layer plays its three. Only as many layers as the groups need are used, so a source with up to 6 groups is still written as the 2-layer patch which every instrument of the family plays. The samples of all later layers are named in the first layer for the importer of the device. A setting of the old option is taken over.
- New: Round robins are written into one sample map. Entries of a map which overlap in key and velocity alternate on successive notes on the device, which is exactly a round robin; the zones of a round robin were spread over separate oscillators as if they were stacked layers, so all of them sounded at once on every note. When reading, overlapping entries of a map become a round robin. The device has no random selection, so random zones alternate as well.
- New: A monophonic source is written with the mono mode of the patch (PolyMonoMode), which is read back as well. A source with a polyphony of 1 is written with it too, and a patch in the mono mode is read with a polyphony of 1.
- New: The modulation of the filter cutoff by a low frequency oscillator is read and written, with LFO 3 on the destination Filter1 Cutoff. The device adds the amount to the cutoff without squaring it, and the full amount covers the whole range of the filter, 135 semitones (Iridium MK2 firmware 4.0.6). Verified on an Iridium MK2: +8.89 % moves the cutoff by an octave.
- New: The portamento of a source is written as the glide of the patch and read back. The device glides for 2 x GlideRate^2 seconds, the same time for every interval (Iridium MK2 firmware 4.0.6), which is what the portamento time of a source means; a legato source uses the glide type Legato. Verified on an Iridium MK2: a glide of 1 second takes 1.000 seconds over 2 and over 4 semitones.
- New: A key tracking other than 100 % which all key-tracked zones of a group share is written as the key tracking of their oscillator instead of 100 %.
- New: The key window of an oscillator (Osc{i}MinNote/MaxNote) is applied when reading: a zone outside of it is silent on the device and is dropped, a zone across its edge is cut at it.
- New: The volume, the gain and the panning of a layer (LayerVolume, LayerGain, LayerPan) are applied to the zones of the layer when reading. A layer at a LayerVolume of 0.81 - the value of one of the factory patches - is 3.7 dB quieter than its oscillators say. The laws come from the firmware of the Iridium MK2: LayerVolume follows the law of the oscillator volume (40 x log10), LayerGain adds 0 to 24 dB.
- New: A sample map with more than 1024 entries is reported. The device stores at most 1024 entries per map and drops every further one with the error 'Number of entries in sample map exceeded' (Iridium MK2 firmware 4.0.6).
- Fixed: A key map whose zones overlap was split across oscillators, which left each of them with a hole. The zones of a group are separated into layers when they overlap in key and velocity, since that is what a stack looks like - but a source sometimes gives the zones of one key map ranges which overlap slightly: the E-mu Xtreme Lead 1 'Air Age' maps its lowest sample up to key 54 while the next one starts at 43. Its five zones were spread over two oscillators, the first of which was then silent from key 55 to 71, the middle of the keyboard. Zones whose root notes and lower key limits both rise from zone to zone are now kept as the one map they are; a stack does not look like that, because its layers sound on the same notes and therefore share their lower key limit. Checked against the 1,670 groups of more than one zone in eight banks of the E-mu Xtreme Lead 1 and Planet Earth libraries: of the 570 whose zones overlap, 17 are key maps by this rule, and not one of them holds two zones with the same key range.
- Fixed: Groups which never sound at the same time were spread over the oscillators, and a source which keeps its round robins in separate groups was played with several of them at once. An SFZ file with one group per round-robin position put positions 1 and 2 on the first two oscillators, which sound on every note, and cycled only the remaining positions on the third; the Elektron Tonverk presets with round robins went the same way. Zones which never sound together - velocity layers, round robins and key ranges which follow each other - now share one sample map and one oscillator: the device selects the entry by key and velocity and alternates the entries which overlap. Only zones which do sound together on the same note, a stack of layers, still get an oscillator each, and so do groups which differ in their panning or key tracking, which only an oscillator can hold.
- Fixed: Zones which only sound on note-off (release samples) were written into the sample maps and sounded on note-on, stacked on the attack samples. The device has no release trigger for a sample map, so they are skipped now, which the log reports.
- Fixed: The attributes of a patch were written in the spelling of their source - the keywords of the analysis in lower case ('arp', 'digital'), the tags of a source pack in capitals ('KEYS', 'VINTAGE') - so the device listed 'KEYS', 'Keys' and 'keys' as three filter entries which each found a part of the sounds. Every attribute is now written in the spelling of the factory sound sets ('Keys', 'Pad', 'Arp', 'FX'; 'Atmo' for 'atmospheric', 'Drum' for 'DRUMS'), and a word the factory sets do not use is capitalized ('Vintage', 'Dark'). On a card with 1,220 converted presets 498 carried at least one attribute in another spelling.
- Fixed: A multi-sample without a zone which sounds on note-on - e.g. one of which no sample could be found - stopped the writing of its patch with 'Index 0 out of bounds for length 0'. It is now skipped with a note, like the SFZ, Kontakt and Maschine destinations do.
- Fixed: 'Snap loops which click' did not remove the loop click when the source was not recorded at 44.1 kHz. The loops were snapped in the processing stage, but this format re-samples to 44.1 kHz afterwards, which moves every boundary off the zero-crossing it was snapped to. The up-sampling is now done first: 'always re-sample' is enabled, which the processing line of the log reports. Measured over one bank of the E-mu Xtreme Lead 1 library, whose samples are recorded between 25 and 32 kHz: across its 333 loops of 4096 frames or more the jump at the loop wrap drops from 4.57% to 2.14% of the sample level on average, the loops which jump by more than a tenth of the level fall from 63 to 15, 142 loops improve and 21 get worse. On the 'Shaku High', whose 0.9 second pad loop thumped once per repeat, that loop goes from 14.4% to 0.2%. A loop shorter than 4096 frames is still left alone, since snapping a loop of a few frames would change its pitch.
- Fixed: A preset could play every key with the same pitch. The sample maps were written without the line feed and the NUL byte with which the device ends every map it writes, and the device does not stop reading a map at its length: it appended the digits which followed the map in its memory to the Track Pitch flag of the last entry - presets which an Iridium MK2 saved again carry values such as 10, 19 or 1000000 there instead of 1. Such an entry no longer tracks the keyboard; 6 of 12 converted single-sample presets of one pack were affected, and which ones depended on the memory of the device and not on the files. Every sample map now ends like the maps of the device.
- Fixed: Nearly every sample start and loop point was one frame early on the device, and a loop which starts at the beginning of its sample was one frame short. The positions of a sample map are fractions of the sample, and the firmware converts them with the last frame as 1.0 - frame = (int) (0.001 + (frames - 1) x fraction) in single precision - while they were written and read as fractions of the number of frames. They are now written as the middle of the frame on that scale, which the device converts into exactly the intended frame, and read the way the device converts them. The sample end is written as the last frame, which the device plays.
- Fixed: A key or velocity range which the source did not set was written into the sample map as -1, which the device takes over as the range of the entry, so the entry never played - it had to be set to 0-127 on the device. Such a range is now written as the full range, as the distribution of the zones across the layers already assumed. The lowest velocity of a range is written as 0 instead of 1, like in the patches of the device, since the device plays a very soft note with the velocity 0.
- Fixed: A velocity which is written as a fraction of the range (0.5 instead of 63), which the device accepts, stopped the reading of the patch with a number format error. It is now read the way the device reads it.
- Fixed: The cutoff of the filter was written with the normalized parameter value as its display text, so the device listed a patch with a cutoff of e.g. 61.7 Hz as '0.2592 Hz'. A cutoff at the top of the range of the model (20,000 Hz) also wrote a parameter value slightly above the 1.0 the device expects; it is now limited to the 19,912.2 Hz of the device.
- Fixed: Pitch envelopes and vibratos were written far too shallow and read far too deep. The device squares the amount of a matrix slot which modulates a pitch before it applies it, keeping its sign, and multiplies the result with 24 semitones (Iridium MK2 firmware 4.0.6): an amount of 50 % raises the pitch by 6 semitones, not by 12, and the amount which was written for a vibrato of 50 cents plays one of about 1 cent. The amounts are now written and read with the law of the device. The vibratos which the factory patches put on the modulation wheel, 11 to 20 %, are 29 to 96 cents with it. Verified on an Iridium MK2 (OS 4.0.6): an oscillator modulated at +50 % plays 6.00 semitones above an unmodulated one, and a converted vibrato of 50 cents swings +/-49.97 cents, where the previous conversion swings +/-1.04 cents.
- Fixed: Every attack, decay and release was played 60 ms shorter than the source asked for, and a stage shorter than 60 ms was written as instant. The sound engine plays the value x of such a stage as 60 x 10^(3 (x - 1)) - 0.06 seconds, while the display of the device shows 60 x 10^(3 (x - 1)) - 0.001 seconds - the law which was used. Measured on an Iridium MK2 with OS 4.0.6: stages written for 0.07, 0.1, 0.25, 0.5, 1 and 2 seconds took 0.011, 0.041, 0.190, 0.441, 0.940 and 1.940 seconds, alike for the attack, the decay and the release. The times are now written and read with the law of the sound engine. The shortest amplitude attack and release which avoid a click stay at the 10 ms which the device played before.
- Fixed: The decay of a pitch envelope was lost when the source did not set a start level. Such an envelope was written like one which starts at a level: no attack, and the attack time of the source as its decay. An SFZ pitch drop over 0.5 seconds arrived as an instant blip. Only an envelope with a start level above 0 is written that way now. Verified on an Iridium MK2: the converted pitch drop starts every note an octave high and slides down in a straight line, where the previous conversion plays the note at its pitch from the start.
- Fixed: The tremolo of a patch written by an older firmware was not found, and a slot which modulates another destination with the index 117 could be read as a tremolo. The list of matrix destinations grew with the firmware - the VCA is 107 up to the format version 13, 108 in version 14 and 117 in version 15 - and the device resolves a destination by the name in the hint of the parameter (Iridium MK2 firmware 4.0.6). Destinations are now read by their name, by the index of the format version if the hint is empty, and written with the index of the written version.
- Fixed: A patch written with the second layer enabled did not play the samples of that layer. When the device imports a patch, it copies the samples into its memory, but it collects them from the sample maps of the first layer only - the importer reads the resource table of the first header of the file and walks its maps (Iridium MK2 firmware 4.0.6, PatchLib::importPatch). A sample which only a later layer names is never copied, and when the patch is loaded that layer reports 'loading samples//.wav failed' and stays silent - which an Iridium MK2 showed for every two-layer patch whose second layer brought samples of its own, while a second layer which re-uses the samples of the first played. Of the 104 two-layer patches which the E-mu Xtreme Lead 1 library produces, 85 bring samples of their own into the second layer. The first layer now names every such sample in an additional entry which never plays - its velocity window is 0 to 0, which no note-on reaches, its gain is 0 and it covers only the key 0 - so the importer copies it. When reading, such an entry is skipped. Verified on an Iridium MK2 (OS 4.0.6): a two-layer test patch whose second layer brings a sample of its own plays both layers after the import, while the same patch without the entry fails with 'loading samples/.../L2_saw_octave.wav failed'.
- Fixed: The 'Exp alt' curve of a decay or a release was written with the value 0.5 instead of its option index 1. The device rounds the value of an enumeration to the nearest option when it shows its name, which made the written value look right, while what its sound engine makes of a value between two options is not known. The exact index is written now.
- Fixed: An entry of a sample map which does not follow the keyboard (Track Pitch 0) was read as tracking it: the key tracking of the oscillator replaced the flag of the entry. The flag is now kept - an entry which the device plays at a fixed pitch stays at a fixed pitch, only a tracking entry gets the tracking amount of the oscillator. Only the value 1 tracks the keyboard on the device; the value 2 plays the entry at the pitch of its pitch column whatever the key is, and the digits which the device appends behind a map without a terminator (10, 19, 1000000) play at a fixed pitch as well, so every value other than 1 is read as a fixed pitch.
- Fixed: A preset whose name was already in the destination folder got a counter in its file name (e.g. 'Bass 2 (2).qpat'), but its samples were written into the sample folder of the first preset, where samples of the same name overwrote those of the first preset - which then played the audio of the second one. The sample folder now carries the same counter as the file name.