{ "info": { "author": "Aaron Hosford", "author_email": "hosford42@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Other Audience", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Topic :: Artistic Software", "Topic :: Multimedia :: Graphics", "Topic :: Multimedia :: Sound/Audio :: Analysis", "Topic :: Scientific/Engineering :: Visualization" ], "description": ".. figure:: https://github.com/hosford42/pitchclock/raw/master/images/pitchclock.png\n :alt: PitchClock Logo\n\n PitchClock Logo\n\nPitchClock\n==========\n\nPitchClock is a Python library for generating `tone\nclock `__ visualizations. Tone\nclocks were originally developed as a tool for atonal composition, but\ncan also be quite useful for visualizing tonal structures in classical\nand `Just Intonation `__\ntheory as well.\n\nLicense\n-------\n\nPitchClock is distributed under the permissive `MIT\nlicense `__.\n\nLinks:\n------\n\n- Distribution: https://pypi.python.org/pypi/pitchclock\n- Source: https://github.com/hosford42/pitchclock\n\nInstallation\n============\n\nThe latest stable distribution of PitchClock can be installed with pip:\n\n::\n\n pip install pitchclock\n\nOr, if you prefer the current development version:\n\n::\n\n pip install git+https://github.com/hosford42/pitchclock.git\n\nExample Usage\n-------------\n\nAs an example, let's compare the equal temperament major scale, versus\nthe just intonation scale it approximates, known as the `syntonic\ndiatonic\nscale `__. Tone\nclocks are used for visualizing the *relationships*, i.e. the intervals,\nbetween the pitches, rather than the absolute pitches themselves. Thus\nthe typical approach is to label the pitches with the intervals from the\ntonic that produce them, and to place the tonic at the 12 o'clock\nposition. The equal temperament intervals are represented as the number\nof half-tones in the interval, enclosed within square brackets. The just\nintervals are represented as whole number frequency ratios. For this\ngraph, we will mark the equal temperament intervals with filled circles,\nthe just intervals with outlined circles, and the tonic with an angle\nmark. Here's the code to produce the graph:\n\n.. code:: python\n\n from fractions import Fraction\n from pitchclock import ETInterval, ToneClock\n\n # The equal temperament scale, expressed as equal temperament\n # intervals from the tonic.\n et_major_scale = [ETInterval(s) for s in [0, 2, 4, 5, 7, 9, 11]]\n\n # The just intonation scale, expressed as frequency ratios from \n # the tonic.\n ji_major_scale = [\n Fraction(*pair) \n for pair in [(1, 1), (9, 8), (5, 4), (4, 3), (3, 2), (5, 3), (15, 8)]\n ]\n\n # Here we create the clock, indicating which pitches to represent \n # with each type of marking in the graph. \n clock = ToneClock(\n filled_dots=et_major_scale, \n empty_dots=ji_major_scale, \n angles=[et_major_scale[0], ji_major_scale[0]], \n labels={p: p for p in et_major_scale + ji_major_scale}\n )\n\n # We make the radius a little bigger because there's a lot going\n # on in this graph. A bigger radius means more space for details.\n clock.style.radius *= 1.5\n\n # Everything is quantized to quarter tones by default, but we are\n # building this graph specifically to compare slight differences\n # in pitch, so we turn it off. However, we leave it on for labels,\n # because otherwise they will overlap for pitches that are very\n # close neighbors. With quantization of labels left on, labels\n # falling within the same quantum will be grouped together with\n # commas to separate them.\n clock.style.quantize_non_labels = False\n\n # Save the clock as a PNG file. Currently, this is the only\n # supported format. \n clock.save('images/major_comparison.png')\n\nAnd here's the image it produces:\n\n.. figure:: https://github.com/hosford42/pitchclock/raw/master/images/major_comparison.png\n :alt: Major Scale Comparison\n\n Major Scale Comparison\n\nFrom this graph, it becomes immediately apparent that the intervals in\nthe syntonic scale that are most poorly approximated by the equal\ntemperament major scale are ``5/4``, ``5/3``, and ``15/8``, each of\nwhich is slightly flatter than the equal temperament pitch used to\napproximate it.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/hosford42/pitchclock", "keywords": "music musical tone clock visualization just intonation tonal atonal key signature scale chord", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pitchclock", "package_url": "https://pypi.org/project/pitchclock/", "platform": "any", "project_url": "https://pypi.org/project/pitchclock/", "project_urls": { "Homepage": "https://github.com/hosford42/pitchclock" }, "release_url": "https://pypi.org/project/pitchclock/0.0.4/", "requires_dist": [ "gizeh" ], "requires_python": "", "summary": "Tone clock visualizations", "version": "0.0.4" }, "last_serial": 3199759, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "fd06691a5a2999073899029a5a50d626", "sha256": "e80d2c41486ec39f259789b9d2a12e016cd432251261741926d95ec2231cc245" }, "downloads": -1, "filename": "pitchclock-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fd06691a5a2999073899029a5a50d626", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10958, "upload_time": "2017-09-25T04:03:31", "url": "https://files.pythonhosted.org/packages/68/9a/db2ce028c704d0cc94f8a67d9217519aabb26c1445ec46776b0e9f259a98/pitchclock-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db7943ce007d61671f22319d5d26e0ac", "sha256": "6602b943805c96f9d5f01fa34830518cfa0818b0eb79f510fe9f950bbc69c822" }, "downloads": -1, "filename": "pitchclock-0.0.2.tar.gz", "has_sig": false, "md5_digest": "db7943ce007d61671f22319d5d26e0ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9024, "upload_time": "2017-09-25T04:03:33", "url": "https://files.pythonhosted.org/packages/60/60/c1a1314070b97d03021bf05466f6b936895e1a8992d1cbfba80875df37d4/pitchclock-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "86b36226d18cbcfd969724602b99cbcc", "sha256": "5c18df3c5e332766e743aaf6ed94ab8a85f12a7d17dad95b39a0f3a3e0b6f2da" }, "downloads": -1, "filename": "pitchclock-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "86b36226d18cbcfd969724602b99cbcc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11342, "upload_time": "2017-09-25T04:21:37", "url": "https://files.pythonhosted.org/packages/9d/18/7a6bc6ee3892e5923a813fd4bda60233a5957fb316a7871b08114cf6643a/pitchclock-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e10383bae4573ad994aef39244d60b2", "sha256": "30e228edf936a506f30a2a847b67d48b5b2c3b754cd6e7d39cc9b057d13a4bc2" }, "downloads": -1, "filename": "pitchclock-0.0.3.tar.gz", "has_sig": false, "md5_digest": "8e10383bae4573ad994aef39244d60b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9350, "upload_time": "2017-09-25T04:21:38", "url": "https://files.pythonhosted.org/packages/01/16/d4e49419c001b41fc0fe3d71fad84a0cd98283136ea15e37e4e0c905bbd7/pitchclock-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "f199443e2cfd2bc79957026389fecac1", "sha256": "4934ed0f1a277be4e859420371c374a579dd8a40e2fe37006b7969815af55650" }, "downloads": -1, "filename": "pitchclock-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f199443e2cfd2bc79957026389fecac1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11333, "upload_time": "2017-09-25T06:05:27", "url": "https://files.pythonhosted.org/packages/42/20/862c96656b29a55b61a37415c8dd65f42be1bfb0c007b1b0b7bc4e977b01/pitchclock-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "478f19b0774a20dd00a5f2fc9bf19202", "sha256": "1a3f6017b13a2b3f0ecfadc2e3a18922b592aa41c8c6d841759b441631414456" }, "downloads": -1, "filename": "pitchclock-0.0.4.tar.gz", "has_sig": false, "md5_digest": "478f19b0774a20dd00a5f2fc9bf19202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9323, "upload_time": "2017-09-25T06:05:28", "url": "https://files.pythonhosted.org/packages/f2/b5/ab17b19025e45af261977205a378857b8d367f455d57597000e2ba301234/pitchclock-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f199443e2cfd2bc79957026389fecac1", "sha256": "4934ed0f1a277be4e859420371c374a579dd8a40e2fe37006b7969815af55650" }, "downloads": -1, "filename": "pitchclock-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f199443e2cfd2bc79957026389fecac1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11333, "upload_time": "2017-09-25T06:05:27", "url": "https://files.pythonhosted.org/packages/42/20/862c96656b29a55b61a37415c8dd65f42be1bfb0c007b1b0b7bc4e977b01/pitchclock-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "478f19b0774a20dd00a5f2fc9bf19202", "sha256": "1a3f6017b13a2b3f0ecfadc2e3a18922b592aa41c8c6d841759b441631414456" }, "downloads": -1, "filename": "pitchclock-0.0.4.tar.gz", "has_sig": false, "md5_digest": "478f19b0774a20dd00a5f2fc9bf19202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9323, "upload_time": "2017-09-25T06:05:28", "url": "https://files.pythonhosted.org/packages/f2/b5/ab17b19025e45af261977205a378857b8d367f455d57597000e2ba301234/pitchclock-0.0.4.tar.gz" } ] }