Skip to content

Commit

Permalink
* DecentSampler
Browse files Browse the repository at this point in the history
  * New: Added option to create a dsbundle as output format.
  * New: Added option to combine all detected multi-sample sources into one library or bundle.
* Korg KMP
  * New: Proper support for stereo files. Turns out these workstations cannot play back real stereo files, therefore, a stereo file needs to be split into 2 KMP files.
  * New: Additionally, a KSC file is created to ease loading of stereo files.
  * New: Added 2 options to increase the volume.
  * New: Added option to split source groups into individual KMPs.
  * New: Increased sample rate limit to 48kHz (was 44.1kHz).
  * New: Improved creating unique folder names for KMP files.
  * Fixed: Zones needed to be ordered by their upper key-limit otherwise the file did not work and could even crash the workstation.
  * Fixed: Reverse playback state was not read correctly.
  * Fixed: Prevent several characters in file names which could crash the workstation.
* MPC Keygroups
  * New: Added option to create up to 8 layers which is now supported with MPC Firmware 3.4.
* SFZ
  * New: Added support for reading SFZ files which reference other SFZ files with #include statements.
  * New: Added option to (not) log unsupported SFZ opcodes. This is off by default since the warnings confused many users.
* Soundfont 2
  * New: Added options to add the filename and the preset number to the resulting destination file names.
  • Loading branch information
git-moss committed Oct 27, 2024
1 parent ebafc92 commit c6460c5
Show file tree
Hide file tree
Showing 51 changed files with 1,266 additions and 318 deletions.
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Changes

## 11.2.0

* New: Source and destination path stores now the last 20 selections.
* New: Implemented loading of AIFF files since some crashed the Java Sound API.
* DecentSampler
* New: Added option to create a dsbundle as output format.
* New: Added option to combine all detected multi-sample sources into one library or bundle.
* Korg KMP
* New: Proper support for stereo files. Turns out these workstations cannot play back real stereo files, therefore, a stereo file needs to be split into 2 KMP files.
* New: Additionally, a KSC file is created to ease loading of stereo files.
* New: Added 2 options to increase the volume.
* New: Added option to split source groups into individual KMPs.
* New: Increased sample rate limit to 48kHz (was 44.1kHz).
* New: Improved creating unique folder names for KMP files.
* Fixed: Zones needed to be ordered by their upper key-limit otherwise the file did not work and could even crash the workstation.
* Fixed: Reverse playback state was not read correctly.
* Fixed: Prevent several characters in file names which could crash the workstation.
* MPC Keygroups
* New: Added option to create up to 8 layers which is now supported with MPC Firmware 3.4.
* SFZ
* New: Added support for reading SFZ files which reference other SFZ files with #include statements.
* New: Added option to (not) log unsupported SFZ opcodes. This is off by default since the warnings confused many users.
* Soundfont 2
* New: Added options to add the filename and the preset number to the resulting destination file names.

## 11.1.0

* New: AIFF/WAV files are now lazy loaded which keeps the memory usage down.
Expand Down
27 changes: 23 additions & 4 deletions README-FORMATS.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ Other restrictions are:

### Destination Options

