- Many thanks to Douglas Carmichael for plenty of contributions and fixes!
- New: Added support for the FL Studio DirectWave format (reading of DWP programs with their key/velocity ranges, gain, panning, loops, amplitude envelope, filter and the pitch and volume LFOs, including monolithic programs which carry all their samples inside of the file; the mapping of DWB banks and of sampled plug-ins is reconstructed from the names of their sample files; written programs are always monolithic, i.e. one self-contained file per instrument which stores all of its samples as FLAC compressed audio).
- New: Added support for the Teenage Engineering OP-XY multi-sample preset format (reading and writing of the *.preset folders with their patch.json description file, including the loop with its release behavior and cross-fade and the velocity sensitivity of the engine).
- New: Added support for the Casio FZ-1/FZ-10M/FZ-20M format (reading of floppy disk images (IMG, HFE) and bare dump files (FZF, FZV, FZB - including the head-less layout of the 'fzdump' utility, in which the circulating libraries like the factory library come) with banks, voices, loops, envelopes and filters; writing creates a ready-to-use floppy disk image with a full dump, e.g. for a Gotek/HxC floppy emulator - not yet verified on real hardware).
- New: Added support for the Audiomodern Soundbox format (reading and writing of sound packs (SBPACK): every preset of a pack becomes one multi-sample with the key/velocity ranges, root notes, sample start/end, loops with cross-fade (also ping-pong), reverse flag, volume, panning and tuning of its sounds and the volume, panning, tuning and amplitude envelope of the layers folded in; round robin layers are read as round robin groups and round robin groups are written as round robin layers; a filter in one of the effect slots becomes the filter of the zones and the voice mode and glide become the polyphony and portamento; writing creates one pack with one preset per source and stores identical samples only once - import the written pack into the plug-in, verified with Soundbox 1.2.1).
- User Interface
- New: The folder/file history does now remember the selected source format for the folder/file and restores it on selection.
- New: Contents dialog: The filter field can now be cleared with 'X' and has the focus when the dialog is opened.
- Fixed: Contents dialog: Using 'Select All' on filtered content did still select all presets not only the filtered ones.
- Fixed: Tabbing in dialogs did not work.
- Fixed: Processing dialog: the Enable option could not be reached with tab.
- Processing
- New: Added support to handle 32-bit float samples as input.
- Fixed: Upsampling the bit resolution from 8 bit resulted in silent samples.
- Fixed: Upsampling from 8 to 24 bit set the result to PCM_UNSIGNED instead of PCM_SIGNED.
- Fixed: Handling of 12‑ and 20‑bit samples was not correct when converting to mono.
- Fixed: Truncating the end did only check the 1st loop.
- Command Line Interface
- New: The new option '-P' additionally writes the progress of a conversion to the error output in a machine-readable form ('CWM_PROGRESS pct=<0..100> phase= detail='), so that an application which runs ConvertWithMoss as a child process can display it - the progress dots of the normal output cannot be turned into a percentage. The percentage moves with the finished source files and, inside of a source file, with its loaded samples, which keeps a single large instrument moving as well. Setting the environment variable CWM_MACHINE_PROGRESS to 1 has the same effect, for hosts which cannot add options to the command line. Without the option nothing is written and nothing is changed.
- 1010music bento
- Fixed: On macOS and Linux the patches of a performance were written into a single folder whose name literally contains the backslashes of the device path ('UserPatches\SampInst') instead of the nested UserPatches/SampInst folders; such a folder cannot even be copied onto the FAT32/exFAT card of the device. The paths inside of the project file were and are correct.
- 1010music blackbox, bento
- Fixed: The preset paths written into presets and performances used the multi-sample name as-is, but the actually created folders have illegal file name characters removed and a number appended when the name already exists. Such presets referenced non-existing folders (e.g. for sources with a ':' in their name, like Roland S-7xx patches). The written paths now always match the created folders.
- Fixed: blackbox: The silence workaround samples of a performance were referenced in the folder of the instrument but the sample is stored in the performance folder.
- Akai MPC60, MPC2000/3000, S-9x0, S-1000, Ensoniq ASR/EPS, Roland S-5xx, S-7xx
- New: Patches are now put in sub-folders with their image name. On the S-5xx, if it is a CD-ROM, the CD-ROM name is another sub-folder. S-1000 adds Volume names.
- Ableton
- New: Round-robin cycles which are stored as sample-select (selector) ranges - the only round-robin representation the Sampler of Live 10/11 has - are now read as round-robin groups instead of zones which all play at once. When writing, round-robin groups are stored as selector ranges whenever the native round-robin flag of Live 12 is not available (Ableton 11) or does not apply because only some of the groups alternate.
- Fixed: A preset whose samples were not found at the calculated root path failed with 'No presets were found in the source' although the samples were present. This happened e.g. for a preset saved inside of or next to a Live project folder which keeps its samples in a nested folder (the root path search only recognized a folder with a direct 'Samples' child). The root folder of a Live project (marked by its 'Ableton Project Info' folder) is now recognized as well, the absolute sample path stored in the preset is tried as a fall-back and finally the sample file is searched by its name starting from the folder of the preset. A sample which is still not found only logs an error and drops its zone instead of the whole preset.
- Fixed: A written preset was malformed XML when the preset name contains one of the characters '&', '<', '>' or a quote (the name is now escaped).
- DecentSampler
- Fixed: The folder name of a created DSBUNDLE kept characters which are illegal in file names (e.g. the ':' of Roland S-7xx patch names).
- E-mu Emulator III/IIIX/ESI
- New: Banks can now be written as a ready-to-use CD-ROM image (ISO) for SCSI CD-ROM emulators (e.g. ZuluSCSI), which is the only way to get a converted library onto these samplers since they read no file system of a computer. Each converted source becomes one bank of the image (at most 112), whose geometry, file entries and directory copy the Emulator IIIX library CD-ROMs. Written images have not been tested on real hardware yet.
- Fairlight CMI
- New: IMG, IMD and HFE files which contain several Voice files can be read.
- New: Voice files can now be written: either as a Series III voice (16-bit mono or stereo, up to 127 sub-voices with their key ranges, loops, tuning, gain and amplitude envelope) or as the fixed-size 8-bit voice files of the CMI I/II/IIx with their loop segments (one file per sample zone, e.g. for the QasarBeach recreation - the Arturia CMI V does not read voice files; the audio is re-sampled to the root frequency times 128, which is the pitch law of the CMI II - verified against QasarBeach; each voice comes with the control (CO) file it references, which carries the loop, attack, damping and level). Written files have not been tested on real hardware yet.
- New: Voices can also be written in the native 16-bit format of the QasarBeach recreation (QBV2), which carries the loop, release and level inside the file and therefore loads ready to play; such files are read as well.
- New: Voice files of the 8-bit CMI I/II/IIx dialect are now read as well, both with their full header and as bare 16 KB audio-only files. A control (CO) file present next to a voice wins over the voice header (as on the CMI itself) and also provides the attack and release of the amplitude envelope.
- Korgmultisample
- Fixed: The loop end was ignored when writing: the single end field of the format (which is the sample end and the loop end at once) was always set to the sample end. A loop which ends earlier now moves the end to the loop end - audio behind an active loop can never be heard anyway - so held notes no longer cycle across e.g. the faded-out tail of a pad sample.
- NI Kontakt
- New: The velocity to volume modulator is now converted with its response curve: Kontakt maps its normalized volume to decibels with 60*log10(x), so the amplitude follows the cube of the velocity. Destinations which can express the curve reproduce this response, e.g. SFZ receives matching amp_velcurve_N points.
- Fixed: Added a workaround for missing samples with Kontakt 2/3 Monolithic NKM files created with AWave Studio which falsely classify samples as NKI files.
- Fixed: The group and the instrument tune of a Kontakt 2 file were read as a linear offset in octaves although they are frequency ratios, like the already correctly read zone tune (and like all tune values of Kontakt 1 and 4.2/5+). Both are 1 - the neutral ratio - in a program whose tuning was never touched, and each contributed a full octave, so every converted program played 24 semitones too high. A tune of 0, which cannot be a ratio, is now taken as neutral instead of producing an infinite value.
- Fixed: The soloed groups of a Kontakt 4.2/5+ program were honored even when the program has group solo switched off. Kontakt keeps the solo flags of the groups when solo mode is left, so a program with such left-overs converted to those groups only and dropped every other group.
- Roland MC-707/MC-101
- Fixed: Projects which were created on the device (rather than by Roland) reported 'No tones or drum kits using user samples found' although they contain user samples, e.g. a project with 386 samples in 90 sounds. A slot of the sample parameter table was only taken as being in use when the flag at offset 0x10 is set, which Roland's own projects do set but the sample import of the device does not; a slot is now recognized by its name, which matches the number of stored samples in every project examined.
- Fixed: The audio of the read samples was taken from the wrong offset and with twice the length: the size field of a sample chunk counts the bytes of one channel (not 16 bit words) and the audio starts 64 zero bytes behind the chunk header. The samples are now also read with their real channel count, which bit 15 of the chunk tag selects - the sample import of the device writes mono, while Roland's projects are stereo throughout.
- Fixed: The TVF filter and the TVA amplitude envelope of a tone and the TVA envelope of a drum kit key were not read at all, so every converted sound fell back to a default envelope and lost its filter (e.g. a low-pass at a seventh of its range with resonance).
- Fixed: The level, coarse/fine tuning and panning of a tone partial were not read. A tone which layers the same sample on several partials - the usual way to build an octave, a chord or a wide detuned sound on the device - therefore converted into several identical zones which only doubled the volume (e.g. 33 of the 90 sounds of one project were affected). The tuning is now read as the tuning of the zone and the panning as its panning, and the partial level scales the level of the sample slot. Writing stores the tuning and panning of a source in its tone.
- Fixed: The filter and the amplitude envelope of every zone were taken from the tone's first partial, although each partial has its own. A layer with a slow attack or a different filter played with the settings of the first layer. The filter types LPF2 and LPF3 are now read as a low-pass as well, instead of being dropped.
- Fixed: Written sample chunks lacked the 64 zero bytes which precede the audio in device-written and Roland-written chunks alike, so the device would play them from 32 frames too early. The 'untrimmed' flag of a written sample is no longer cleared by a loop, which had made a looped sample read back as an unused slot.
- Roland S-7xx
- New: The 3 character prefixes are now interpreted as a category. If no category could be matched they are added to the full name (without the ':').
- Fixed: CD-ROM/hard-disk images: the audio data of the samples is now located through the file allocation table and the directory entries instead of assuming one contiguous block at the fixed start offset of S-760 formatted disks. Images formatted by an S-750/S-770 system (whose audio area starts 1 MB earlier) and disks which contain deleted or fragmented entries either failed with 'Referenced sample data is larger than the available data' (e.g. the SV-SP70-01 Library Preview Disc) or could silently assign wrong audio to the samples. Deleted entries between the entries in use are now skipped as well instead of shifting all following patch, partial and sample references.
- Fixed: Continuation disks with postfix spaces in the disk name could not be detected.
- Sample Files
- New: Added support for reading CAF (Apple Core Audio Format) files. Linear PCM (integer and float in both byte orders), IMA4, µLaw, aLaw, Apple Lossless and MPEG-4 AAC (low complexity profile) audio data is decoded; files with other codecs are reported with the name of their codec. The instrument info (root note, key/velocity ranges, gain, tuning), loops and metadata texts are read from the respective chunks. CAF files are also picked up by all formats which reference sample files, e.g. the sample files of Logic Pro EXS24 instruments.
- New: The destination 'Sample Files (WAV)' is now called 'Sample Files' and got an option for the audio file format of the written samples: WAV, AIFF, CAF, CAF-ALAC (compressed with Apple Lossless), CAF-AAC (compressed with MPEG-4 AAC, lossy) or FLAC. This allows audio file conversions (e.g. WAV to AIFF or AIFF to FLAC); all paths except CAF-AAC are lossless. The instrument, loop and metadata information is written to the matching chunks of AIFF and CAF files. The Apple Lossless decoder and encoder are ports of the reference implementation published by Apple, the AAC decoder is a port of the FFmpeg AAC decoder and the AAC encoder follows the structure of the FFmpeg encoder with a fixed precision target instead of its psychoacoustic model. All of them work on all platforms.
- SFZ
- New: The response curve of the velocity to volume modulation is now written as amp_velcurve_N points when the source describes one (e.g. Kontakt, whose velocity modulation scales the amplitude with the cube of the velocity). When reading, amp_velcurve_N points are fitted to the closest power law, so the response survives a round trip.
- Synclavier Regen
- Fixed: A tab or line break in a preset name or description corrupted the line/column structure of the written timbre and index text files; such characters are now replaced.
- Yamaha YSFC
- Fixed: The waveform entry names written with the 'Create only waveforms' option kept the multi-sample name as-is; it is now folded to ASCII and limited to 20 characters like the names written with performances.
- Fixed: The 'Create only waveforms' option could not be enabled from the command line interface - passing YsfcCreateOnlyWaveforms failed with 'Unknown parameter'.
- Processing
- Fixed: Changing the sample rate of the samples used a linear interpolation, which is not band-limited: reducing the rate folded all frequencies above the new Nyquist frequency back into the audible range (measured on a sweep which lies entirely above it: -9 dB instead of silence) and raising it left images of the source spectrum above the original Nyquist frequency. Both are now converted with a windowed sinc interpolation, which lowers the aliasing of that sweep by 92 dB and the images of a 32 kHz sample raised to 48 kHz from -41 dB to -84 dB.
- WAV
- New: WAV files which contain a complete Ogg stream instead of PCM data (marked with one of the Ogg Vorbis WAVE format codes, e.g. the samples of the legacy DirectWave packs of FL Studio) are read by de-compressing the embedded stream. They were rejected as an unsupported source format before.
- Fixed: The audio metadata of a WAV file inside of a ZIP file could not be read when the file contains a large padding chunk in front of the data chunk (e.g. the PAD chunks in Audiomodern Soundbox packs). Destinations which need the metadata quietly dropped such a preset with only 'Resetting to invalid mark' in the log, e.g. converting such sources to Waldorf Quantum/Iridium. The metadata is now read with the RIFF parser instead of javax.sound.