JavaScript CSS Batchfile HTML Makefile Shell
Permalink
Failed to load latest commit information.
bin
css
dist
html
js
sample
.gitignore
Makefile
README.md
icon.png
mp.png
package.json

README.md

mp: a hybrid music player

Click here to try it online!

This is a music player built on web technologies. It can be used as a standalone cross-platform application (using nw.js or Electron) or as a web page.

The trick here is that the code base is shared: the very same application code that runs the web page is used in a standalone app.

Features, planned and implemented

  • Sound playback
    • Supported formats: all that your {browser,Electron,nw.js} supports
    • Routing to WebAudio graph
  • Playlist
    • Basic control
    • Recursive import
    • Repeat
    • Drag/drop reordering
    • Shuffle
  • Playback control & info
    • Waveform
    • Metadata parsing
      • ID3v1
      • ID3v2
      • Vorbis comments
      • m4a/mp4
    • Seeking
    • Album art
    • Global hotkeys
  • Miscellaneous
    • Realtime visuals
      • Spectrum analyser
      • Big Psyco from Visual Player for DOS
    • Single instance runtime playlist control
    • Single instance runtime playback control

Running

  1. Clone this project
  2. Run it:
    • adjust and run dist/electron/mp.sh [path-to-song-or-playlist]
    • adjust and run dist/nw/mp.sh [path-to-song-or-playlist]
    • launch dist/web/index.html

The web version is also hosted at GitHub pages.

Command line API

[-p] play1.mp3 play2.mp3 ... -q enqueue1.mp3 enqueue2.mp3 ... -c command1 command2

Where command is play, pause, prev or next.

Web version can be controlled by postMessage with the following data object:

{
  command: "control",
  argv: ["array", "of", "command", "line", "arguments"]
}

Compiling

  1. Clone this project
  2. npm install
  3. make

Achievements unlocked

  • Playback via HTMLAudioElement through Web Audio sound graph
  • Waveform visuals via decodeAudioData
  • Realtime visuals using AnalyserNode
  • Metadata parsing thanks to XHR2, ArrayBuffer, DataView and TextDecoder APIs
  • Written in ES2015, bundled using Rollup and good ol' Make
  • CSS compiled with LESS