* Limit layers to: MPC Firmware 3.4 increased the number of possible layers in a keygroup to 8. This option allows you to choose between 4 (for older firmware revisions) or 8.
* Options to write/update [WAV Chunk Information](#wav-chunk-information)

## CWITEC TX16Wx
Expand All @@ -116,9 +117,10 @@ There are no metadata fields (category, creator, etc.) specified in the format.

### Destination Options

* Output Format: Choose to create individual presets, libraries or bundles
* Combine all source multi-samples into one library: If Library or Bundle is selected as output format, all detected source multi-samples are combined into one library or bundle. If the options is off, one library/bundle is created for each detected source multi-sample.
* Library Filename: Enter a name to use for the library which contains all source multi-samples. If empty, the name of the first found source is used.
* Make monophonic: Restricts the sound to 1 note, use e.g. for lead sounds.
* Add envelope: Create 4 knobs to edit the amplitude envelope.
* Add filter: Adds a low pass filter and creates a cutoff and resonance knob for it.
* Add reverb: Adds a reverb effect and creates two parameter knobs for it.
* Options to write/update [WAV Chunk Information](#wav-chunk-information)

Expand Down Expand Up @@ -173,12 +175,20 @@ The KMP/KSF format (*.KMP) was first introduced in the Korg Trinity workstation
* PA1X/PA800/PA2X/PA3X/PA4X
* Nautilus

The format is documented in detail in the appendix of the respective parameter guides. The KMP format contains only 1 group of a multisample, which means there are only key splits but no groups. The file references several KSF files which contain the sample data for each key region.
The format is documented in detail (more or less) in the appendix of the respective parameter guides. The KMP format contains only 1 group of a multisample, which means there are only key splits but no groups. The file references several KSF files which contain the sample data for each key region.

Since the KMP format can only contain 1 group of a multisample, sources with multiple groups are split into several destination KMP files. Due to limitations of the format only uncompressed 8 or 16 bit samples up to 48kHz are supported. Files in other formats are automatically converted.
Since the KMP format can only contain 1 group of a multisample, sources with multiple groups can be optionally split into several destination KMP files. Due to limitations of the format only uncompressed 8 or 16 bit samples up to 48kHz are supported. Files in other formats are automatically converted.

Even if the KSF files can store stereo files, they do not work. Therefore, they need to be split into 2 KMP files. To ease the use of these 2 files an additional KSC file is created, which loads all referenced files.

There are no metadata fields (category, creator, etc.) specified in the format. Therefore, information is stored and retrieved from Broadcast Audio Extension chunks in the WAV files. If noch such chunks are present an [automatic detection](#automatic-metadata-detection) is applied.

### Destination Options

* Write group KMPs: Writes a KMP for each group in the source multi-sample. This option will be ignored for split stereo source files.
* Enable the +12dB option: Increases the volume of each sample by +12dB. Use for low volume samples.
* Set sample volume to +99: If enabled, sets all sample volumes to +99. Use for very low volume samples.

## Korg wavestate/modwave

The korgmultisample format is currently used by the Korg wavestate and modwave keyboards as well as their VST plugin siblings. Files in that format (*.korgmultisample) can be opened with the Korg Sample Builder software and transferred to the keyboard.
Expand Down Expand Up @@ -230,6 +240,10 @@ The SFZ file contains only the description of the multisample. The related sampl

There are no metadata fields (category, creator, etc.) specified in the format. Therefore, information is stored and retrieved from Broadcast Audio Extension chunks in the WAV files. If noch such chunks are present an [automatic detection](#automatic-metadata-detection) is applied.

### Source Options

* Log unsupported SFZ opcodes: If enabled, opcodes which are found in the source but are not used (not supported) as input for the conversion are logged.

### Destination Options

* Convert to FLAC format: If enabled, the sample files are converted to FLAC.
Expand All @@ -245,6 +259,11 @@ The conversion process creates one destination file for each preset found in a S

There are metadata fields for creator and some description specified in the format. However, additional information like a category is retrieved from Broadcast Audio Extension chunks in the WAV files. If noch such chunks are present an [automatic detection](#automatic-metadata-detection) is applied.

### Source Options

* Prefix with file name: If enabled, the name of the Soundfont file is added to all resulting destination files.
* Prefix with program number: If enabled, the preset number of the preset is added to the resulting destination file.

## TAL Sampler

TAL-Sampler is an analog modeled synthesizer with a sampler engine as the sound source, including a modulation matrix and self-oscillating filters. Most of the presets in it's library store the sample files in an encrypted format (*.wavsmpl), this format is not supported. Only presets using plain WAV or AIFF files are supported.
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
09477063a6de1ac0b1c789b64824ab0d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f01aca241efc98a3d0334a205cebdbcfab4b1e78
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<groupId>de.mossgrabers</groupId>
<packaging>jar</packaging>
<name>UiTools</name>
<version>1.5.0</version>
<version>1.5.1</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand All @@ -25,17 +25,17 @@
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>23-ea+20</version>
<version>23.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>23-ea+20</version>
<version>23.0.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.0</version>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down Expand Up @@ -96,7 +96,7 @@
<artifactId>versions-maven-plugin</artifactId>
<version>2.17.1</version>
<configuration>
<ignoredVersions>.*-M.*,.*-alpha.*,.*-ea.*</ignoredVersions>
<ignoredVersions>.*-M.*,.*-alpha.*,.*-beta.*,.*-ea.*</ignoredVersions>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
Expand All @@ -110,12 +110,12 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.2</version>
<version>3.1.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.2</version>
<version>3.1.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand All @@ -135,7 +135,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.4.0</version>
<version>3.5.1</version>
</plugin>

</plugins>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ed0bda4c5d97e01ed70c367e2dc59563
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
26612119e929ed2152b630b3402c70150884dc7b
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
<groupId>de.mossgrabers</groupId>
<artifactId>uitools</artifactId>
<versioning>
<release>1.5.0</release>
<release>1.5.1</release>
<versions>
<version>1.5.0</version>
<version>1.5.1</version>
</versions>
<lastUpdated>20240818222008</lastUpdated>
<lastUpdated>20241021142809</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
85a866c60b2d8c7010c69b79c74db380
9a1d20d6c1b747ea116c03b0fc0f9a97
Original file line number Diff line number Diff line change
@@ -1 +1 @@
cb7b0d543b2816fe806449cb5206e7980a714e45
015ae3e403453609eb19be94e9724088bca26c38
10 changes: 5 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.mossgrabers</groupId>
<artifactId>convertwithmoss</artifactId>
<version>11.1.0</version>
<version>11.2.0</version>
<packaging>jar</packaging>
<name>ConvertWithMoss</name>
<organization>
Expand Down Expand Up @@ -34,12 +34,12 @@
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>23-ea+22</version>
<version>23.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>23-ea+22</version>
<version>23.0.1</version>
</dependency>
<dependency>
<groupId>com.github.trilarion</groupId>
Expand All @@ -54,7 +54,7 @@
<dependency>
<artifactId>uitools</artifactId>
<groupId>de.mossgrabers</groupId>
<version>1.5.0</version>
<version>1.5.1</version>
</dependency>
</dependencies>

Expand Down Expand Up @@ -239,7 +239,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.0</version>
<version>3.5.1</version>
</plugin>

</plugins>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
// Written by Jürgen Moßgraber - mossgrabers.de
// (c) 2019-2024
// Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt

package de.mossgrabers.convertwithmoss.core;

import java.io.IOException;
import java.util.List;

import de.mossgrabers.convertwithmoss.core.model.IGroup;
import de.mossgrabers.convertwithmoss.core.model.ISampleZone;


/**
* Enumeration for different channel configurations of zones.
*
* @author Jürgen Moßgraber
*/
public enum ZoneChannels
{
/** All zones reference mono samples. */
MONO,
/** All zones reference stereo samples. */
STEREO,
/** All zones reference mono samples which are either hard panned left or right. */
SPLIT_STEREO,
/** Mixed mono and stereo samples. */
MIXED;


/**
* Checks for the channel setup across all zones of the given groups.
*
* @param groups The groups to check
* @return The channel configuration
* @throws IOException Could not detect the number of channels
*/
public static ZoneChannels detectChannelConfiguration (final List<IGroup> groups) throws IOException
{
Boolean stereo = null;
Boolean splitMono = null;

for (final IGroup group: groups)
for (final ISampleZone sampleZone: group.getSampleZones ())
{
final boolean isStereo = sampleZone.getSampleData ().getAudioMetadata ().getChannels () == 2;
if (stereo == null)
{
// First iteration, store if mono or stereo
stereo = Boolean.valueOf (isStereo);
// If it is already stereo, it cannot be split stereo
if (isStereo && splitMono == null)
splitMono = Boolean.FALSE;
continue;
}

// Mixed mono/stereo
if (stereo.booleanValue () != isStereo)
return ZoneChannels.MIXED;

if (isStereo)
continue;

// Check for split stereo which needs to be hard panned left or right
if (splitMono == null || splitMono.booleanValue ())
{
final double panorama = sampleZone.getPanorama ();
splitMono = Boolean.valueOf (panorama <= -1 || panorama >= 1);
}
}

if (stereo != null && stereo.booleanValue ())
return ZoneChannels.STEREO;

return splitMono != null && splitMono.booleanValue () ? ZoneChannels.SPLIT_STEREO : ZoneChannels.MONO;
}
}
Loading

0 comments on commit c6460c5

Please sign in to comment.