Skip to content

Commit f8501a8

Browse files
committed
* Added support for reading Akai MPC XPJ and XTY files.
* Akai AKP/AKM * New: Renamed "Akai S5000/S6000" to "Akai AKP/AKM" * New: Added reading support for Akai Z4/Z8/MPC4000 AKP/AKM format. * New: Added version information to the log file. * New: Improved conversion of filter resonance. * New: The root note is now modified instead re-pitching it via tuning parameter. * Akai XPM * Fixed: Never read loops from WAV files. * SFZ * Fixed: Prevent creation of filter type with poles not supported by SFZ (2 poles will be set in such a case).
1 parent 9289083 commit f8501a8

78 files changed

Lines changed: 797 additions & 445 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

documentation/CHANGELOG.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
# Changes
22

3+
## 16.1.0
4+
5+
* Added support for reading Akai MPC XPJ and XTY files.
6+
* Akai AKP/AKM
7+
* New: Renamed "Akai S5000/S6000" to "Akai AKP/AKM"
8+
* New: Added reading support for Akai Z4/Z8/MPC4000 AKP/AKM format.
9+
* New: Added version information to the log file.
10+
* New: Improved conversion of filter resonance.
11+
* New: The root note is now modified instead re-pitching it via tuning parameter.
12+
* Akai XPM
13+
* Fixed: Never read loops from WAV files.
14+
* SFZ
15+
* Fixed: Prevent creation of filter type with poles not supported by SFZ (2 poles will be set in such a case).
16+
317
## 16.0.0
418

5-
* Added reading support for S5000/S6000 AKP format.
19+
* Added reading support for Akai S5000/S6000 AKP/AKM format.
620
* User Interface
721
* Moved several setting to a specific Settings dialog.
822
* Updated button icons.

