jSona is a configuration file(JSON), vlcj and JavaFx based music and media player. The aim of jSona is to always keep your playlists in synch with your music folders. For fast fulltext search jSona uses Apache Lucene. The follwing features are fully supported:
- Supports all common media formats that VLC supports
- Load artist information and images via last.fm and MusicBrainz
- Include your music folders
- Create multiple playlists
- Fulltext search
You want new features? On the following page you can vote for and submit new feature requests. http://jsona.idea.informer.com
jSona has a dependency to VLC3, which only can be found here: http://nightlies.videolan.org/build/.
sudo add-apt-repository ppa:videolan/master-daily
sudo apt-get update
sudo apt-get install vlc
If you want to develop under a linux system you need to recompile the OpenJDK beacause JavaFX is not included, or you have to install Oracles JDK where JavaFX is included. To enjoy a good JavaFX support please use Java SDK 8 within your IDE.
Here is an example of the default configuration file. You have to setup your VLC path correctly. If you use Java 32-bit/64-bit you also have to use VLC-32-bit/64-bit.
{
"ALLOW_JSONA_TO_OVERWRITE_ME": true,
"MAX_SEARCH_RESULT_AMOUNT": 512,
"VOLUME": 100,
"FOLDERS": [
"D:/media/music",
"C:/share"
],
"INCLUDE_EXTENSIONS": [
".mp3",
".wav",
".wma",
".flc",
".aac",
],
"PLAYBACK_MODE": "NORMAL",
"RECENTLY_ADDED_UNITL_TIME_IN_DAYS": -7,
"THEME": "grey",
"KEY_SKIP_TIME": 10,
"WINDOW_OS_DECORATION": true,
"TITLE": "jSona - open source project by Frank Roth",
"MIN_HEIGHT": 600,
"MIN_WIDTH": 720,
"COLORIZE_ITEMS": true,
"SCANNER_AND_TAGGER_LOGGING_GRANULARITY": 128
}
And here an explanation of all possible attributes:
If you set this value to true then jsona will overwrite your config.json with the current jSona config. For example if you change the volume in the player then the VOLUME value gets overwritten. There only a few configuration attributes that can be change during runtime (e.g.: PLAYBACK_MODE).
Maximum search results of the lucene engine (smaller is faster)
Default startup volume. Will be overwritten by jSona (always save the recently changed volume).
Your music folders. Care of JSON-Syntax and correct backslashes (/). jSona also supports the usage of the Uniform Naming Convention and folders in a network (e.g.: "\\servername\folder\path"). See example above...
This array says what kind of files you want to add to jSona. If it is empty or this field is deleted then every file with every extension will be included to your playlists.
Playbackmode of jSona. Choose one of them: {NORMAL, SHUFFLE}. Will be overwritten by jSona (always save the recently changed playback mode).
How long do you want to show new songs in the "New" tab. If you choose -7 then new songs will be displayed for one week in the "New" tab. This number should always be negative.
Currently there is only one theme available: {"grey"}.
If you change the duration slider with the help of the arrow keys(left or right) or hotkeys the slider rewind or skips 10 seconds.
If you set the value on false the normal OS window decoration will be used. If you set the value on true it has no os window decoration. It will look a little bit more beautiful!
Window title of jSona. Will only be displayed if the WINDOW_UNDECORATED property is set to false.
Height of the window in pixels.
Width of the window in pixels.
Minimum window height.
Minimum window width.
If the value is set to true the same music items will be displayed with a different smooth background color. If the value is set to false then the default JavaFX list background will be used (see screenshot above).
There is the possibility to define rules to detect music information with the help of the file path. Currently there are two kind of rules {"ROOT_SUBFOLDER_LEVEL_RULE", "FILENAME_RULE"}. The "ROOT_SUBFOLDER_LEVEL_RULE" is a rule based on the subfolder level according to the root directory. With the help of the "FILENAME_RULE" you can match everything according to the filename (not file path) of the file. It is possible to ignore file endings and to replace underscores with a space.
The follwing examples should help you with to use these rules.
If you have a folder structure like this and this is your music file name:
C:\media\music\Rock\ACDC\Highway to Hell\03 - Walk All Over You.mp3
Your root folder is
C:\media\music
With the follwing rules you can match the genre (%GENRE%), the artist (%ARTIST%), the title (%TITLE%), the album (%ALBUM%) and the track number (%TRACK_NO%):
{
...
"FILEPATH_BASED_MUSIC_INFORMATIONS": [
{
"rule": "ROOT_SUBFOLDER_LEVEL_RULE",
"params": {
"PATTERN": "%GENRE%",
"REPLACE_UNDERSCORES_WITH_SPACES": false,
"FOLDER_LEVEL": 1
}
},
{
"rule": "ROOT_SUBFOLDER_LEVEL_RULE",
"params": {
"PATTERN": "%ARTIST%",
"REPLACE_UNDERSCORES_WITH_SPACES": false,
"FOLDER_LEVEL": 2
}
},
{
"rule": "ROOT_SUBFOLDER_LEVEL_RULE",
"params": {
"PATTERN": "%ALBUM%",
"REPLACE_UNDERSCORES_WITH_SPACES": false,
"FOLDER_LEVEL": 3
}
},
{
"rule": "FILENAME_RULE",
"params": {
"PATTERN": "%TRACK_NO% - %TITLE%",
"IGNORE_FILE_ENDING": true,
"REPLACE_UNDERSCORES_WITH_SPACES": true
}
}
]
}
Every matching %VARIABLE% will be trimmed at the ending, so it does not mather if you choose %TRACK_NO% - %TITLE% or %TRACK_NO%-%TITLE% as a pattern. It is also possible to ignore areas in the path by producing non declared Variables like: %TMP%, %I_DONT_NEED_THAT%, %IGNORE%... you can create anything...
Logging every file in the scanner and tagging process can be very time expensive. Because of that you can define the granularity of the scanner and tagging logging. If the value is set to 1 every file is logged (time expensive). If the value is set to 128 only every 128th and the last file will be logged. This value can be every number > 0.
Here is a list of all modifiers and keys that can be used: https://github.com/frankred/jSona/wiki/Key-Codes. Currently only global hotkeys work. Supported application events are: {PLAYER_VOLUME_UP, PLAYER_VOLUME_DOWN, PLAYER_PLAY_PAUSE, VIEW_HIDE_SHOW, PLAYER_NEXT, PLAYER_PREVIOUS, PLAYER_TIME_UP, PLAYER_TIME_DOWN}
{
...
"HOTKEYS": [
{
"key": 107,
"event": "PLAYER_VOLUME_UP",
"global": true
},
{
"key": 109,
"event": "PLAYER_VOLUME_DOWN",
"global": true
},
{
"key": 19,
"event": "PLAYER_PLAY_PAUSE",
"global": true
},
{
"key": 49,
"modifiers": [
128
],
"event": "VIEW_HIDE_SHOW",
"global": true
}
],
}
- Bugfixing {ListView, Layout}
- Repeat mode added (THX Naios)
- File extension whitelist mechanism added (THX Naios)
- Bugfixing {ListView, Title Information changed, ListView layout, fileCreated, fileModified}
- Equalizer implemented (for testing only, unstable, unsavable)
- Loading animation for each folder added in frontend.
- HOTKEYS can now be defined in the config.json.
- VOLUME_UP_DOWN_AMOUNT amount for hotkeys can be defined in the config.json.
- Music information like artist or title can now be detected from the filepath with the help of detector rules in the config.json.
- Logging granularity of file scanner and tagger can now be defined in the config.json.
Download the current zip file and extract it. Then put in your correct VLC path into the config.json file and start jSona with the following command.
java -jar jSona-1.0.4.jar
jSona uses JavaFX so a current Java virtual machine with JavaFX support should be installed.
If you want to run jSona without getting showed the console (only works on Windows) use the following command:
start javaw -jar jSona-1.0.4.jar
Here is a screenshot of jSona that explains the easy to use user interface.
This project is based on a set of amazing projects. Thank you to all programmers!
MIT - Free Software, Hell Yeah!