{ "info": { "author": "Peter Liljenberg", "author_email": "peter.liljenberg@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "codplayer - a complicated disc player\n=====================================\n\nThis is a music player for old farts who insist on listening to albums\nand like staring at a shelf full of discs to select the right music,\nbut still would like to have all the music on a file server.\n\nTherefore, the main user interface is the CD itself. Insert a disc\nand it will be simultaneously ripped to a file server and played. The\nsecond time the same disc is inserted, it will be played directly from\nthe ripped files.\n\nApart from providing backup of your music, having a soft copy of the\ndiscs allows them to be edited. Some use cases for this include:\n\n* Add artist, title and track information\n* Cut out annoying intros and boring extra tracks\n* Shuffle the tracks of compilation albums\n* Link multi-disc albums so all the discs are played in sequence\n\n\nInstallation\n============\n\nInstallation and configuration instructions are provided in\n[`INSTALL.md`](https://github.com/petli/codplayer/blob/master/INSTALL.md).\n\n\nArchitecture\n============\n\nAt the heart of codplayer is the disc database and the player daemon.\nSupplementing these are various control interfaces and database\nadministration UIs.\n\nThe target system setup is to run the player deamon on a fanless,\ndiskless small computer hooked up to the hifi in the living room,\nwhich is connected over the LAN to a file server which holds the disc\ndatabase. The web control interface and the the database\nadministration web GUI can be hosted on the file server.\n\n\nThe disc database\n-----------------\n\nEach CD is stored in a directory of its own, with the raw PCM data and\nthe table of contents stored in files. The format of the database is\ndescribed in the documentation for the class `codplayer.db.Database`.\nThe disc database must be accessible in the file system of the player.\n\n\nThe player daemon\n-----------------\n\ncodplayerd links the CD reader and the sound output device with the\ndisc database, ripping and playing disc. It is controlled over ZeroMQ\nsockets or via a FIFO in the file system. The current state is sent\nto ZeroMQ subscribers, but can also be read from a local file.\n\n\nPlayer interfaces\n-----------------\n\ncodplayer is intended to support different platforms and control\ninterfaces. E.g.:\n\n* `codctl`: command line interface\n* [Web interface](https://github.com/petli/codplayer-control-node)\n* `codlircd`: IR remote control input events\n* `codlcd`: display state on an LCD and status LED\n* Control apps (none implemented yet)\n\n\nZeroMQ\n------\n\nThe control and state update interfaces are all based on ZeroMQ\nsockets. This is used to allow a clear separation of duties between\ndifferent components (even if they might sometimes be running in the\nsame process).\n\nFor details on the configuration and message formats, see\n`doc/zeromq.md`.\n\n\nDatabase administration\n-----------------------\n\nA web GUI for administering the discs in the database is provided via\nthe REST API provided by `codrestd`. Current features:\n\n* Browse discs, show track listings\n* Edit disc and track details\n* Fetch disc and track details from Musicbrainz\n* Play discs in a codplayer deamon (which may be on another computer)\n\nLow-level administration is also possible with `codadmin`, run it with\n`--help` to see available commands.\n\n\nRipping process\n===============\n\nIf you're generous, the CD format is an elegant solution to the\nproblem of how to read, process and play a digital stream when you had\nto build it all with 74xx chips. If you're feeling more cranky, it's\nan analogue format in digital clothing.\n\nReading the audio samples isn't that tricky on linux, as cdparanoia\ndoes a very good job of salvaging the intention of the mastering\nprocess into PCM files. A bigger problem is reading all the\nadditional information that lurks on the disc: pregap lengths, track\nindices, CDTEXT etc. This \"subchannel\" data is encoded with a kind of\ndigital carrier wave and must be extracted bit by bit:\nhttp://en.wikipedia.org/wiki/Compact_disc_subcode\n\ncdrdao can read this into a `.toc` text file. But if you also let\ncdrdao read the audio samples at the same time, the error correcting\nit does by rereading sections will screw up the subchannel bits and\nyou get distorted TOC data.\n\nConfusing things more, there might be \"hidden\" audio before track 1.\nIf you rip both audio and TOC with cdrdao, the track offsets written\ninto the `.toc` are mostly correct, but pretends that everything\nbefore the first track is silence. If you only read the TOC instead\nwith cdrdao, the file offsets in the `.toc` ignores the hidden track\nand thus doesn't match what cdparanoia ripped.\n\nTo handle all this, codplayer uses the following process when told\nthat a disc has been inserted into the reader:\n\n1. Use libdiscid to read the basic TOC (just track offsets and\n lengths, no pregaps etc).\n2. Look up the disc information in the database, creating a basic\n record from the TOC if this is the first time the disc is played\n3. Check if the disc audio has already been ripped. If not, kick off\n a cdparanoia process.\n4. Start playing, expecting that cdparanoia will rip faster than\n playback speed (if not the player will pause waiting for more data)\n5. Check if the full TOC has been read. If not, run cdrdao to get a\n `.toc` file. When done, read the file and merge it with the\n existing disc info keeping the best data from each source.\n6. Stop spinning the disc.\n7. Disco.\n\n\nLicense\n=======\n\nCopyright 2013-2015 Peter Liljenberg \n\ncodplayer is licensed under the MIT license, please see the file\nLICENSE.\n\n\nThird-party sources\n------------------\n\njQuery is licensed under the MIT license:\n* Copyright (c) 2005, 2013 jQuery Foundation, Inc.\n\nmustache.js is licensed under thep MIT license:\n* Copyright (c) 2009 Chris Wanstrath (Ruby)\n* Copyright (c) 2010 Jan Lehnardt (JavaScript)\n\nbootstrap.js is licensed under the MIT license:\n* Copyright 2011-2015 Twitter, Inc.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/petli/codplayer", "keywords": "cd cdparanoia cdrdao cdplayer", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "codplayer", "package_url": "https://pypi.org/project/codplayer/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/codplayer/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/petli/codplayer" }, "release_url": "https://pypi.org/project/codplayer/2.0/", "requires_dist": null, "requires_python": null, "summary": "Complicated CD player", "version": "2.0" }, "last_serial": 2055488, "releases": { "0.9": [ { "comment_text": "", "digests": { "md5": "96f1c4e3beda4c1eb1ae33e55f5701cc", "sha256": "56ba5fa8e4b82131b218a8bb20f224bfc604f93e3ecd2becd67bf467362ef41f" }, "downloads": -1, "filename": "codplayer-0.9-py2.7-linux-x86_64.egg", "has_sig": false, "md5_digest": "96f1c4e3beda4c1eb1ae33e55f5701cc", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 289611, "upload_time": "2014-07-13T21:41:01", "url": "https://files.pythonhosted.org/packages/dc/d9/615a6a9ee0ebe2766c2567701dc1c6b1935ebdc600e2ba6f1e888a202b94/codplayer-0.9-py2.7-linux-x86_64.egg" }, { "comment_text": "", "digests": { "md5": "8c7cd0655b5dae869e93f6eb5956a253", "sha256": "cf47871077763179d74b2297a06208004f5df4003bae15f1072f07ce12fe7523" }, "downloads": -1, "filename": "codplayer-0.9.tar.gz", "has_sig": false, "md5_digest": "8c7cd0655b5dae869e93f6eb5956a253", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 247842, "upload_time": "2014-07-13T21:40:52", "url": "https://files.pythonhosted.org/packages/91/a5/d1cba40dc4cf4fb3a4846459bb889c83f05a1b677586f6807c0056fb449f/codplayer-0.9.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "1f6e4316bb65b949394f5e5c4b79afec", "sha256": "262302fab7f713c6a64ad65b6112402065c80e927c33f2b2e3ed8c58d58d75ec" }, "downloads": -1, "filename": "codplayer-0.9.1-py2.7-linux-x86_64.egg", "has_sig": false, "md5_digest": "1f6e4316bb65b949394f5e5c4b79afec", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 290252, "upload_time": "2014-07-14T22:02:14", "url": "https://files.pythonhosted.org/packages/4e/ad/1902118af81cd3bbdba694997aaf1a56346ce13340ae56b6752cd84daa4c/codplayer-0.9.1-py2.7-linux-x86_64.egg" }, { "comment_text": "", "digests": { "md5": "a08d90a21d960e25d872af2e9e6a8d87", "sha256": "56f151b78092aa14a6d8a7dcfd0ba0dbb90c3adc26927d51f91b4fb799095a9b" }, "downloads": -1, "filename": "codplayer-0.9.1.tar.gz", "has_sig": false, "md5_digest": "a08d90a21d960e25d872af2e9e6a8d87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 248127, "upload_time": "2014-07-14T22:02:10", "url": "https://files.pythonhosted.org/packages/0f/96/a389dfad4097a6f7ae45dc02bc57809242e84042bebd3e59bd2bef9df8ca/codplayer-0.9.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "8c2585b2666c91c72b88478b5a628a86", "sha256": "3393e370f13cabfbafad7e9ce49891d3452301ea539b61a0db6d55d4728d0cfa" }, "downloads": -1, "filename": "codplayer-1.0.tar.gz", "has_sig": false, "md5_digest": "8c2585b2666c91c72b88478b5a628a86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 263823, "upload_time": "2014-09-16T18:17:40", "url": "https://files.pythonhosted.org/packages/68/61/73c2514d8b176c7dc56a41da557dc6f37b158b0f184586c5c516466571d4/codplayer-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "589b078064fa17196e37e5f9b9aa1a86", "sha256": "38b16f5431307da39e533c27742528560895f8af57ebdaf630bb2d2a62b1b1d3" }, "downloads": -1, "filename": "codplayer-1.1.tar.gz", "has_sig": false, "md5_digest": "589b078064fa17196e37e5f9b9aa1a86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 311397, "upload_time": "2015-03-08T21:00:13", "url": "https://files.pythonhosted.org/packages/51/6c/c4471954d28804ad526c0eb8742c83d6071deaab2e5bb4602940b861f03e/codplayer-1.1.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "ced5f6101659737061b08776b6b0f814", "sha256": "e42e1a574663a4fcc25427f3a0d83dd1647bf040e36e3cdbfe519c352e35c644" }, "downloads": -1, "filename": "codplayer-2.0.tar.gz", "has_sig": false, "md5_digest": "ced5f6101659737061b08776b6b0f814", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1860635, "upload_time": "2016-04-09T21:12:28", "url": "https://files.pythonhosted.org/packages/a1/94/08b35a600448238dc151f88c5f6ab967e082b627ba895e8f515043d3ecbe/codplayer-2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ced5f6101659737061b08776b6b0f814", "sha256": "e42e1a574663a4fcc25427f3a0d83dd1647bf040e36e3cdbfe519c352e35c644" }, "downloads": -1, "filename": "codplayer-2.0.tar.gz", "has_sig": false, "md5_digest": "ced5f6101659737061b08776b6b0f814", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1860635, "upload_time": "2016-04-09T21:12:28", "url": "https://files.pythonhosted.org/packages/a1/94/08b35a600448238dc151f88c5f6ab967e082b627ba895e8f515043d3ecbe/codplayer-2.0.tar.gz" } ] }