sghpjuikit / player

Audio player and management application.
22 stars 2 forks source link

icon Spit Player Appveyor Build status Travis Build Status

What is this?

Spit Player is a ubiqutious widget-based desktop application. It has modular ui and behavior, including audio playback/library, Phllips Hue integration or voice control features. Uses VLC under hood & css for looks. Built around plugins and widgets.

Is this ready? Yes. Executable downloads are not provided, but can be easily built. Well tested on Windows 8.1 and 10. Linux and OSX compatible, but largely untested.

Can look like this:

Looks like this

Can do this:

Can do this

Do I need this?

You decide. This application has been born out of frustration with how applications today look and are used. The major use cases are:

Audio playback & management system

Ever lost your entire library or song ratings due to corrupted database file? Ever wanted to have song chapters or other cool features? Ever needed multiple playlists or display/manipulate your songs in a way that wasn't possible for some reason?

This application addresses a lot of such issues. However, it may lack features you may be used from other media players, so it may not be for you.

Multi-application

Ever wanted to do things your way?

Pluggable parts of the applications are called widgets and can be developed or changed while the application runs. This application provides several useful widgets, but most importantly the necessary infrastructure to manage and use them conveniently, such as modular layout, different widget launch strategies, be it different types of windows or even separate process.

If you know Java/Kotlin, you can make your own app with a simple text editor and literally few lines of code. Just write your code, hit save and watch as it auto-compiles and reloads in UI. All that with included support for powerful type-safe configuration, skins and access to the internals.

See how.

Voice assistant

The voice assistant is largely separate, but also integrated functionality capable of full real-time interaction with user. It uses multiple AI models for text-to speech, llm, speech-to-text to provide for voice control over devices as well as actual chat. It supports voice cloning, multiple speakers, and more.

See voice assistant documentation

Use

Download link coming in the future. Building from the latest sources:

  1. Download & prepare project
  2. Build the application
    1. ./gradlew build builds the application
    2. ./gradlew jar creates jar & copies dependencies to /lib
    3. Application is now build in app directory
  3. Deploy application
    1. ./gradlew linkJdk to link app/java to JDK
    2. copy app directory to whenever you want
      • to be fully portable, turn the link app/java into a directory (remove link, copy target directory with same name)
  4. Run application

Features

Guiding Principles

Play audio

Manage audio

Song database:

Management system is only as good as its user interface. There are powerful tables that try to be as flexible as possible. Tables:

Tag audio

Spit Player supports reading & writing of song tags

Supported are:

The aim is to be interoperable with other players, where possible. Noteworthy or nonstandard supported tags include:

Rating

Configurability

All settings and entire user interface layout serialize into a human-readable and editable files. These can be edited, backed up or switched between applications.

Modularity

Most of the functionalities are implemented as widgets, that can be loaded, closed, moved and configured separately. Multiple instances of the same widget can run at once in windows, layouts or popups.

Widgets' source files can be created and edited in runtime and any changes will be immediately reflected in the application. This means that if you are a developer you can simply edit code of the .java file, hit save and watch as the widgets are (recompiled and then) reloaded with previous state and configuration.

Widgets

Playback

Controls for playback, like seeking. Supports song chapters.

Playlist

Table or playing songs. Of course, it is possible to use more of them once. Very handy to have a side-playlist sometimes.

FileInfo

Shows cover and song metadata. Supports cover download (url drag & drop) and rating.

Tagger

Tag editor

Converter

Object-object converting facility.

This makes it possible to import song titles from copy-pasted track list found on web by 'cleaning' it up with text line transformations (remove x characters from start, etc.) rather than manually. Changing extension or names of a bunch of files is a piece of cake.

Library & LibraryView

Song tables. User can link them up, so they display increasingly filtered/specialized content. For example, 1st table can display all artists (all unique artists in entire song library), 2nd table linked to 1st would display all unique albums of songs by any artist/s selected in the 1st table. So on until Nth table displays the songs. Combinations are endless. In addition, because of the modular gui, you can set up table size and position as you wish and the layout is not restricted to area of the window (layout has own virtual space, like virtual desktops). Lastly, in is possible to set up widgets (in this case individual tables) to be 'passive' until user allows them to load properly - it is possible to create a multiple views with lots of tables with practically no performance impact at all (by using views only when needed and have them 'sleep', but be prepared and configured all the time).

Image

Image viewer - displays an image

ImageViewer

Displays images and thumbnails for images in a directory

Portability

The application in its self-contained form:

GUI

The Interface is minimalistic but powerful and fully modular.
Modules (widgets) are part of layout hierarchy, which can be manipulated, saved or even loaded as standalone application.

Widgets
Layouts
Windows
Controls

There are multiple improvements over standard JavaFX Controls, mostly using custom Skin set by css. The changes are documented in the source code:

Hotkeys

Usability

More

Screenshots

Show #### Playlist view & timed comments ![Screenshot](assets/screenshots/screenshot_playlists.jpg) #### Action menu with "glass" effect ![Screenshot](assets/screenshots/screenshot_actions.jpg) #### Layout mode with widget links ![Screenshot](assets/screenshots/screenshot_layoutmode.jpg) #### Some widgets on white skin ![Screenshot](assets/screenshots/screenshot_widgets.jpg) #### Comet Game ![Screenshot](assets/screenshots/screenshot_comet1.jpg) ![Screenshot](assets/screenshots/screenshot_comet2.jpg) ### Old skins ![Screenshot](assets/screenshots/screenshot_old1.png) ![Screenshot](assets/screenshots/screenshot_old2.png)

Copyright

player module (sp.it.pl)

This is the application module, containing the source code for the functionality. For now, the sources are provided with no licence.
Which does not mean anything is permitted, it is the opposite. This may change in the future.

widget modules

This is a collection of source codes for widgets for this application, found in app/widgets. For portability reasons, each widget specifies its licence. Usually it is The Unlicense.

util module (sp.it.util)

This is collection of useful utility methods/extension, with primary intention of supporting the player module of this project.

All the sources, unless specifically stated otherwise in the source code file, are under The Unlicense.

demo module (sp.it.demo)

This is a collection of demonstrative projects found on the internet, mostly contributed as answers on stackoverflow.com. The sources are provided with no licence.
Which does not mean anything is permitted, it is the opposite. This is because it would be too time-consuming to find the authors/contributors and figure things out. If you need to use the code, the files contain information about where to find the authors of the code.