Giter VIP home page Giter VIP logo

eterna-milonga's Introduction

eterna-milonga: Eterna Milonga

Frozen in amber (for now) ...

Got a little bit into this project and determined folks would rather have an actual streaming station than use Spotify. So, check out Radio Tanda for that, istead.

I'd still love to flesh this out someday, or hand the idea over to someone else.

The plan

  • Distill my last 10+ years' archives of milonga/encuentro/festival playlists into known-good tango tracks
  • Put those into a spreadsheet and pull out the singer, orquesta, year, dance style, etc for future databasin'
  • Query the Spotify API to get the Spotify URI references for each of those tracks
  • Pseudocode the logic for building tandas that obey the basics of The Tango Rules™
  • Pseudocode the logic for building those tandas into milonga-length playlists that keep orquestas sanely spaced
  • Figure out the best means for getting abovementioned spreadsheet into ... some kind of relational database ... that will both be germane to this project and will teach me things I can use later
  • Real-code the tanda logic (output just as a list of Spotify URIs)
  • Create super-basic proof-of-concept UI with embedded Spotify iframes for single tanda at a time
  • Clean up the tanda logic to stop partial tandas from appearing in the UI (this happens when there aren't enough songs in the database to fulfill the tanda rules) and ignore La Cumparsita for now
  • Atone for my JavaScript sins (anyone want to help?) and get the tanda logic to actually be robust
  • Real-code the playlist logic (output just as a list of Spotify URIs)
  • Learn how to feed Spotify a list of URIs and get a playlist back in return
  • Build a UI for this thing: push a button, get a playlist built in your personal Spotify account
  • Add a pref: three- or four-song tango tandas?
  • Add a pref: three- or four-song vals tandas?
  • Add a pref: cortinas, y/n?
  • Add a pref: choose a playlist length
  • Add a pref: choose a cortina (specific track, or maybe just genre)

License

MIT

eterna-milonga's People

Contributors

dependabot[bot] avatar jessicaschilling avatar

Stargazers

 avatar

Watchers

 avatar  avatar

eterna-milonga's Issues

Tanda logic: pseudocode

  • Pick a random trackID
    • {note: if tanda is generated as part of a playlist, this track will be supplied by playlist logic to ensure it fits into tanda-order rules: right dance type, OK orquesta/singer}
  • Get its type, orquesta, singer, year, spotifyID, prettyTitle
  • Get all the other trackIDs that ...
    • Have same type
    • Have same orquesta
    • Contain same singer (contain, so that if a track only has one singer, it can match multi-singer tracks containing that one singer)
    • Have year value within +-3 on either side
    • Do not have "cumparsita" in prettyTitle
  • Of those, randomly pull 2 trackIDs
  • If there aren't 2 more, start over
  • Output those 3 trackIDs

Playlist logic: pseudocode

Main logic

  • Build a first tanda of type tango
    • Specify year<1945
    • Specify singer=false
  • Repeat 3 times: {note: this will eventually be variable by milonga length}
    • Build a tanda of type tango
      • Pick a random trackID of type tango
      • Do the subroutine for playlist-appropriateness
      • Do the subroutine for building a tanda
    • Build a tanda of type vals
      • Pick a random trackID of type vals
      • Do the subroutine for playlist-appropriateness
      • Do the subroutine for building a tanda
    • Build a tanda of type tango
      • Pick a random trackID of type tango
      • Do the subroutine for playlist-appropriateness
      • Do the subroutine for building a tanda
    • Build a tanda of type tango
      • Pick a random trackID of type tango
      • Do the subroutine for playlist-appropriateness
      • Do the subroutine for building a tanda
    • Build a tanda of type milonga
      • Pick a random trackID of type milonga
      • Do the subroutine for playlist-appropriateness
      • Do the subroutine for building a tanda
    • Build a tanda of type tango
      • Pick a random trackID of type tango
      • Do the subroutine for playlist-appropriateness
      • Do the subroutine for building a tanda

Subroutine: playlist-appropriateness

  • Get its orquesta, singer
  • Check back last 6 tandas for match in orquesta or singer
    • If match, fail and start over
    • If no match, pass and continue

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.