Skip to content

BardofSprites/conductor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Conductor

A Haskell music organizer with a metadata composition language

conductor.png

Syntax - IN PROGRESS

Something like this will produce a m3u playlist file with the tracks that are obtained with the conditions provided:

songs <- filter(artist == "Nujabes") -- 1. adds Nujabes songs to set
      || filter(genre == "Hip Hop")  -- 2. adds Hip Hop songs to set
      && limit(year > 1990)          -- 3. limit the set to songs made after 1990

otherSongs <- filter(artist == "Aphex Twin") -- 1. Get all songs by  aphex twin
           && limit(count == 100)            -- limit number of tracks in playlist

result <- write $ union(songs, otherSongs) -- merges the sets together

Planned features

  1. [X] Data model for songs (with fields like artist, genre, year).
  2. [X] Parser for filter language (using Megaparsec).
    • [X] Parser for Basic Syntax
      • [X] Comparison
      • [X] Operator
      • [X] Values
      • [X] Fields (Title, Artist, etc)
      • [X] FieldType
      • [X] Comparison validations
    • [X] Parsers for commands
      • [X] Filter
      • [X] Limit
      • [X] Sort
    • [X] command chaining
      • with boolean operators (&& and ||)
  3. [-] Evaluator that applies filters to song metadata.
    • [X] Sort
    • [X] Filter
    • [ ] IN PROGRESS Limit
  4. [ ] Variables
    • [ ] Merge module (union/intersection/etc.. for merging two sets of songs)
    • [ ] writing to .m3u
  5. [ ] Add playlist generation or metadata tagging features.
  6. [ ] CLI interface to specify source dirs, filters, and targets.

About

A Haskell music organizer with a metadata composition language (made for fun and profit)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published