{ "info": { "author": "Kenneth Reitz", "author_email": "me@kennethreitz.org", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "\n# PyTheory: Music Theory for Humans\n\nThis (work in progress) library attempt to make [exploring music theory](https://colab.research.google.com/drive/1kgyemTsOIE5uVXfGTjS5PS2lPvzqKk6D) approachable to humans.\n\n![logo](https://github.com/kennethreitz/pytheory/raw/master/ext/pytheory-small.png)\n\nPyTheory is a music theory library, which procedurally generates all known Western tones, scales, and chord fingering charts (for custom fretboards).\n\nIt is capable of outputting either a rounded decimal for pitch representation, or the proper symbolic representation of the pitch (as a SymPy object).\n\n## True Scale -> Pitch Evaluation\n\n```pycon\n>>> from pytheory import TonedScale\n\n>>> c_minor = TonedScale(tonic='C4')['minor']\n\n>>> c_minor\n\n\n>>> c_minor[0].pitch()\n523.251130601197\n\n>>> c_minor[\"I\"].pitch(symbolic=True)\n440*2**(1/4)\n\n>>> c_minor[\"tonic\"].pitch(temperament='pythagorean', symbolic=True)\n14080/27\n```\n\n## Audibly play a note (or chord)\n\n >>> from pytheory import play\n play(c_minor[0], t=1_000)\n\n\n## Chord Fingerings for Custom Tunings\n\n```pycon\n>>> from pytheory import Tone, Fretboard, CHARTS\n\n>>> tones = (\n... Tone.from_string(\"F2\"),\n... Tone.from_string(\"C3\"),\n... Tone.from_string(\"G3\"),\n... Tone.from_string(\"D4\"),\n... Tone.from_string(\"A5\"),\n... Tone.from_string(\"E5\")\n... )\n\n>>> fretboard = Fretboard(tones=tones)\n>>>\n>>> c_chord = CHARTS['western'][\"C\"]\n\n>>> print(c_chord.fingering(fretboard=fretboard))\n(0, 0, 0, 3, 3, 3)\n```\n\nIt can also [generate charts for all known chords](https://gist.github.com/kennethreitz/b363660145064fc330c206294cff92fc) for any instrument (accuracy to be determined!).\n\n\u2728\ud83c\udf70\u2728\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kennethreitz/pytheory", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pytheory", "package_url": "https://pypi.org/project/pytheory/", "platform": "", "project_url": "https://pypi.org/project/pytheory/", "project_urls": { "Homepage": "https://github.com/kennethreitz/pytheory" }, "release_url": "https://pypi.org/project/pytheory/0.1.2/", "requires_dist": [ "pytuning", "numeral", "pygame", "scipy" ], "requires_python": ">=3.6.0", "summary": "A music theory library, for humans.", "version": "0.1.2" }, "last_serial": 4839367, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "2a7fc9c2429cfbb6626a70863fc00b64", "sha256": "e5fdf948c79f5c19d0aef0294fa5318b2dff5fb0adf66f59589de36f301ee789" }, "downloads": -1, "filename": "pytheory-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2a7fc9c2429cfbb6626a70863fc00b64", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10225, "upload_time": "2019-02-18T12:39:29", "url": "https://files.pythonhosted.org/packages/52/e9/6cde425c6be0c30c8ae02a7381eef9e4cc5de56639c05bb57759c06029fb/pytheory-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37c7d11e32627917776289a766871701", "sha256": "f923e7a5a9f85210fa8dad76b3a9301178bef6e88e51cf7a0ba81141299cb847" }, "downloads": -1, "filename": "pytheory-0.1.0.tar.gz", "has_sig": false, "md5_digest": "37c7d11e32627917776289a766871701", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9962, "upload_time": "2019-02-18T12:39:31", "url": "https://files.pythonhosted.org/packages/8c/dd/c922299dac867976ab43d62d36f2acd722aa1c59ed9c1661f9854d02ec00/pytheory-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1fe178e4107bb0437e57b6b16c6c74d9", "sha256": "490607732012d18075ee6cb1814fd570e2392106fa50822019938a5d2b7b6018" }, "downloads": -1, "filename": "pytheory-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1fe178e4107bb0437e57b6b16c6c74d9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10407, "upload_time": "2019-02-19T11:04:51", "url": "https://files.pythonhosted.org/packages/7e/22/ac703ceedf02d454adf4f797ae92f07626bfae1574c7eabbdda65973587f/pytheory-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f42481b82628020e5b0aa51c2ff2c029", "sha256": "1245509793e20f4af382644e8a81088a83783373d39ef7768398ed129c3ac98a" }, "downloads": -1, "filename": "pytheory-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f42481b82628020e5b0aa51c2ff2c029", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 10422, "upload_time": "2019-02-19T11:04:52", "url": "https://files.pythonhosted.org/packages/82/5e/8577e9d71367d8377d02bcfa57cc3631c172a8067b452c504aa61b3df2e2/pytheory-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "322833eec340e73b1c51fc60d2ab2feb", "sha256": "483c70bb139b83cc76f20b6f9e3275fda86f98fdfb3fa8a4d66ee3e4884b5df5" }, "downloads": -1, "filename": "pytheory-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "322833eec340e73b1c51fc60d2ab2feb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10411, "upload_time": "2019-02-19T11:19:24", "url": "https://files.pythonhosted.org/packages/a5/30/7dc268e1e362a3dcd2209f8e969c282fd09933f92402fa37ecf56a362c3b/pytheory-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6208d1e80b69a3a08570eef444d9bdf2", "sha256": "b032808787adea02b296fd1469ccffbb999df2842459ca2d9f68caf8693cd59a" }, "downloads": -1, "filename": "pytheory-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6208d1e80b69a3a08570eef444d9bdf2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 10414, "upload_time": "2019-02-19T11:19:26", "url": "https://files.pythonhosted.org/packages/ee/8b/d9e3518c743bb0c54c55f4b3aa8a52e3e9313a36606005de07f597879a6b/pytheory-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "322833eec340e73b1c51fc60d2ab2feb", "sha256": "483c70bb139b83cc76f20b6f9e3275fda86f98fdfb3fa8a4d66ee3e4884b5df5" }, "downloads": -1, "filename": "pytheory-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "322833eec340e73b1c51fc60d2ab2feb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10411, "upload_time": "2019-02-19T11:19:24", "url": "https://files.pythonhosted.org/packages/a5/30/7dc268e1e362a3dcd2209f8e969c282fd09933f92402fa37ecf56a362c3b/pytheory-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6208d1e80b69a3a08570eef444d9bdf2", "sha256": "b032808787adea02b296fd1469ccffbb999df2842459ca2d9f68caf8693cd59a" }, "downloads": -1, "filename": "pytheory-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6208d1e80b69a3a08570eef444d9bdf2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 10414, "upload_time": "2019-02-19T11:19:26", "url": "https://files.pythonhosted.org/packages/ee/8b/d9e3518c743bb0c54c55f4b3aa8a52e3e9313a36606005de07f597879a6b/pytheory-0.1.2.tar.gz" } ] }