Socket
Socket
Sign inDemoInstall

music-library-index

Package Overview
Dependencies
1
Maintainers
2
Versions
15
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    music-library-index

build a searchable javascript object model given track metadata objects


Version published
Weekly downloads
17
increased by750%
Maintainers
2
Install size
60.4 kB
Created
Weekly downloads
 

Readme

Source

Music Library Index

Given track metadata objects, constructs a searchable object model. This module is used both in the client and the server of Groove Basin.

Features

  • Sort order ignores 'a', 'an' and 'the' in artists, albums, and names.
  • Sorting and searching is case insensitive and diacritics-insensitive.
  • Searching uses word-based filtering (this is how most music player applications implement filtering) on all track fields.
  • Distinguishes albums by name, date, and album artist.
  • Produces these indexes:
    • Artists in sorted order
      • For each of these artists, albums in sorted order.
        • For each of these albums, tracks in sorted order.
    • Albums in sorted order
      • For each of these albums, tracks in sorted order.
    • Tracks by user-defined key.
    • Artists by library-defined key.
    • Albums by library-defined key.
  • Searching allows the use of special constructs:
    • Quoted terms ("...") exactly match every character, including spaces, upper- and lower-case letters, and characters with diacritics. Inside quotes, use \" for a literal quote and \\ for a literal backslash.
    • Terms starting with not: match anything not matched by the rest of the term. For example metal not:metalica or just not:"Justin Bieber".
    • Parentheses can be used to group terms. For example tool not:(opiate live).
    • Use or:(...) to match any of the terms in the parentheses. For example or:(chopin mozart bach). Use further nested parentheses to return to "and"-style matching. For example or:(chopin mozart (johann sebastian bach)).

Usage

var MusicLibraryIndex = require('music-library-index');
var library = new MusicLibraryIndex();

library.addTrack({
  key: "Anberlin/Never Take Friendship Personal/02. Paperthin Hymn.mp3",
  name: "Paperthin Hymn",
  artistName: "Anberlin",
  albumName: "Never Take Friendship Personal",
  year: 2005,
  genre: "Other",
  track: 2,
  albumArtistName: "Anberlin",
});

library.addTrack({
  key: "Anberlin/Never Take Friendship Personal/08. The Feel Good Drag.mp3",
  name: "The Feel Good Drag",
  artistName: "Anberlin",
  albumName: "Never Take Friendship Personal",
  year: 2005,
  genre: "Other",
  track: 8,
  albumArtistName: "Anberlin",
  label: {"favorites_id": 1},
});

library.rebuildTracks();

library.addLabel({
  id: "favorites_id",
  name: "favorites",
});

library.rebuildLabels();

console.log(library.artistList[0]);
console.log(library.trackTable);

Tests

  basic index building
    ✓ trackTable 
    ✓ artistList 
    ✓ albumList 
    ✓ searching 

  compilation album
    ✓ filed in various artists 

  tracks from same album missing year metadata
    ✓ still knows they're in the same album 

  different albums with same name
    ✓ detects that they are different 

  album with a few tracks by different artists
    ✓ only creates one album 

  album by an artist
    ✓ should be filed under the artist 

  album by an artist
    ✓ sorts by disc before track 

  album artist with no album
    ✓ shouldn't be various artists 

  unknown artist, unknown album
    ✓ should be put into the same album 
    ✓ searching should not affect anything 

  album with album artist
    ✓ shouldn't be various artists 

FAQs

Last updated on 18 Nov 2015

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc