Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/B0ney/xmodits

A tool to rip samples from tracker modules. Supports IT, XM, S3M, MOD, UMX and MPTM formats.
https://github.com/B0ney/xmodits

audio fasttracker2 gui iced iced-rs impulsetracker protracker ripper rust screamtracker tracker-music xmodits

Last synced: 7 days ago
JSON representation

A tool to rip samples from tracker modules. Supports IT, XM, S3M, MOD, UMX and MPTM formats.

Awesome Lists containing this project

README

        


XMODITS Logo

# XMODITS

# A tool to bulk extract samples from various tracker modules with ease.


![GitHub all releases](https://img.shields.io/github/downloads/B0ney/xmodits/total)
![GitHub](https://img.shields.io/github/license/B0ney/xmodits)
[![GitHub release (with filter)](https://img.shields.io/github/v/release/B0ney/xmodits)](https://github.com/B0ney/xmodits/releases)
![Repo size](https://img.shields.io/github/repo-size/B0ney/xmodits)
[!["Release RSS Feed"](https://img.shields.io/badge/rss-releases-ffa500?logo=rss)](https://github.com/B0ney/xmodits/releases.atom)





## Download
You can download builds for xmodits [here](https://github.com/B0ney/xmodits/releases/latest).

If you wish to build from source, go to [building](#building).

If you prefer to use a minimal version of this tool, a command line version of xmodits can be found [here](https://github.com/B0ney/xmodits-cli). Additionally, the command line version has more supported architectures.

## Supported Tracker Module Formats
| Extension | Format |
| - | - |
| ``.it`` | Impulse Tracker |
| ``.xm`` | Extended Module |
| ``.s3m`` | Scream Tracker 3 |
| ``.mod`` | Amiga Protracker |
| ``.mptm`` | ModPlug Tracker module |

## Supported Containers
| Extension | Description |
| --- | --- |
| ``.umx`` | Unreal Music Package|
| N/A | Protracker 3.6 project file |

# Supported Exports
| Extension | Format |
|-|-|
|``.wav``| Microsoft Wave|
|``.aiff``| Audio Interchange File Format |
|``.its``| Impulse Tracker 2 sample |
|``.s3i``| Scream Tracker 3 Instrument |
|``.8svx``| 8-Bit Sampled Voice |
|``.raw``| Headerless pcm |

## Features
* A robust naming system for extracted samples (see [Sample Naming](#sample-naming)).
* Can export samples to less common audio formats used by music trackers: ``.its``, ``.s3i`` & ``.8svx``
* Can show information about a module.
* A sample previewer.
* Multithreaded ripping* for better efficiency.
* Cute animated fox to make ripping less tedious.

\* xmodits will only use threads if it is ripping from a directory.

## Screenshots
![XMODITS initial screen](./assets/screenshots/home.png)

Click to show more

![Selecting tracker modules](./assets/screenshots/selection.png)
![Ripping samples from 33 tracker modules](./assets/screenshots/ripping.png)
![XMODITS has finished ripping with no error. Yay! ](./assets/screenshots/ripping_done.png)

Click [here](./assets/screenshots/README.md) for different themes

## How to Use
1) Open application
2) Drag and drop a module, and or a folder full of modules.
3) (Optional) Press "Open" to set the destination folder. Your downloads folder is the default.
5) Press "Start"
6) Press "Show Folder" to see the results.

(**Windows Only**) If you just want to simply extract samples, you can also drag and drop a module(s) onto the binary. XMODITS will (by default) place the samples in a self contained folder in your ```~/Downloads``` folder.

### Sample Naming
Configure how ripped samples are named.

|Parameter| Description|
|--|--|
| ``Index Only`` | Samples will only be named with an index. |
| ``Preserve Index`` | Sample index will match how it is represented internally. |
| ``Prefix Samples`` | Samples will be prefixed with the tracker's filename. |
| ``Upper Case`` | Samples will be named in upper case.|
| ``Lower Case`` | Samples will be named in lower case.|
| ``Prefer Filename`` | Some samples have an additional filename. If present, xmodits will name samples with that. |
| ``Index Padding`` | Set the minimum amount of digits an index must have. Indexes will be padded with zeros to match the minimum amount of digits*. Set to 1 to disable padding.|

\* xmodits may override this value to ensure that samples are named consistently (unless it is set to 1).

### Ripping Configuration

|Parameter| Description|
|--|--|
| ``Self Contained`` | XMODITS will put samples in a self contained folder.|
| ``Export Format`` | Samples can be saved to the following formats: [ ``wav``, ``aiff``, ``8svx``, ``its``, ``s3i``, ``raw`` ]|
| ``Folder Scan Depth`` | Limit how far a folder can be traversed. |
| ``Worker Threads`` | Set how many threads can be used to rip samples in parallel.|

### Saving Configuration
Any changes made to the configuration **must be saved manually**.
The configuration file can be located at:

|OS|Path|
|-|-|
|Windows|``%appdata%\xmodits\config.toml``|
|Linux|``~/.config/xmodits/config.toml``|
|MacOs|``~/Library/Application Support/xmodits/config.toml``|

### Keyboard Shortcuts
|Shortcut| Action|
|-|-|
|delete| Clears the selected entries|
|shift + delete| Clears the entries|
|ctrl/ + S| Save Configuration|

### Command Line Arguments
|short|long|Description|
|-|-|-|
|`-h`| `--help` | Prints help information |
|`-V`| `--version` | prints app version |
|`-i`| `--info` | Prints build information |
|`-m`| `--manual`| Prints manual |

## Building
Requirements:
* Rust compiler: https://www.rust-lang.org/tools/install
* Minimum rust version: `1.75`
* A decent computer if you don't want to wait a while:
* *At least* 4 cores,
* *At least* 8GB of RAM

(Linux) Dependencies:
* `fontconfig`
* `libasound2-dev` (If building with `audio` feature)

Clone the source code (latest):
```shell
git clone https://github.com/B0ney/xmodits
```

Alternatively, you can download different versions from: https://github.com/B0ney/xmodits/tags

Compile:
```shell
cd xmodits

cargo build --release
```

**NOTE**: Older versions will have slightly different build instructions.
Additionally, versions below [v0.9.8](https://github.com/B0ney/xmodits/releases/tag/0.9.8) are CLI only.

### Build Flags

|Feature | Description | Enabled by Default? |
|-|-|-|
|``audio``|Add audio playback, used to preview samples.|**yes**|
|``built``|Includes metadata about the binary and the environment it was compiled in. Useful for bug reporting.|**yes**|
|``jemalloc``| (*nix only) Use the [jemalloc](https://jemalloc.net/) memory allocator. Used to mitigate memory fragmentation which can improve memory footprint. |no|
|``wgpu``| Enables hardware acceleration (`DX12`/`Vulkan`/`Metal`). |no|
|``iced_gif``| Include animated GIF | **YES**|
|``manual``| Bundle a simplified readme in the application | **yes**|

For example, to compile XMODITS with ``jemalloc`` and ``wgpu``:
```shell
cargo build --release --features="jemalloc","wgpu"
```

Compile XMODITS with default features disabled:
```shell
cargo build --release --no-default-features
```

### Build flags used in official releases:
|Target|Features|
|-|-|
|Windows|`audio`, `built`, `iced_gif`,`manual`|
|MacOS|`audio`, `built`, `iced_gif`,`manual`, `wgpu`|
|Linux|`audio`, `built`, `iced_gif`,`manual`, `jemalloc`|

## License
XMODITS is licensed under the GPLv3, see [license](LICENSE) for more detail.

## Other xmodits projects

|Program| License|Description|
|--|--|--|
|[XMODITS-CLI](https://github.com/B0ney/xmodits-cli) | LGPLv3 | xmodits cli app|
|[XMODITS-PY](https://github.com/B0ney/xmodits-py) | LGPLv3 | xmodits Python library. [PyPi link](pypi.org/project/xmodits-py/)
(Mainly used for [DawVert](https://github.com/SatyrDiamond/DawVert))
|
|[XMODITS-LIB](https://github.com/B0ney/xmodits-lib) | MPLv2 | xmodits core library|

## Special Thanks
- The GUI was made with [Iced](https://github.com/iced-rs/iced)
- [0x192](https://github.com/0x192) (and contributors) for their [Universal Android Debloat tool](https://github.com/0x192/universal-android-debloater/). I've learned a lot of gui stuff from that project.
- [SatyrDiamond](https://github.com/SatyrDiamond)'s [DawVert](https://github.com/SatyrDiamond/DawVert), A program to convert different daw project files to other formats.
- The animated fox gif was obtained from: https://github.com/tonybaloney/vscode-pets
- [Halloy](https://github.com/squidowl/halloy)