Coder Social home page Coder Social logo

discogs-jockey's Introduction

Discogs-Jockey

A tool to help DJs to train their mixing using a DJing challenge.

Quick start

Either install this package, or just download it and work from inside the Discogs-Jockey directory. Export your collection from Discogs as a .csv file, and put it in a directory called collection. Then run Play_Discogs_Jockey.py using Python.

The challenge

The rules of the challenge are pretty simple: you play a set in which each record played must to be chosen from a small pool of records drawn randomly from their Discogs collection. The idea is to force the DJ to practice their mixing skills by limiting choice.

The challenge proceeds as following:

  1. A record is drawn at random from the shelf (the full collection) and place in the crate.
  2. DJ can continue, or request more records be drawn up to a limit (crate_size option).
  3. DJ chooses any record in the crate and mixes it in.
  4. Records remaining in the crate are either discarded or returned to the shelf (replace option).

This continues, each round starting with a fresh crate, until the shelf is empty or DJ decides to finish. __

To do list

Point scoring

It would be good to disincentivise drawing the maximum allowed number of records, so a points system could be used. Take an example in which crate_size=5; the following could be awarded at each round:

n records drawn Points
1 3
2-3 2
4-5 1

Alternative challenge

As an alternative to emptying the crate at each round, discarding unplayed records could stay in the crate, taking up space so that the DJ is eventually forced to choose one of them. However, they can earn the right to remove an unplayed record every few rounds or so.

To do

Nobody wants to have to open their laptop and run a python script while DJing. Discogs Jockey can be made into a proper app by implementing the following improvements:

  • Convert from Python 2.7 to 3.5 DONE
  • Use the Discogs API to retreive user collection
  • Develop a simple GUI with PyQT
  • Display cover art and tracklisting
  • Allow interaction by clicking/touch
  • Port to Android and iOS

Look after your ears, tinnitus is no joke.

discogs-jockey's People

Contributors

ap-e avatar

discogs-jockey's Issues

Order of options displayed changes when new option drawn

Since records in crate are accessed for display via their release_id (their key in the records dict), they do not maintain order (i.e. order of insertion) when a new record is added from shelf. Instead, the order represents the order of the release_id (i.e. release date) of each record. For example (illustrative code only):

# Draw first record
>>> crate.add_record(shelf.random_record(1))
>>> io.display_crate(crate)
1. R.O.S.H. --- For My Bristol Friends 
# Draw again, order is changed
>>> crate.add_record(shelf.random_record(1))
>>> io.display_crate(crate)
1. Instra:mental --- Let's Talk / Vicodin # should be 2nd
2. R.O.S.H. --- For My Bristol Friends
# Draw again, order changes again
>>> crate.add_record(shelf.random_record(1))
>>> io.display_crate(crate)
1. Instra:mental --- Let's Talk / Vicodin
2. Barnt --- What Is A Number, That A Man May Know It? # should be 3rd
3. R.O.S.H. --- For My Bristol Friends 

Solutions include:

  • Changing crate be a new subclass of Crate which contains some system recording the order of entry of records via add_record(), such as the addition of a simple {slot: release_id} dict to represent slots. This may also require renaming of the original Crate class to something more generic.
  • Changing Crate.records from a dict to a collections.OrderedDict.

The latter option seems simplest.

Store authorisation information

A user has to authorise each time they run discogs-jockey, which is annoying at the very least. Can the authorisation be stored locally somehow?

Post-set analysis shows nothing

When playing a set from a collection accessed directly from discogs, the "tracklist" printed out is empty. No reason why this should be.

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.