documentation/README-FORMATS.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ The following multi-sample formats are supported:
3434
- [1010music bento](#1010music-bento)
3535
- [1010music blackbox, tangerine, bitbox](#1010music-blackbox-tangerine-bitbox)
3636
- [Ableton Sampler](#ableton-sampler)
37-
- [Akai MPC Keygroups / Drum](#akai-mpc-keygroups--drum)
38-
- [Akai S5000/S6000](#akai-s5000s6000)
37+
- [Akai MPC Keygroups/Drum](#akai-mpc-keygroups--drum)
38+
- [Akai MPC Project/Track](#akai-mpc-projecttrack)
39+
- [Akai AKP/AKM (S5000/S6000/Z4/Z8/MPC4000)](#akai-akpakm-s5000s6000z4z8mpc4000)
3940
- [Bitwig Multisample](#bitwig-multisample)
4041
- [CWITEC TX16Wx](#cwitec-tx16wx)
4142
- [DecentSampler](#decentsampler)
@@ -113,13 +114,22 @@ Restrictions are:
113114

114115
### Source Options
115116

116-
* Ignore Loops: There are XPM files which do not contain loops but there related WAV files do (seems to happen with the MPC Autosampler). ConvertWithMoss uses the loops from the WAV files in that case. This might not be what you intended if a multi-sample should be one-shot. Enable this option to ignore the loops.
117+
* Ignore Loops: There are XPM files which do not contain loops but the related WAV files do (seems to happen with the MPC Autosampler). ConvertWithMoss uses the loops from the WAV files in that case. This might not be what you intended if a multi-sample should be one-shot. Enable this option to ignore the loops.
117118

118119
### Destination Options
119120

120121
* 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.
121122

122-
## Akai S5000/S6000
123+
## Akai MPC Project/Track
124+
125+
A track file (*.xty) is a MPC v3 specific file that saves all settings, samples, macros, FX and MIDI data associated with a track. A track consists of two elements; the track file itself and a trackData folder containing the samples used within the track (ending with '_\[TrackData\]'). If the track contains a keygroup it is extracted as a multi-sample source.
126+
A project file (*.xpj) contains all track and project settings. All tracks which contain a keygroup are extracted as a multi-sample source.
127+
128+
### Source Options
129+
130+
* Ignore Loops: There are XPM files which do not contain loops but the related WAV files do (seems to happen with the MPC Autosampler). ConvertWithMoss uses the loops from the WAV files in that case. This might not be what you intended if a multi-sample should be one-shot. Enable this option to ignore the loops.
131+
132+
## Akai AKP/AKM (S5000/S6000/Z4/Z8/MPC4000)
123133

124134
This format uses a chunk based binary format with the ending AKP. It supports up to 99 key-groups. A key-group covers a note range with up to 4 velocity layers. AKM files are a multi configuration of up to 32 AKP preset files. The AKP files are only referenced from the AKM. Available parameters are the MIDI channel, panning, volume and key-range.
125135
AKP files are used if destination is Preset or Preset Library. AKM files are used if destination is Performance or Performance Library.
816 Bytes
Binary file not shown.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<modelVersion>4.0.0</modelVersion>
66
<groupId>de.mossgrabers</groupId>
77
<artifactId>convertwithmoss</artifactId>
8-
<version>16.0.0</version>
8+
<version>16.1.0</version>
99
<packaging>jar</packaging>
1010
<name>ConvertWithMoss</name>
1111
<organization>

src/main/java/de/mossgrabers/convertwithmoss/core/ConverterBackend.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
import de.mossgrabers.convertwithmoss.format.ableton.AbletonDetector;
2525
import de.mossgrabers.convertwithmoss.format.akai.mpc.xpm.MPCKeygroupCreator;
2626
import de.mossgrabers.convertwithmoss.format.akai.mpc.xpm.MPCKeygroupDetector;
27-
import de.mossgrabers.convertwithmoss.format.akai.s5000.S5000Detector;
27+
import de.mossgrabers.convertwithmoss.format.akai.mpc.xty.XtyDetector;
28+
import de.mossgrabers.convertwithmoss.format.akai.s5000.AkpDetector;
2829
import de.mossgrabers.convertwithmoss.format.bitwig.BitwigMultisampleCreator;
2930
import de.mossgrabers.convertwithmoss.format.bitwig.BitwigMultisampleDetector;
3031
import de.mossgrabers.convertwithmoss.format.decentsampler.DecentSamplerCreator;
@@ -105,9 +106,9 @@ public ConverterBackend (final INotifier notifier)
105106
new BentoDetector (notifier),
106107
new Music1010Detector (notifier),
107108
new AbletonDetector (notifier),
109+
new AkpDetector (notifier),
108110
new MPCKeygroupDetector (notifier),
109-
// TODO new XtyDetector (notifier),
110-
new S5000Detector (notifier),
111+
new XtyDetector (notifier),
111112
new BitwigMultisampleDetector (notifier),
112113
new TX16WxDetector (notifier),
113114
new DecentSamplerDetector (notifier),

src/main/java/de/mossgrabers/convertwithmoss/core/IMultisampleSource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,15 @@ default Map<IGroup, Integer> getRoundRobinGroups ()
170170

171171
/**
172172
* Get the lowest key covered by a sample in all of the groups.
173-
*
173+
*
174174
* @return The lowest playing key (0-127)
175175
*/
176176
int getLowestKey ();
177177

178178

179179
/**
180180
* Get the highest key covered by a sample in all of the groups.
181-
*
181+
*
182182
* @return The highest playing key (0-127)
183183
*/
184184
int getHighestKey ();

src/main/java/de/mossgrabers/convertwithmoss/core/detector/AbstractDetector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ private void handlePerformanceFile (final File file)
236236
if (performances.isEmpty () || this.waitForDelivery ())
237237
return;
238238

239-
for (IPerformanceSource performance: performances)
239+
for (final IPerformanceSource performance: performances)
240240
{
241241
if (this.waitForDelivery ())
242242
break;
@@ -629,7 +629,7 @@ protected void createMetadata (final IMetadata metadata, final IFileBasedSampleD
629629
*/
630630
protected void createMetadata (final IMetadata metadata, final IFileBasedSampleData sampleData, final String [] parts, final String category)
631631
{
632-
if (this.settingsConfiguration instanceof MetadataSettingsUI metadataSettings)
632+
if (this.settingsConfiguration instanceof final MetadataSettingsUI metadataSettings)
633633
{
634634
metadata.detectMetadata (metadataSettings, parts, category);
635635
if (sampleData != null)

src/main/java/de/mossgrabers/convertwithmoss/core/detector/DefaultInstrumentSource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public int getClipKeyHigh ()
110110

111111
/** {@inheritDoc} */
112112
@Override
113-
public void setClipKeyHigh (int clipKeyHigh)
113+
public void setClipKeyHigh (final int clipKeyHigh)
114114
{
115115
this.clipKeyHigh = clipKeyHigh;
116116
}
@@ -129,8 +129,8 @@ public void clipKeyRange ()
129129
final List<ISampleZone> filteredZones = new ArrayList<> ();
130130
for (final ISampleZone zone: group.getSampleZones ())
131131
{
132-
int keyLow = zone.getKeyLow ();
133-
int keyHigh = zone.getKeyHigh ();
132+
final int keyLow = zone.getKeyLow ();
133+
final int keyHigh = zone.getKeyHigh ();
134134
// Fully outside -> remove
135135
if (keyLow > this.clipKeyHigh || keyHigh < this.clipKeyLow)
136136
continue;

src/main/java/de/mossgrabers/convertwithmoss/core/detector/DefaultMultisampleSource.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,8 @@ public int getLowestKey ()
282282
int lowestKey = 127;
283283
for (final IGroup group: this.groups)
284284
for (final ISampleZone zone: group.getSampleZones ())
285-
{
286285
if (zone.getKeyLow () < lowestKey)
287286
lowestKey = zone.getKeyLow ();
288-
}
289287
return lowestKey;
290288
}
291289

@@ -297,10 +295,8 @@ public int getHighestKey ()
297295
int highestKey = 0;
298296
for (final IGroup group: this.groups)
299297
for (final ISampleZone zone: group.getSampleZones ())
300-
{
301298
if (zone.getKeyHigh () > highestKey)
302299
highestKey = zone.getKeyHigh ();
303-
}
304300
return highestKey;
305301
}
306302
}

src/main/java/de/mossgrabers/convertwithmoss/core/model/ISampleZone.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ public interface ISampleZone
395395
*
396396
* @return The modulator, never null
397397
*/
398-
IEnvelopeModulator getPitchModulator ();
398+
IEnvelopeModulator getPitchEnvelopeModulator ();
399399

400400

401401
/**

0 commit comments

Comments
 (0)