jammer
light-weight CLI music player with Soundcloud, Youtube, Rss, Midi Support for Win & Linux
git clone https://github.com/jooapa/jammer.gitjooapa/jammer
Jammer — light-weight CLI music player
Introduction
Jammer is a simple CLI music player that supports playing songs from your local files, Youtube and Soundcloud.
Compatible with Windows, Linux, (most likely works on MacOS too, but i have no way to compile to mac)
- The player doesn't stream the songs, but downloads them to local storage.
- The Jammer folder is located in the user's home directory and contains the downloaded songs, playlists, settings, keybinds, locales and effects modification.
- Jammer uses Bass for playing the songs and ManagedBass for being able to use it with C#, SoundCloudExplode, YoutubeExplode, yt-dlp for downloading the songs and Spectre.Console for the UI.
Table of Contents
- Install/Update
- Usage
- Supported formats
- M3U and M3U8 Support
- MIDI support
- RSS
- Streams
- Soundcloud Client ID
- YouTube Download Backends
- Jammer Location
- Environment Variables
- Themes
- Visualizer
- Effects
- Language support
- Developing
- Build / Run yourself
- Known Issues
Install/Update
Install
Github latest Release
Linux version of Jammer requires fuse2. Ubuntu 22.02 or newer install apt install libfuse2 ffmpeg
Update existing
jammer --update
Usage
when using Soundcloud or Youtube links do not forget to use https:// at the start.
# examples of how to use jammer jammer [song] ... [folder] jammer https://soundcloud.com/username/track-name jammer https://soundcloud.com/username/sets/playlist-name jammer https://youtube.com/watch?v=video-id jammer https://youtube.com/playlist?list=playlist-id jammer https://raw.githubusercontent.com/jooapa/jammer/main/npc_music/616845.mp3 jammer https://raw.githubusercontent.com/jooapa/jammer/main/example/terraria.jammer jammer https://anchor.fm/s/101ec0f34/podcast/rss jammer "path/to/song.mp3" jammer --start # opens jammer folder jammer --update # checks for updates and installs jammer -h, --help # show help jammer -D # debug mode jammer -v, --version # show version ## these commands are for the playlists in the <jammer/playlists> folder jammer -p, --play <name> # play playlist jammer -c, --create <name> # create playlist jammer -d, --delete <name> # delete playlist jammer -a, --add <name> <song> ... # add song to playlist jammer -r, --remove <name> <song> ... # remove song from playlist jammer -s, --show <name> # show songs in playlist jammer -l, --list # list all playlists jammer -f, --flush # deletes all the songs in songs folder jammer -gp, --get-path # get the path to the <jammer/songs> folder jammer -hm, --home # play all songs from the <jammer/songs> folder jammer -so, --songs # open <jammer/songs> folder
Example of making a playlist in cli
jammer -c new_playlist jammer -a new_playlist "https://www.youtube.com/playlist?list=PLnaJlq-zKc0WUXhwhSowwJdpe1fZumJzd" jammer -p new_playlist
Supported formats
Jammer supports the following audio formats: .mp3, .ogg, .wav, .mp2, .mp1, .aiff, .aif, .mod, .mo3, .s3m, .xm, .it, .aac, .adts, .mp4, .m4a, .m4b, .mid, .midi, .rmi, .kar
- JAMMER Jammer playlist
- FOLDER Folder/Directory (support playing all audio files within a folder)
- YOUTUBE Youtube video/playlist
- SOUNDCLOUD Soundcloud song/playlist
- RSS RSS feed
MIDI support
Jammer supports playing .mid, .midi, .rmi, .kar files. To play, you need to have a SoundFont file .sf2, .sf3, .sfz, sf2pack
Here is one sf2 file you can use ChoriumRevA.SF2, This is BASS's recommended SoundFont file.
To change the SoundFont file, press G (default keybind).
Link to a soundFont by path: This will link the SoundFont file by path. This will not copy the SoundFont file to the <jammer/soundfonts>.
Import soundfont by path: This will copy the SoundFont file to the <jammer/soundfonts>.
Will show all the SoundFont files in the <jammer/soundfonts> folder.
RSS
Jammer supports playing audio from RSS feeds. You can add an RSS feed by the url. Then you can open the rss, and it will show all the audio files in the feed.
Streams
Streams are filtered views of your Jammer playlists that allow you to play specific subsets of songs based on tags or properties.
Currently available stream:
Favorites Stream (fav / favorites)
The favorites stream plays only songs that have been marked as favorites using the IsFavorite tag.
Usage:
# Play favorites from a specific playlist jammer -p playlist:fav jammer -p epic:favorites # Play favorites from a playlist file jammer example.jammer:fav
How to favorite songs:
- Press
Ctrl + F(default keybind) while playing a song to toggle its favorite status - Favorited songs will be marked with a ★ symbol in the player interface
This allows you to curate your favorite tracks within any playlist and easily access them later without creating separate playlist files.
Themes
You can create your own theme by pressing T (default keybind)
Select 'Create a New Theme' and write the theme's name. Go to <jammer/themes>, you should see name.json. It will contain all the information needed for creating a theme.
Visualizer
You can change the visualizer style in custom Themes.
To change the visualizer settings, you can change the Visualizer.ini file in the root folder.
Effects
- Reverb
- Echo
- Flanger
- Chorus
- Distortion
- Compressor
- Gargle
- Parametric Equalizer
These can be changed in the Effects.ini file in the jammer folder.
Jammer Location
- Windows:
C:\Users\username\jammer - Linux:
~/jammer
Environment Variables
You can customize Jammer's storage locations using these environment variables. They can point to either directories or files depending on the variable:
JAMMER_CONFIG_PATH- Path to the configuration directoryJAMMER_SONGS_PATH- Path to the songs storage directoryJAMMER_PLAYLISTS_PATH- Path to the playlists directory
Examples:
Windows:
$env:JAMMER_SONGS_PATH = "D:\Music\JammerSongs" $env:JAMMER_CONFIG_PATH = "D:\AppData\Jammer"
Linux/macOS:
export JAMMER_SONGS_PATH="/mnt/music/jammer_songs" export JAMMER_CONFIG_PATH="/home/user/.config/jammer"
M3U and M3U8 Support
Jammer supports m3u and m3u8 playlists. You can play them but with pretty limited functionality.
m3u files can be played just by opening them with Jammer. But cannot be opened with the --play, -p command from the <jammer/playlists> folder. You can Save as (default keybind Alt + S) the m3u file, Thus creating a JAMMER playlist to <jammer/playlists> folder.
Starting the m3u or m3u8 file with #EXTM3U and example of the m3u of all the features that are supported.
#EXTM3U #EXTINF:0,Lady Gaga - Telephone ft. Beyoncé https://www.youtube.com/watch?v=Zwnvgz3ey78 #EXTINF:0,Epic Music /home/user/epic music/epic_music.mp3 /tmp/secret_klinoff.mp3
Language support
Translations may not be up-to-date
Currently supported languages:
- English
- Finnish (antonako1)
- Portuguese (Natanaelfelixx)
Create new translation by copying already existing .ini file from /locales and translating it.
Soundcloud Client ID
soundcloud every now and then changes the client id, which is not cool, so this allows change allows the user to change it :) You can change the client id by going to the settings and changing the client id.
how to get the id
- open up the soundcloud.com
- open the inspect element -> Network tab
- start playing some random song
- you start to see some entries in the network tab. you should see some thing like
me?client_id=wDSKS1Bp8WmdlRPkZ7NQXGs67PMXl2Nd
or you can use the automatic client id fetcher, that is located in the settings menu. (Might crash on linux)
YouTube Download Backends
Jammer supports two different backends for downloading YouTube content:
YoutubeExplode (Default)
The default backend that works out of the box without any additional setup.
yt-dlp Backend
An alternative backend that uses yt-dlp for downloading YouTube content.
Setup Requirements:
Windows:
In Jammer installation folder
- Download
yt-dlp.exefrom the official releases - Place the
yt-dlp.exefile in the same folder asjammer.exe
Environment Variable
- Alternatively, place the
yt-dlp.exebinary to environment variableJAMMER_YTDLP_BIN
Linux/macOS
Global Installation
- Install yt-dlp and ensure it's available in your system PATH:
# Using pip pip install yt-dlp # Or using your package manager # Ubuntu/Debian sudo apt install yt-dlp
Local Installation
- place the
yt-dlpbinary to environment variableJAMMER_YTDLP_BIN
Switching Backends
You can change between backends by pressing B (default keybind) while Jammer is running.
Star History
Developing
Build / Run yourself
Download the BASS and BASS_AAC libraries from the un4seen website or the libaries are included in the libs folder.
On Linux, you need to add the libraries to the $LD_LIBRARY_PATH.
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH
On Windows, you need to add the libraries to the executable folder.
Install submodules
Jammer uses git submodules. To get the submodules, run this command in the root folder.
git submodule update --init --recursive
Scripts
See scripts/README.md for helper script documentation, including how to use scripts/dotnet-install.sh on Linux distros that do not provide a usable dotnet package.
Run
dotnet run --project Jammer.CLI -- [args]
Build
Windows
dotnet publish -r win10-x64 -c Release /p:PublishSingleFile=true -p:DefineConstants="CLI_UI" --self-contained
Linux
Add BASS and BASS_AAC libraries to the executable folder and to $LD_LIBRARY_PATH.
dotnet publish -r linux-x64 -c Release /p:PublishSingleFile=true -p:UseForms=false -p:DefineConstants="CLI_UI" --self-contained
Linux AppImage release
AppImage requires fuse. To install fuse
sudo apt install libfuse2
To install appimagetool
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage chmod 700 appimagetool-x86_64.AppImage
To create AppImage run build-appimage.sh
or if you want to build it from usb
sh -c "$(wget -O- https://raw.githubusercontent.com/jooapa/jammer/main/usb-appimage.sh)"
Build script for NSIS installer
.\Jammer.CLI\buildcli.bat
you can use update.py to change the version of the app.
|-Major
||--Minor
|||---Patch
python update.py 101
Known Issues
Perfect app, no issues.
more like this
Scythe
SCYTHE is a lightweight, C#-based game engine focused on modifiability and rapid iteration using Raylib.
meine
meine 🌒 - A CLI file manager and system utility built with Textual. It combines intuitive command parsing with rich t…
RaylibWasm
.Net 10 (.Net 8+) webassembly starter project using raylib-cs nuget 7.0.2 and raylib 5.5
