github git-moss/ConvertWithMoss 20.2.0
ConvertWithMoss 20.2.0

2 hours ago
  • New: Added support for the ISLA Instruments S2400 kit format (KIT). Each pad of a kit becomes one zone mapped to a MIDI note (A1 is note 36, as in the default sample track MIDI map), carrying its sample, gain, fine tuning, choke group, filter (low/band/high-pass with its cutoff in Hertz and resonance) and HiFi volume envelope; loops are read from and written to the WAV 'smpl' chunk, where the device stores them. Writing creates the kit folder with the kit file named after it and one WAV per pad in the device native 48 kHz / 16-bit format. The format was reverse-engineered from the official S2400 Kit Builder web application since the device firmware is encrypted - not yet verified on real hardware.
  • New: Added support for the E-mu Emulator II (IMG, EMUIIFD, HFE). One disk becomes one multi-sample: the key map of the bank gives the zones with their key ranges and root keys and each voice its name, its loop and its audio, which is expanded from the companded bytes the sampler feeds to its AM6072 DAC. A bank which is larger than one floppy is reported as continuing on another disk. Read only.
  • New: Added support for the Roland S-10/S-220/MKS-100 System Exclusive files (*.syx) - read only
  • New: The Analyse run can log for every found multi-sample what it contains (option "Log analysis details", on the command line -ad): the mapping of its zones with their sample format, loops with their cross-fades, envelopes, LFOs and the filter with its modulators. Only attributes which a source actually uses are logged, so searching the log finds the sources which use a specific feature - e.g. all presets of a library with a filter envelope, a loop cross-fade or a release trigger. The details describe the source as it was read, before any processing is applied.
  • New: A note is logged when a loop of a converted preset audibly clicks at its wrap-around point (the step back to the loop start is many times the normal movement of the waveform and a substantial part of the level). Sample libraries ship such loops surprisingly often - 17 of 152 presets across three commercial Ensoniq libraries - and without the note the first hint is the converted preset ticking on the destination device. Nothing is changed: the loop is written as the source authored it, and the note points to the snap-to-zero-crossing and loop cross-fade processing options which remove such clicks. A loop which already has a cross-fade is not reported.
  • New: A note is logged when samples are re-sampled because the destination format does not support their sample rate or bit resolution - e.g. a 24 bit / 48 kHz sample which is written as a Waldorf Quantum/Iridium preset with its 'Re-sample to 16bit/44.1kHz' option enabled, or written for a device whose hardware dictates the format of its samples. So far this conversion happened silently and the log gave no hint that the created preset does not contain the audio of the source unchanged; the note states the source format and the format it becomes. Each distinct conversion is logged once per run.
  • New: Added several new tags for better category detection.
  • Fixed: The sample and program files which a preset references are now looked up ignoring the upper/lower case of their name. Sampler file systems are case-insensitive and their CD-ROMs store all names in upper case, but a preset might well reference them in lower case. On a case-sensitive file system, which is the normal case on Linux, none of those samples could be found (e.g. 'STR SEC.6 -L.WAV' referenced as 'STR SEC.6 -L.wav'). This affects the Akai S5000/S6000 (AKP/AKM), Akai MESA, Akai MPC and MPC1000, FL Studio DirectWave, Teenage Engineering OP-XY and Synclavier Regen formats as well as all formats which use the common sample search (Ableton, Deluge, EXS24, NI Kontakt, NI Maschine, 1010music, SXT and TX16Wx) - the latter did only try the file ending in all upper and all lower case, so a name which differs in its case anywhere else was still not found.
  • Fixed: When a sample was not found next to its preset, the search jumped the configured number of folder levels up in one go and took whatever the recursive search found first. Two libraries below the same folder which name their samples alike - the normal case for the variants of a library - then fed a preset the sample of the other library, which sounds wrong and, since the preset keeps its own loop points, clicks at the loop. The search now goes up one level at a time and stops at the first level which contains the file, so a sample close to the preset always wins over one of the same name further away.
  • Fixed: The category names 'Winds' and 'World' were not detected when they were read back from a preset which stores the category as text: 'Winds' was detected as FX - from the 'Wind' sound effect - and 'World' was not detected at all. The name of a category is now a keyword of its own, which is checked for all of them.
  • Fixed: Samples which are converted to the sample rate of the destination format (the conversions the re-sampling note reports) are now converted with the same band-limited resampler which the sample processing options use. The Java sound converter used before produced a slightly wrong number of frames - 88204 instead of exactly 88200 when a 2 second 48 kHz sample becomes 44.1 kHz - which stretches the audio against the sample and loop positions that are re-calculated with the exact rate ratio. A loop which wraps perfectly in the source then steps at its wrap-around point, the more the longer the loop is: measured on a 200 Hz sine with a 1.5 second loop, the step was 4.5% of the peak level and is 0.04% now. Up- and down-sampling also gain the band-limiting of that resampler, which the Java converter does not have.
  • Fixed: An option which is enabled by default in the user interface was disabled when the conversion was started from the command line without giving that option. The command line only tested the value of a parameter, so an absent parameter always meant 'off', while the check-box of the same option is ticked in the user interface - the identical conversion therefore produced a different result depending on how it was started. Twelve options across eleven formats were affected, among them 'Re-sample to 16bit/44.1kHz' of the Waldorf Quantum/Iridium and 'Re-sample to 24bit/48kHz' of the Elektron Tonverk and the 1010music formats. Converting the Elektron Tonverk factory library to a Waldorf Quantum/Iridium preset from the command line wrote 1554 samples which the device cannot play: the library ships 64 bit float files and single-cycle waveforms whose pitch the Tonverk stores as a sample rate of up to 12 MHz, and without the re-sampling both were passed through unchanged. A parameter which is not given now keeps the default of its option.
  • Backend
    • New: Added transpose, tuning, gain and panning attributes to performances (1010music bento/blackbox, Akai AKM, NI Kontakt 1, Roland S-7xx, TX16w, Yamaha Montage/MODX).
    • New: Improved setting of MIDI channels, with distinct values for OFF and OMNI for all performances.
    • Fixed: An error while one preset of a source file was converted ended the conversion of that whole file, so that every preset after it was silently lost - a disk image, a bank or a library delivers all of its presets from one read. The error is now reported with the name of the preset which caused it and with its stack, and the source is continued with the next preset. The same applies to performances.
  • User Interface
    • Improved: The audition of the Contents dialog holds the note as long as the sound needs to show its character instead of fixed 2 seconds: through the delay, attack and decay of its amplitude envelope, dwelling on the sustain, or until the body of its longest sample was heard once (an evolving texture or a phrase which only loops near its end) - at most 6 seconds. A sound which decays to silence is held through its whole decay, so nothing of its natural tail is cut off; short one-shots still end at their sample end as before.
    • New: Contents dialog: A preset which shares its name with another preset in the same folder of the tree additionally shows the index which addresses it inside its file, e.g. 'Soul Ah's (#12, 21 zones, C1-C6)'. Sample library CD-ROMs re-use a name for a variant of a preset more often than one would expect - the 'Emulator Standards' library of the E-mu Emulator III does so in 45 of its banks, where the bank 'Soul Ahs' holds two presets called 'Soul Ah's' which differ in their velocity sensitivity - and those rows were indistinguishable, so it was not possible to tell which of them to tick. The index is the one the exported list writes and by which the imported list selects a preset, so the tree and the list address the same preset. A name which is unique in its folder is shown unchanged.
    • New: Contents dialog: The new 'Export List...' button writes the listed presets - not the presets themselves - as a CSV or JSON file with the name, category, number of zones, key range (as note names and MIDI note numbers), folder, file, containers, index inside of the file and the ticked state of each of them. This gives an inventory of a disk image, a bank or a preset folder which can be used in a spreadsheet or a script. A search filter applies to the written list as well.
    • New: Contents dialog: The new 'Import List...' button reads such a list back in and ticks exactly the presets which it selects, so the presets to convert can be picked in another application: export the list, tick the presets in e.g. a spreadsheet, save it as CSV again and import it. A row selects its preset when its 'Selected' field says so ('true', 'x', '1' or 'yes'); a list without that field selects every preset it contains, so deleting rows works as well. Presets are matched by their file and their index inside of it, which tells presets of the same name in different banks apart and still finds a library which was moved to another folder.
  • Akai MPC
    • Fixed: The Version element was created but never added to a written XPM file. Since it is the element by which the format is recognized, such a file was rejected when it was read back ("Could not read metadata: Unknown Root"). The platform is now written as well, so that the version log line is complete.
  • Akai S-900
    • New: Reading of missing filter parameters (envelope, velocity mod., key-tracking), pitch LFO and envelope.
    • Fixed: The amplitude envelope and pitch key-tracking were read from the wrong bytes.
    • Fixed: Referenced samples can be on a continuation disk. For disks which point to a missing samples a continuation disk is searched in the same folder.
    • Fixed: Improved logging.
    • Fixed: The filter cutoff is now converted with the law of the sampler instead of a straight line over its range. The S900 does not filter digitally: each of its 8 voices runs through an analog switched-capacitor low-pass (MF6CN-50, a 6th order Butterworth) whose corner sits at a fixed fraction of the clock it is fed with, and that clock is a timer counter which the operating system loads with a divider it looks up with the setting. The scale follows from what the sampler does when it records: its block diagram sets the same filter to 0.4 times the sampling frequency while its operating system loads the divider with 80000/frequency, which fixes the cut-off at 32000/divider. The setting is scaled, offset and clipped to the range of that table, so the filter is fully closed below a setting of 24, fully open from 76 upwards, and follows a curve in between: setting 50 is 889 Hz and not 10.1 kHz, setting 70 is 4 kHz and not 14.1 kHz. Measured over the SL5000 factory library (20 disks, 71 programs, 209 filters) the cut-offs move from a range of 9.3-19.6 kHz to 0.7-6.4 kHz - the sampler is a good deal darker than a linear reading of the setting suggests, which is a large part of its character.
  • Akai S-1000/S-3000
    • New: Programs of a volume which share their MIDI program number (on the same MIDI channel) are combined into one multi-sample with one group per program. Selecting that program number on the sampler activates all of them, so they always sound layered - many CD-ROMs build their final patches this way from 2 or 3 component programs, which each sounded like a bare fragment when they were converted one by one (e.g. 'DIGIJAZZ A' + 'DIGIJAZZ B' of East West's Twisted Textures, a bright and a dark layer, become the multi-sample 'DIGIJAZZ'). Each program keeps its own envelopes, filter and volume in its group, and the combination can be seen on the multi-sample itself: it is named after the programs it combines and every one of them becomes a group which carries its name.
    • Fixed: Ignore undefined volumes (type 0xFFFFE5E5) and continue conversion.
    • Fixed: Images with broken sample or program data blocks can now be read. Conversion does not stop but continues with also improved error logging.
    • Fixed: The loudness of a program and the loudness offset of a key-group sample are now converted with the scale of the sound hardware, which spans 60.5 dB over its range in steps of 0.237 dB. The program loudness was read as a fraction of full level (90 of 99 became -0.8 dB where the sampler plays it 6.2 dB down) and the offset of a key-group sample was assumed to span +/-6 dB where it actually spans +/-30 dB. Both errors flatten the balance a sound designer set between the layers of a preset: the two programs of 'JAZZNSPACE' in East West's Twisted Textures are 18.3 dB apart on the sampler and were 3.3 dB apart after conversion, which put the bright layer far in front of the sound instead of behind it.
    • Fixed: The envelope of the loudness is now shaped the way the sound hardware moves it. The level of a voice is an index into the gain table of the sampler, which is exponential with a step of 0.237 dB, and the operating system adds the rate of the envelope to that index - a stage is therefore a straight line in decibel and a curve in loudness. It was written as a straight line in loudness, which keeps a note near its full level for most of the stage and then drops it: the electric piano of 'DIGIJAZZ', whose decay is 9.5 seconds, reached -6 dB after 4.7 seconds and -20 dB after 8.6, where the sampler is 6 dB down after 0.9 seconds and 20 dB down after 3.1 - it did not sound like a piano at all. The envelope of the filter is deliberately left as it is, since its index addresses the cut-off table, which is exponential in frequency, so a straight line there already is one in the cut-off of the destination.
    • Fixed: The sustain of an envelope is now converted with the same loudness scale. It is not a share of the level but an attenuation: the sampler scales the parameter with its loudness table and subtracts the remainder to the full level from the index into its gain table while a note is held. A sustain of 50 therefore does not hold a note at half of its level but 30.4 dB below it, which is 3 %. Read as half the level such a note sits about 24 dB too loud and the difference a sound designer set between the layers of a preset disappears. Measured over a commercial CD-ROM 2975 of its 5975 amplitude envelopes change, 242 of them by more than 6 dB and the largest by 15.4 dB.
    • Fixed: The filter cut-off is now converted with the law of the sampler instead of a straight line over its range. The filter setting is scaled to the range of the sound hardware and looks up the coefficient of the three one-pole stages which form the 18dB/octave low-pass, which places the middle of the range far lower than a linear reading suggests: setting 43 is 306 Hz and not 8.7 kHz, setting 53 is 627 Hz and not 10.7 kHz. Converted presets were therefore up to 5 octaves too bright - the filter of a dark, evolving layer did nothing at all, so a preset which layers a bright and a dark program (the way most S1000 CD-ROMs build their sounds) converted with both layers wide open.
    • Fixed: The times of the two ADSR envelopes are now converted with the rate table of the sampler instead of a straight line over the range of a setting. The sound hardware moves an envelope at a rate which the operating system looks up with '99 - setting', and those rates span a range of 16384 to 1 - a setting of 60 is therefore not 'a bit above half of the maximum time' but a small fraction of it. The same table serves the attack, the decay and the release of both envelopes, so the separate maxima which were assumed for them (2 seconds for the attack and the release, 6 seconds for the decay) do not exist either. Measured over two commercial libraries the settings which are actually used sit between 30 and 86, where the old law was up to seven times too long in the middle of the range and up to twenty times too short at its end: the electric piano of 'DIGIJAZZ' now decays over 9.5 seconds and releases in 0.11 seconds, as an electric piano does, instead of decaying in 5.0 seconds and releasing in 0.75.
    • Fixed: Do not report samples for key-groups with upper velocity set to zero. These are used creatively by some companies to add their copyright info to each key-group.
    • Fixed: Samples which were recorded at 22050Hz were read with a sample rate of 0Hz. The sampler fills in the exact sample rate only for the samples it records at 44100Hz and marks the 22050Hz ones solely by an index at the start of the sample header, which was not read. Such a sample was written as an unplayable file which claims a sample rate of 0Hz and, with the sample rate processing option enabled, made the conversion fail - which stopped the whole disk image, so that all presets after it were lost (32 of the 124 presets of a commercial CD-ROM).
    • Fixed: Zones with an upper velocity of 0 are skipped entirely. A velocity of 0 is a note-off, so such a zone can never be triggered - they mute the layers which belong to the partner program of a layered stack (and carry the copyright info, see above). Before, they became dead zones on the destination and the audition played them as always-on, which doubled the layers.
  • Audiomodern Soundbox
    • New: Added reading/writing of category.
  • Bliss
    • Fixed: A zone with a trimmed sample start was re-sampled to exactly 96 kHz (the maximum rate of the format was applied as a fixed rate, up-sampling included). Worse, the trim positions count in frames of the source rate, so after the up-sampling they pointed at the wrong place and cut the later part of the sample audio away. The samples now keep their rate; only the actual limits of the format are enforced - a rate above 96 kHz or a bit resolution which the format does not store (e.g. 8 bit) is converted, and this now also happens for zones which are not trimmed, whose samples went into the file unchanged before.
  • Casio FZ
    • Fixed: The filter cut-off is now converted with the law of the filter chips instead of an assumed exponential curve. The value which a voice stores is not what the chips receive: the sampler adds 32 to it before it writes the result as an 8 bit code, so the range of the value covers exactly the codes 32 to 159 - and 159 is both the code the sampler initializes its filters with and the point its own documentation calls fully open, which is the confirmation that the offset is right. The frequencies of those codes follow three linear sections rather than an exponential curve (20 Hz at code 0 and 20 kHz at code 159 from the service manual, 4.5 kHz at code 108 and 9 kHz at code 124 from the anti-aliasing filters the sampler itself selects). Converted presets were therefore far too dark: measured over the FZ-1 factory library (12 disks, 153 programs, 1221 filtered zones) the cut-offs move from a range of 89 Hz - 11 kHz to 2.5 - 17.2 kHz, which is 1.9 octaves at the median.
    • Fixed: The times of the 8-stage envelopes are now converted with the increment table of the sampler instead of an assumed law. The sampler advances an envelope by an amount which it looks up with the rate of the stage, 500 times a second, and those increments span 3 to 32767 - the times are therefore not a curve which halves every 8 rates as was assumed. The error is largest in the middle of the range, where the settings of real voices sit: a rate of 16 is 0.47 seconds and not 15, a rate of 32 is 0.14 seconds and not 3.75, and only at the very top of the range do the two agree. Measured over the FZ-1 factory library (12 disks, 153 programs, 674 envelopes) the amplitude decays drop from a maximum of 2.8 to 0.84 seconds and the releases from 6.3 to 0.85 - the brass ensemble of 'BRASS ENS 1' decays in 0.11 seconds and releases in 0.08, where it was 0.84 and 0.16 before.
  • CWITEC TX16Wx
    • New: Added support for bank output (*.txbank). Select 'Preset Library' as destination output.
  • DecentSampler
    • Fixed: The command line parameters 'DecentSamplerTemplateFolderPath' and 'DecentSamplerAddFilterToGroups' were read into each other's setting: the template folder path was taken from the add-filter parameter and the add-filter flag from the path. Giving a template folder on the command line therefore never reached the creator - it set the filter flag to false instead, since a path is not '1' - and giving the filter flag put the literal value into the template path. Neither option could be used from the command line; the user interface was not affected. The add-filter option now also keeps its default of enabled when its parameter is not given.
  • E-mu Emulator III/IIIX/ESI
    • Fixed: Reading a CD-ROM or hard disk image kept its own copy of the audio of a sample for every zone which plays it. The presets of a bank map the same samples over and over - the first volume of the 'Emulator Standards' library plays 1480 samples from 25580 zones - so an image was expanded to many times its size while it was read: that 304 MB volume held 3.5 GB of audio instead of the 192 MB it contains, and the conversion ended with 'Java heap space' and no presets at all on a machine whose Java heap is smaller than that. The audio of a sample is now decoded once and shared by all zones which play it, whether they belong to the same preset or not, which is what the samplers themselves do. Reading that volume now holds 192 MB and finishes in a 512 MB heap.
  • Fairlight CMI
    • Fixed: Reading a Voice file whose version is not recognized wrote a copy of that file into a hard-coded folder of the developer's machine which did crash the conversion.
  • FL Studio DirectWave
    • Fixed: Monolithic programs whose samples are stored uncompressed could not be read ("None of the samples of the program could be found next to the DWP file and it contains no embedded sample data"). DirectWave writes the embedded audio of a monolithic program either FLAC compressed or, in older versions, as uncompressed PCM in a block of its own; only the FLAC variant was recognized. The uncompressed block stores the channels one after the other instead of interleaved.
    • Fixed: The embedded audio of a monolithic program is stored with 256 frames of silence before the sample and 256 after it, and the loop points of DirectWave do not count the leading silence. The silence was kept when such a program was read, so every sample started 5.8 ms late and its loop sat 256 frames early in the audio - silent on the perfectly periodic synthesizer loops of the library this was verified with, a click on anything sampled. Written programs padded the audio at the end only, so DirectWave skipped the first 5.8 ms of every sample and looped 256 frames late. Both now use the layout of the plug-in.
  • ISO File
    • Fixed: An image of the E-mu disk file system was read twice, once for each of the two E-mu formats which share that file system (Emulator III and EOS) since neither of them can read the banks of the other. Reading the files of an image reads all of their content, so a full library CD-ROM was loaded a second time only to find that it holds no bank of the second format. The image is now read once and both formats are offered its files.
  • Roland MV-8000
    • Fixed: A written patch loaded on the device but was silent, and the device showed a start point, loop start and end point of 0 for every sample. The hardware plays - and displays - the three points which are stored in the SMT slot of a partial, not the ones of the sample parameter block, and only the latter were written. The slot points are written now; the 103 factory patches carry identical values in both places in all of their 1918 slots. Reading prefers the slot points as well, so a patch whose points were edited on the device converts with the points it actually plays.
    • Fixed: The wave data of a written sample now keeps 2 frames behind its end point, as the device does for every sample it writes itself - none of the 1918 samples of the factory patches ends closer to the end of its data. A sample whose end point sat at the last frame of its data (a one-shot which plays to its very end, e.g. every sample of an Akai S1000 program whose end marker is its last frame) is padded with 2 frames of silence.
    • Fixed: The envelope times are now converted with the time table of the sound engine instead of a formula borrowed from the S-7xx series. Every time is a 0-127 setting which the engine looks up in a 128 entry table, and that table sits in the firmware of both machines - at offset 0xB63EE of the S-760 system disk and 0x50538C of the decompressed MV-8000 operating system, with all 127 overlapping entries identical, which is also what shows that the MV-8000 runs the S-7xx sound engine and not the XV one whose category list it borrows. Its unit follows from the S-760 owner's manual, which documents the LFO delay - a 0-127 setting like the envelope times - as covering "0.01 - 22 sec": the table runs 30 to 65535, so an entry is 1/3000 second and the range is 0.0100 to 21.845 seconds, matching both ends of the documented range within one percent. The formula used before spans only 64:1 and cannot express anything below 302 ms, so it was up to 29 times too slow where the music is - a setting of 1 is 0.011 s and not 0.313 s, and 15, the median of the factory patches, is 0.025 s and not 0.496 s - and agreed only near the top of the range. The electric piano of the factory patch 'Mark V' now attacks in 0.011 s and releases in 0.016 s, as an electric piano does, instead of taking 0.3 s to do either.
  • Roland S-7xx
    • Fixed: The envelope times are now converted with the same table, which is the sampler's own; the formula used before was an uncalibrated approximation of it with the same 29-fold error at the fast end.
  • Teenage Engineering OP-XY
    • Fixed: The samples which do not make it into the written preset - the dropped velocity layers and the regions beyond the maximum of 24 - were still copied into the preset folder, although the description file does not reference them. They only occupied space on the device and could make the preset folder too big to load. Only the samples of the written regions are stored now.
  • Waldorf Quantum/Iridium
    • New: All layers of a preset are read instead of only the first two. The MK2 generation of the instruments stores 4 layers where the first one stores 2, and it always writes all four of them with the unused ones switched off; a layer which is switched off or which does not play samples is now reported and skipped instead of being converted or, as before, taking the whole preset down with it.
    • New: A written preset can use a second layer ('Use a second layer for more than 3 groups', on the command line QPATUseSecondLayer=1). Each layer has 3 oscillators with a multi-sample of its own, so a preset holds up to 6 multi-samples instead of 3 and a source with more groups no longer has to merge them all into the last oscillator; the second set of groups also gets its own filter and amplitude envelope, which the oscillators of one layer have to share. Two layers are stored the same way by every instrument of the family, from the Quantum to the Iridium MK2. Only sounds which are meant to be heard together are put into a separate layer: the device has no velocity range for a layer, so a velocity split stays inside the sample maps. Disabled by default, which writes exactly what previous versions wrote. Verified on an Iridium MK2: a written two-layer preset loads and its second layer carries its own filter and its own amplitude envelope, and the oscillators which are not written stay off instead of keeping what the previously loaded preset had.
    • New: A vibrato and a tremolo of the source are now written and read back - this was the last of the larger formats without them. The device has 6 low frequency oscillators and 40 modulation matrix slots, of which the slots 1-3 already carry the pitch envelopes of the 3 oscillators, so the vibrato takes the slot 4 and the tremolo the slot 5 and the slots 6-40 as well as the LFOs 3-6 stay untouched for the user. The vibrato drives the destination 'Pitch', which moves all three oscillators with a single slot instead of one slot per oscillator - a vibrato of a multi-sample belongs to the whole instrument and not to one of its layers. The tremolo drives the destination 'VCA' from the full level of the amplifier downwards with a unipolar oscillator, so that it attenuates instead of being pressed against the upper end of the amplifier for half of every cycle; its depth uses the loudness law of the device, where the full depth of the model (96 dB) is the swing from the full level down to silence. The waveform, rate, delay and fade-in are converted with the laws of the sound engine, which were read from the firmware of an Iridium MK2: the rate is 1/240 Hz + (100 Hz - 1/240 Hz) * x^4, which gives at the middle of its range the 6.25 Hz that the manual documents as the default, and the delay and the fade-in are 20 * x^2 and 10 * x^2 seconds. An oscillator of a read preset which runs on the tempo of the song is skipped, since a multi-sample carries no tempo with which its note lengths could be converted into Hertz.
    • Fixed: A preset whose second layer does not play samples - a wave-table or virtual-analog layer next to a sampled one - was dropped completely, including the layer which did have samples ("Preset is not sample based"). 6 of the 16 two-layer presets of one factory folder were lost this way. Such a layer is now skipped and the sampled ones are converted.
    • Fixed: A preset which contains a resource of an unknown type could not be read at all ("Unknown resource type"). The MK2 stores its parameter sequence in such a resource, so every MK2 preset which uses one was lost. Unknown resource types are now reported and skipped, and the message finally names the type.
    • Fixed: The instrument on which a preset was saved was logged as 'null' for the Iridium MK2, and the layer mode was taken from a header field which only holds a meaningful value when the preset really has more than one layer, so single-layer presets were logged with a random mode.
    • Fixed: Presets clicked when a key was released if the source left the amplitude release unset. An unset release becomes zero when it is clamped into range, and the de-click minimum was only applied to a release which is already greater than zero - so exactly the instant release which the minimum exists to prevent was written through unchanged. A release of zero gates the VCA off in a single sample and cuts the waveform wherever it stands, which for a looped zone is at full level, so the preset clicked on every key release. The minimum is now applied to the amplitude release whether or not the source set one. The attack is unchanged: it still passes a zero through, since a sample starts from silence at its own beginning.
    • Fixed: The depth of a pitch envelope was converted on the wrong scale, in both directions. A depth of the model covers 12000 cent while one slot of the modulation matrix reaches 24 semi-tones, but the conversion treated the model as if it covered 4800 cent. Writing therefore made every pitch envelope 2.5 times too shallow - a source which sweeps 756 cent was written as an amount of -12.60 %, which the device plays as 302 cent - and reading made every one of them 2.5 times too deep, so a preset of the device whose slot stands at +50 %, and which the device plays as +12 semi-tones, was read as 3000 cent instead of 1200. The two errors mirror each other exactly, which is why a round-trip through the format looked correct and only the sound of the device gave it away. Of the 1292 zones which carry a pitch envelope on the E-mu Emulator III 'Emulator Standards' CD-ROM, 927 change what the device plays and the remaining 365 ask for more pitch than the device can reach at all and stay at the end of its range. The vibrato uses the same conversion, so both now agree.
    • Fixed: A percussive sound lost its attack. The instant attack which such a source asks for gates the VCA open in one sample, which clicks, so every short amplitude attack was lifted to the shortest length the device can play - and that erases the strike of a drum, a plucked string or a piano. The audio is now inspected: the stage is only lifted when the first sample of a zone is far enough from zero to be heard as a click (2 % of its own peak, the same ratio at which a loop wrap becomes audible), and a source which fades in from silence keeps its instant attack. The device itself uses an attack of zero in 35 % of its factory presets.
    • Fixed: The key tracking of the filter was written at twice the intended amount. The parameter spans -200 % to +200 % - the same scale the key tracking of an oscillator uses, where +100 % is the 1:1 tracking of the manual - but it was written over -100 % to +100 %, so a source which tracks the keyboard fully ended up at +200 % on the device (verified on an Iridium MK2). Such a preset opens its filter twice as far towards the top of the keyboard as the source does, and since the cut-off runs into its limit early the upper half of the range sounds equally bright. Reading is corrected the same way, which affects the presets of the device itself: a filter key tracking read from a preset was half of what the device shows.
    • Fixed: A layer which the source pans as a whole is now panned on the oscillator which plays it. The panning of the single entries of a sample map is ignored by the device, so a preset which places its layers left and right - the way samplers build a wide, detuned sound, e.g. 'DIGIPAD ST' of East West's Twisted Textures, whose two layers sit hard left and hard right six cents apart - collapsed to the centre. Layers whose zones are not panned alike are left in the centre as before, and of 264 oscillators across a converted CD-ROM 166 stay centred while the presets which gain a panning are the ones whose names announce a stereo spread.
    • Fixed: Reading a preset shifted the sample start/end and loop points of many zones one frame down. The positions are stored as a fraction of the sample length with 8 decimal places, which can land marginally below the exact frame boundary (frame 3977 of 5469 is written as 0.72718961, and 0.72718961 * 5469 = 3976.9999787); the fraction was truncated instead of rounded, which loses one frame for every such position - on a converted card of 165 presets, 759 of 2270 loop positions were affected. The device's own exported presets write fractions which land marginally below the frame the same way, so rounding to the nearest frame is also what the device does when it reads them.
    • Fixed: The attributes of a written preset - the device lists them next to the preset name and filters the patches by them - now use the wording of the factory sound sets: 'Keys' instead of 'Keyboard', 'Bells' instead of 'Bell', 'Percussive' instead of 'Percussion', 'Loop' instead of 'Loops' and so on. Both words ended up in the filter list of the device otherwise, each of them finding only a part of the sounds.
    • Fixed: A preset whose category could not be detected wrote the word 'Unknown' into the first attribute, which fills the filter list of the device with an entry that says nothing. The attribute is left empty now, like the factory sound sets do. A keyword which repeats the category is no longer written a second time.
  • Yamaha YSFC
    • Fixed: The play start, loop start and loop end of a written library still counted in frames of the source sample rate, although the audio itself is always converted to 44.1 kHz. For a 48 kHz source - e.g. every sample of a Korg Trinity KMP multi-sample - each position landed about 9% too far into the sample and the loop end that far beyond the end of the sample data, which clicks on every loop pass. The positions are now re-calculated to the destination rate, as the other creators with a fixed destination rate do.

Don't miss a new ConvertWithMoss release

NewReleases is sending notifications on new releases.