Skip to content

0xsuk/finyl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

finyl

finyl is a rekordbox USB compatible multi-stems DJ system for Linux 64 bits that lets you mix audio sources separately. (vocal, instrumental, etc)

finyl.mp4

build

make

(c++20 compiler needed)

Depends on...
in debian: libasound2-dev ffmpeg libsdl2-dev libx11-dev libssl-dev libgif-dev libfftw3-dev

usage

mount rekordbox usb.

./finyl [<soundcard name (default is "default")> <period_size (default is 128)> <fps (default 30)>]
inside [] are optional

use following keys to navigate explorer.
left arrow: back
right arrow: select
alt + up arrow: load track to top deck
alt + down arrow: load track to bottom deck
shift + up arrow: load multi-stem track to top. nothing will happen if track has no stems
shift + down arrow: load multi-stem track to bottom

read Controller::run(); to setup midi.
read Controller::handle_key(char x); to control from terminal.

multi-stems mixing

A song usually consists of vocal, and instrument. The idea of multi-stems mixing is to let the software retain these two or more different sources(=stems) of audio separately, so that you can apply audio effects (volume control, echos, filters, etc) separately. To do that, you need to create stem files from the original file beforehand.

separate.cpp is a utility just for that. It generates stem files from the original files in rekordbox USB.

pip install demucs
make separate
./separate # and follow the printed usage

It takes 30 seconds per track to separate on my machine that takes 7 seconds to make the project.

detail

When user loads a track, say /rekodboxusb/Contents/UnknownArtist/UnknownAlbum/trackname.wav, in multi-stems mode, finyl looks for matching stems files in /rekordboxusb/finyl/separated/hdemucs_mmi/.
Here is the exact stem filepath format that finyl considers a match:
/<rekordboxusb>/finyl/separated/hdemucs_mmi/<anything>-<stem name>-<md5sum of the original file>.<any extension>

./separate creates stem files that finyl considers a match.
By default, the stem file extension is wav, because it is not compressed, thus fast to read. You can change this to anything ffmpeg can decode, by modifying the separate.cpp

In theory, you could use any other audio separation program, or other demucs model. To do that, you just need to replace all occurence of demucs or hdemucs_mmi to something else in the source. However, in my opinion now, demucs performs better and faster than other programs (tried UVR, spleeter), so not going to provide option for them.

note

  • how to list midi device names amidi -l