Code Monkey home page Code Monkey logo

xmodits's Introduction

XMODITS Logo

XMODITS

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

GitHub all releases GitHub GitHub release (with filter) Repo size "Release RSS Feed"

Download

You can download builds for xmodits here.

If you wish to build from source, go to building.

If you prefer to use a minimal version of this tool, a command line version of xmodits can be found here. Additionally, the command line version has more supported architectures.

Supported Tracker Formats

Extension Format
.it Impulse Tracker
.xm Extended Module
.s3m Scream Tracker 3
.mod Amiga Pro Tracker
.mptm ModPlug Tracker module
.umx Unreal Music Package (Containing above)

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).
  • 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

Click to show more

Selecting tracker modules Ripping samples from 33 tracker modules XMODITS has finished ripping with no error. Yay!

Click here 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.
  4. Press "Start"
  5. 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:

(Linux) Dependencies:

  • fontconfig
  • libasound2-dev (If building with audio feature)

Clone the source code (latest):

git clone https://github.com/B0ney/xmodits

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

Compile:

cd xmodits

cargo build --release

NOTE: Older versions will have slightly different build instructions. Additionally, versions below v0.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 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:

cargo build --release --features="jemalloc","wgpu"

Compile XMODITS with default features disabled:

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 for more detail.

Other xmodits projects

Program License Description
XMODITS-CLI LGPLv3 xmodits cli app
XMODITS-PY LGPLv3 xmodits Python library. PyPi link
(Mainly used for DawVert)
XMODITS-LIB MPLv2 xmodits core library

Special Thanks

xmodits's People

Contributors

b0ney avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

xmodits's Issues

Add Custom Filters

While XMODITS is designed for bulk extraction, it would be convenient to specify what kind of files it should rip.

Internally, if "Strict Loading" is checked, then it will only allow files with the supported extensions:

  • it
  • xm
  • s3m
  • mod
  • umx
  • mptm

With custom filtering, it will be possible for the end user to finely tune these values.

Additionally, there will also be more properties to filter by:

  • Size - Only allow files if their binary size fits within a particular range, or if they go below/exceed a threshold.
  • Date - Only allow files if their date of creation (or modification) lies within a specified range, or it was created before/after a date.

When filtering by filename, these properties will suffice:

  • starts with
  • ends with
  • contains

Though, adding regex support can improve flexibility.

bash: cargo: command not found

after finding a track that is smaller, even when uncompressed, it now flashes this message, sometimes not even showing it. i use git so maybe thats the problem but idk

losing loop points (.it .mod .xm .s3m)

so i just dumped 4600 modules to wav-samples, and realized all the loop-points are gone.
is there a way of using xmodits so that the loop-points are not lost? i'm trying to load the samples into ST3/IT2.

Sample player should display loop points

Currently, only the waveform and play cursor is rendered. It would be more insightful if we could also see a sample's loop points, and also play samples with looping.

[MOD] Could not dump from this particular module.

Module in question: synthmat.zip

This MOD file was made in 1996. So it should narrow down the possibility of it being made with Ultimate SoundTracker?

Issue: Neither Schisim Tracker nor my program can properly access data from this module.

Looking at the binary structure from a hex editor shows it doesn't follow the ordinary Protracker Module format I'm familiar with.

However, VLC and Audacity can play this module fine (although vlc will show garbled text if you view the comments).

I'll do some more research and document my findings.

Perhaps, I've underestimated the complexity of the MOD format...

Mac OS Support

Self assigned issue so I won't forget.

Experimental builds can be found here: #28

Differing exports from .it and .mod files

It's worth nothing that I'm using schismtracker, a modern implementation of impulse tracker, for my .it file.

I used xmodits to export the audio files from the song "apoplexy.mod", as well as my "apoplexy-stereo.it" edit. The edit was created using the exact same instruments from the original .mod file. However, upon exporting these, the .it exports have a halved sample rate and are pitched down by an octave. I've attached a video that also shows this comparison.

2024-03-05.13-46-55.mp4

I've also uploaded both files to Google Drive for analysis, as I assume the problem exists within the files themselves. This isn't a pressing issue, as I can get the original samples from the .mod file, but it's likely worth looking into.

XM Error: "pattern packing type should be 0, but it's 0x??"

If you've received this error, I am aware of this issue.

This error was created to mitigae an out of bounds panic. It will be removed once I've properly implemented XM sample ripping.

Please do not upload your module in question, I already have ~4500 XM files to test.

Export Samples to 8SVX

Hi! This is unreal - I'm wondering if rather than exporting to WAV if it's possible to export to the original file format? This would be super useful in generating a usable samples folder from a bunch of MOD files, to load directly into ProTracker for example.

Originally posted by @ferro4prez in #22

Custom Website for Easier Downloads

As I plan on adding more platforms, this would consequently make the releases more convoluted.

Not everyone knows how to navigate GitHub, so creating a website should help.

bash: command not found

I put an .xm into build-multi.sh but my .xm file is 1k mb, could that be the source of it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.