/blackbird

exploratory music player

Primary LanguageJavaScriptMIT LicenseMIT

blackbird

I am ripping this apart into pieces. Once I finish incorporating streaming media sources in it, hopefully all the moving pieces will fall again together. Also, I badly want to replan the UI.

under development

Exploratory music player

Blackbird lets you explore your beets library in acoustic feature space.

screen


Setting Up

  • Initialize a beets library

  • Install blackbird

    npm install -g lepisma/blackbird
  • Install python dependencies

    # Navigate to source (in local node installation directory, or clone this repo)
    cd ./utils
    pip install -r requirements.txt
  • Run blackbird-setup init to initialize configuration files.

  • You might need to rebuild sqlite3. See here.

  • Compile sass with npm run build if changes are made.

  • beets imports will automatically put songs in blackbird database. Following commands are added to beets.

    # Generate sequential features for given query
    beet features
    
    # Generate coordinates from the sequential features using specified method
    beet coords --type [mean, lstm]
  • Start with blackbird

Music Features

MFCC coefficients of size (20, N) are generated when beet features is called. N depends on length of song, block_reduced (mean) using a block of size (1, 100).

When beet coords is called with mean option, a clipped mean vector of size 20 is used as representation of each song. With lstm option, a keras lstm encoder-decoder model is loaded and resulting middle vector is used as representation. Both cases use TSNE to reduce the 20 vector to 2 and provide coordinates for visualization. Lookout for training notebook and pre-trained models in ./utils.

Commands
  • a / artistArtist mode

    View songs by artist of current song

  • am / albumAlbum mode

    View songs from album of current song

  • s <term> / search <term>Search mode

    Filter using search query. _space_ in query is intersection, + is union, - is except

  • f / freeFree mode. View all items

  • sim / similar → Sort in-mode according to similarity with current song

  • cap <n> / artistcap <n> → Filter artists with less than n songs

  • n <n> / new <n>n recent imports

  • r / repeat → Toggle repeat

  • slp <n> / sleep <n> → Sleep after playing n songs. Set negative n for reset.

  • l / love → Mark songs as loved in last.fm

  • lfm / lastfm → Toggle last.fm integration

  • d / download → Download music from youtube. First command opens youtube, second lets you check metadata for download. Needs ffmpeg for saving mp3s.

Shortcuts
  • ctrl+alt+<right> → Next song
  • ctrl+alt+<left> → Previous song
  • ctrl+alt+<space> → Play/pause
  • ctrl+alt+<down> → Hide to tray
  • ctrl+alt+<up> → Pop to front
  • alt+x → Enter command (while window active)
  • ctrl+w → Exit
Others

There is an emacs package for reading lyrics of current song (./utils/emacs/blackbird.el).

Bugs / Issues

blackbird is under development and therefore has crappy code structure and documentation. Feature addition/removal (and occasional refactoring) keeps happening. Please file issues here.