{ "info": { "author": "Jacob Scott", "author_email": "jscott12009@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3 :: Only" ], "description": "# Beatboxer\nI don't have the money (or talent) to use FL Studios or the patience to learn anything else. Luckily I already know Python so here's my solution.\n\nMake beats just by indicating on what beat what sound should be played. It's pretty simple, trust me.\n\nWhat uses does this have you ask me? Lots! Quickly supply dope beats for rap battles, bangers for that quick crunk sesh, backtracks for your SoundCloud rapper aspirations with that classic syncopated subbass rhythym, use it as a glorified and versatile metronome and so on!\n\n## Installing Package\nJust do it the classic way:\n```\npip install beatboxer\n```\n\n## Example\nHere's an example ripped straight from the `main` function:\n\nFirst, create the object.\n``` python\nfrom inspect import getsourcefile\nfrom os import path\n\nfrom beatboxer import BeatBoxer\n\n# Create directory to save audio into\nsave = path.join(path.dirname(path.abspath(getsourcefile(lambda: 0))), 'outputs')\n\n# Create object with 120 beats per minute and quarter note as one beat\nb = BeatBoxer(bpm=120, base_note=4, save_path=save)\n```\n\nNow let's make some beats. This first one has 16 beats and one measure in 16/4 time and\n1) Every beat plays a hihat\n2) Every 3rd beat starting on the 2nd beat plays a kick\n3) Every 4th beat starting on the 2nd beat plays a snare\n4) Every 8th beat starting on the 1st beat plays a crash\n``` python\nb.make_a_beat(b.empty(), num_measures=1, every_beat=['hihat'],\n every_4th=[('snare', 1)], every_3rd=[('kick', 1)], every_8th=[('crash', 0)])\n# Store it with the name 'dope1'\nb.store_beat('dope1')\n```\n\nLet's make a second beat! We'll only change the time signature to 16/8 and play it for 4 measures. This beat will play twice as fast as the first beat. And let us throw a clap on the 7th and 11th beat.\n``` python\nb.change_base_note(8)\nb.make_a_beat(b.empty(), num_measures=4, single={'clap': [7, 11]}, every_beat=['hihat'],\n every_4th=[('snare', 1)], every_3rd=[('kick', 1)], every_8th=[('crash', 0)])\n# Store it with the name 'dope2'\nb.store_beat('dope2')\n```\n\nOne last beat. We'll change the BPM to 100 and the time signature to 3/8 for 12 measures.\n``` python\nb.change_bpm(100)\nb.make_a_beat(b.empty(3), num_measures=12, every_beat=['hihat'], every_3rd=[('snare', 2), ('kick', 1)])\n# Store it with the name 'lastly dope'\nb.store_beat('lastly dope')\n```\n\nAnd we'll save our favorite, the second one as `dopest.wav`.\n``` python\nb.save_beat('dopest', b.stored_beats['dope2'])\n```\n\nIf you print the object, it'll show the stored and current beats.\n``` python\nprint(b)\n```\nThis outputs:\n```\n---------Current Beat--------\nBPM: 100 --- Time Signature: 3/8 --- Number of Measures: 12 --- Length: 10.981 s\n\n---------Stored Beats--------\nName: dope1 --- BPM: 120 --- Time Signature: 16/4 --- Number of Measures: 1 --- Length: 8.106 s\nName: dope2 --- BPM: 120 --- Time Signature: 16/8 --- Number of Measures: 4 --- Length: 16.106 s\nName: lastly dope --- BPM: 100 --- Time Signature: 3/8 --- Number of Measures: 12 --- Length: 10.981 s\n```\n\nAhhh wait... even though the second one is like Kanye-level quality, the first needs work... So let's edit it.\n``` python\n# First switch it to the current beat\nb.switch_current_beat('dope1', force=True)\n\n# Remove every snare and every 2nd hihat. Then add a bass on every kick and\n# re-add the snare on every 4th note but with a 2 beat offset.\nb.edit_current_beat(bpm=140, base_note=8, num_measures=4, remove={\n 'every_beat': ['snare'], 'every_2nd': [('hihat', 1)]\n }, add={\n 'every_3rd': [('bass', 1)], 'every_4th': [('snare', 2)]\n })\n# Now, there is still the original 'dope1' beat in b.stored_beats. We can\n# either overwrite it with this or store as a new one like so:\nb.store_beat('way better than dope1')\n# And lets save that bad boy\nb.save_beat('dopestest')\n\nprint('\\n\\nDid some editting...')\nprint(b)\n```\n\nAnd the final output will be:\n```\nDid some editting...\n---------Current Beat--------\nBPM: 140 --- Time Signature: 16/8 --- Number of Measures: 4 --- Length: 13.696 s\n\n---------Stored Beats--------\nName: dope1 --- BPM: 120 --- Time Signature: 16/4 --- Number of Measures: 1 --- Length: 8.106 s\nName: dope2 --- BPM: 120 --- Time Signature: 16/8 --- Number of Measures: 4 --- Length: 16.106 s\nName: lastly dope --- BPM: 100 --- Time Signature: 3/8 --- Number of Measures: 12 --- Length: 10.981 s\nName: way better than dope1 --- BPM: 140 --- Time Signature: 16/8 --- Number of Measures: 4 --- Length: 13.696 s\n```\n\n## Using the GUI\nTo use the GUI, just run\n``` python\nfrom beatboxer import gui\n\ngui()\n```\n\nI'm not going to use picture here for the present since the GUI will most likely change drastically soon. But it is used like so:\n- The grid shows the number of beats per measure and you can choose what plays on each beat of the measure.\n- If you want more sounds played on a specific beat that are available, go to `Edit` and `Add Track` or `Ctrl-T` to add another track to use.\n- If you want to have more or less beats per measure, go to `Edit` and `Change Number of Beats` or `Ctrl-B` to change the number of beats.\n- You can remove a track with the `Remove Track` button or with the hotkey `Ctrl-` where `` is the row of the track.\n- You can preview what the measure sounds like with the `Preview` button where it will play the measure on loop while showing the current beat.\n- And you can save your measure as a WAV file with `File` then `Save` or `Ctrl-S`.\n\nThat's what I got so far, fellas. Stay tuned.\n\n## Future Aspirations\nFind the meaning to life.\n\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/crumpstrr33/beatboxer", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "beatboxer", "package_url": "https://pypi.org/project/beatboxer/", "platform": "", "project_url": "https://pypi.org/project/beatboxer/", "project_urls": { "Homepage": "https://github.com/crumpstrr33/beatboxer" }, "release_url": "https://pypi.org/project/beatboxer/2.0.2/", "requires_dist": [ "pydub" ], "requires_python": ">=3", "summary": "A beatboxer to create custom beats.", "version": "2.0.2" }, "last_serial": 4216527, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "666ddb74de71fd5967fcb864ba7416f8", "sha256": "d3cc54b5104502753386d51531a970e2c4a656131f6512725d0380330b1f9c61" }, "downloads": -1, "filename": "beatboxer-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "666ddb74de71fd5967fcb864ba7416f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 6127, "upload_time": "2018-08-13T10:49:32", "url": "https://files.pythonhosted.org/packages/99/a4/d19e27f96a9a52475ffdd2eab7b7963ad2aa99ef114c1276b9a375d5481f/beatboxer-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98a2fb690751df65563729b3bf826957", "sha256": "2f9087a12dcb740b19ea45ca574bc42220edbd2db4380cdd575f9e2fe9769e33" }, "downloads": -1, "filename": "beatboxer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "98a2fb690751df65563729b3bf826957", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 5570, "upload_time": "2018-08-13T10:49:33", "url": "https://files.pythonhosted.org/packages/42/33/0703bc56c20b2110230aef56e51dcb15d7c50226c9ee7875cb5947ed448f/beatboxer-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "c40a40ab115ac2b5db25974b29c3743e", "sha256": "1eedced9a5c2fba57cf9b4d03309dadb04210fce206a6f808ff4513bb899f34a" }, "downloads": -1, "filename": "beatboxer-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c40a40ab115ac2b5db25974b29c3743e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 557637, "upload_time": "2018-08-13T11:33:03", "url": "https://files.pythonhosted.org/packages/d7/5d/46b71c186954ef9c539b9783414575f6fd8aed2a399b5979ff830e087ed2/beatboxer-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4bd1e5a5f9b45d930e5b94da8698084", "sha256": "016e4c61faecfecf2955f19b0a7b2d56ca427812802106dbc7f03fe90419b70a" }, "downloads": -1, "filename": "beatboxer-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c4bd1e5a5f9b45d930e5b94da8698084", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 559546, "upload_time": "2018-08-13T11:33:05", "url": "https://files.pythonhosted.org/packages/db/ab/095eb06e2f96c6badc40d6c5c05b9b38a481d7c0274d7b00d3b4c31df55f/beatboxer-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "8eeaf8cb52de0b59930a0ca09e21cf48", "sha256": "06030847ef6fd52e919ed04c8acacbea8ce40fb43f6a9b987a4832c7cd1efb33" }, "downloads": -1, "filename": "beatboxer-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8eeaf8cb52de0b59930a0ca09e21cf48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 558077, "upload_time": "2018-08-14T02:50:17", "url": "https://files.pythonhosted.org/packages/7e/c2/09e6acedfdcb791123aae729bc51123319177d491399a8249721e240926a/beatboxer-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f99d7ab97d6bf9a15638a74dc50e7c3f", "sha256": "37e057ed6c15738013adb8f54ebaaf1e309629a49bedc05d9f30d57a6616f724" }, "downloads": -1, "filename": "beatboxer-1.2.0.tar.gz", "has_sig": false, "md5_digest": "f99d7ab97d6bf9a15638a74dc50e7c3f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 560111, "upload_time": "2018-08-14T02:50:18", "url": "https://files.pythonhosted.org/packages/e5/03/6eb9432a696f6948538e43aedab053d98d049c0dbeeb3695e73c4c4575d3/beatboxer-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "ba9e28273e7f8a0dce3eb4568c36712e", "sha256": "6cd6d741454992d22572ca8ac43d6f90c4210661f9691dcfc3b9bc580cb0b8bb" }, "downloads": -1, "filename": "beatboxer-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ba9e28273e7f8a0dce3eb4568c36712e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 559634, "upload_time": "2018-08-14T06:42:42", "url": "https://files.pythonhosted.org/packages/d8/a3/5f58116316f62ed2ed88fd44f57d6b97828abe9cfd4f9d65525d63c8156e/beatboxer-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3493a4895b55bce7c41205d8630aed72", "sha256": "66929b8eb99c276999ee58ea83a24ca26fcc7e23ce966679bab7b953df9392d4" }, "downloads": -1, "filename": "beatboxer-1.3.0.tar.gz", "has_sig": false, "md5_digest": "3493a4895b55bce7c41205d8630aed72", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 562068, "upload_time": "2018-08-14T06:42:45", "url": "https://files.pythonhosted.org/packages/1d/36/a0ee0db53405656eec4787e982364876abe1e1fcb310c4f28ee718db3427/beatboxer-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "a1cd37d1d2b3270799584a4453eae688", "sha256": "820c4e9aa3583576f0f44c7e1c1f828cc2ad38982f7c184ef04f2d7244600e53" }, "downloads": -1, "filename": "beatboxer-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a1cd37d1d2b3270799584a4453eae688", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 559644, "upload_time": "2018-08-14T06:54:41", "url": "https://files.pythonhosted.org/packages/27/23/e883f183fd639e59007734b51c9c72db9da5cef2a0b72aafe3b070b7c9c5/beatboxer-1.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d7209ff0fff96f3efa2cad763df849a", "sha256": "cef561a24e941b6c43d7785bb0b0fca16b49fbfba015d4eec417ed9699f1c3cf" }, "downloads": -1, "filename": "beatboxer-1.3.1.tar.gz", "has_sig": false, "md5_digest": "8d7209ff0fff96f3efa2cad763df849a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 562084, "upload_time": "2018-08-14T06:54:44", "url": "https://files.pythonhosted.org/packages/59/64/a40c6a23facb32db4df3aa3c216e34ad3068ac1430addb580aba88c79c71/beatboxer-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "c53e949d6ececf4a240a98c1f1836814", "sha256": "6d3b9455537b880854810877a43c2df5b370c3247f2e6baf3319a96e8a7b6971" }, "downloads": -1, "filename": "beatboxer-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c53e949d6ececf4a240a98c1f1836814", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 559790, "upload_time": "2018-08-14T09:00:38", "url": "https://files.pythonhosted.org/packages/5e/d8/1a1220725c26ed5d77ddbc7305b9149b228be94930148c8de4f4a90ff60e/beatboxer-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e4595042007170b3d0f9f12e1e32191", "sha256": "70f4111da23f2df2d0b99989624a5143e6f04f27525d367569397a731d6040a2" }, "downloads": -1, "filename": "beatboxer-1.3.2.tar.gz", "has_sig": false, "md5_digest": "5e4595042007170b3d0f9f12e1e32191", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 562308, "upload_time": "2018-08-14T09:00:41", "url": "https://files.pythonhosted.org/packages/5d/dc/3f8a6f3fe75c74f4d7ce614b06b6deab300e53a1676cbdbf76b09ac1b271/beatboxer-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "0ab0263ff497bd5c9173464ece4b92d1", "sha256": "4153543ee65d9918e93467982c804f257b01cf3fb0453ca0193be8e5fc666631" }, "downloads": -1, "filename": "beatboxer-1.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "0ab0263ff497bd5c9173464ece4b92d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 559790, "upload_time": "2018-08-14T09:20:02", "url": "https://files.pythonhosted.org/packages/6a/ad/c8861102339826a3644aceb4571540592c7936853a2834a35747d12eaf63/beatboxer-1.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36ee6760ddc1e1d9c605a3645791df98", "sha256": "142c19a026eb6eb59593af493fbfb4ca92eb293f41f1c1f20f42e0c9af7875f0" }, "downloads": -1, "filename": "beatboxer-1.3.3.tar.gz", "has_sig": false, "md5_digest": "36ee6760ddc1e1d9c605a3645791df98", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 563197, "upload_time": "2018-08-14T09:20:06", "url": "https://files.pythonhosted.org/packages/58/47/ffe1d08248a35995c068666286b05cd2e559fd28866a28074141347e5e05/beatboxer-1.3.3.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "f277bc29306d3310ab8242302a9c9d48", "sha256": "8af6a8a4d3a07147a75b4bb453e39a7e2b5c6129dfe414d04052ac7b4d6ecb72" }, "downloads": -1, "filename": "beatboxer-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f277bc29306d3310ab8242302a9c9d48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 559926, "upload_time": "2018-08-15T08:56:24", "url": "https://files.pythonhosted.org/packages/6b/2d/07ebda64213fef8b7944543ec7d4c37f5b0010dcfe8c4a2adae701877e42/beatboxer-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67711d4eebaed89513f7878b5df45b73", "sha256": "9e45b32410f45887dd5476458676045739b458af79033971374e787fd8485362" }, "downloads": -1, "filename": "beatboxer-1.4.0.tar.gz", "has_sig": false, "md5_digest": "67711d4eebaed89513f7878b5df45b73", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 563353, "upload_time": "2018-08-15T08:56:27", "url": "https://files.pythonhosted.org/packages/0a/d2/6bbf3703c1b8180593164915ea308ef172c067db5ec54ccd701ddbbef6f6/beatboxer-1.4.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "22bfa958fc0b300c2d0349ba15b96216", "sha256": "e2b3c8ee26ca9a2b75546f1fe51c3ebc096ce95f878f6da33f007e547c9c4122" }, "downloads": -1, "filename": "beatboxer-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "22bfa958fc0b300c2d0349ba15b96216", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 563807, "upload_time": "2018-08-27T07:58:46", "url": "https://files.pythonhosted.org/packages/7f/12/57a350d4732dad78c6c2194c56f7b0b7e86a591f3574d54a2a9681837170/beatboxer-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "151f860683a779ddb1330c4f55c7120c", "sha256": "3bcbddfc9cf43cdcdc18156fece36d7f6df8dcc83898a2138bfe85f93b171344" }, "downloads": -1, "filename": "beatboxer-2.0.0.tar.gz", "has_sig": false, "md5_digest": "151f860683a779ddb1330c4f55c7120c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 567193, "upload_time": "2018-08-27T07:58:48", "url": "https://files.pythonhosted.org/packages/cd/40/66a312e234509bc9d77e04fad301f3f0f83d2e1e96fb12f26697595e4ef9/beatboxer-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "78034162da43d10cca9c4d795bd268b7", "sha256": "e919d54cd390f555da4ed35ba242e388b12b56c2efbbe3d968560fb4f4bc581f" }, "downloads": -1, "filename": "beatboxer-2.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "78034162da43d10cca9c4d795bd268b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 564209, "upload_time": "2018-08-28T19:55:59", "url": "https://files.pythonhosted.org/packages/b1/b3/590ac7cefa8ed08ae62ad8c58d91788b330b4d3139d0b298a771c1c1856d/beatboxer-2.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8df4e7a3ae5d5dbdfe6258f2f1ab3153", "sha256": "e6f46bc04372a1d0ee3e90fa7b623de79753e3c1d8413d3069affc80a042b381" }, "downloads": -1, "filename": "beatboxer-2.0.1.tar.gz", "has_sig": false, "md5_digest": "8df4e7a3ae5d5dbdfe6258f2f1ab3153", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 567668, "upload_time": "2018-08-28T19:56:01", "url": "https://files.pythonhosted.org/packages/3d/fb/c3709f4a28a21c8623659b12dbc732012ede4f465607ccf3c548028a7ce0/beatboxer-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "f9c3f14971ca401eb960cd147d665c03", "sha256": "cbd9fdb36c1173c844770facf4af443d5994424f6fc9144d2d073b298ee8b1e8" }, "downloads": -1, "filename": "beatboxer-2.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f9c3f14971ca401eb960cd147d665c03", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 611807, "upload_time": "2018-08-28T20:41:59", "url": "https://files.pythonhosted.org/packages/81/07/50d623edb95135aeff4efd9ca3b174d5c1e287431e907c24ce69081b6b08/beatboxer-2.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a0fa32e8b74cfe6db9a24e01860580e", "sha256": "8e96cf9617baa886d3a5e50f529b8cb6d10cd5dd966731373bf6c56a283d8bd9" }, "downloads": -1, "filename": "beatboxer-2.0.2.tar.gz", "has_sig": false, "md5_digest": "8a0fa32e8b74cfe6db9a24e01860580e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 615516, "upload_time": "2018-08-28T20:42:01", "url": "https://files.pythonhosted.org/packages/22/63/881516a3f76704b34a058f2f2755840de11c98384156c92b87e0e04cfadc/beatboxer-2.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f9c3f14971ca401eb960cd147d665c03", "sha256": "cbd9fdb36c1173c844770facf4af443d5994424f6fc9144d2d073b298ee8b1e8" }, "downloads": -1, "filename": "beatboxer-2.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f9c3f14971ca401eb960cd147d665c03", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 611807, "upload_time": "2018-08-28T20:41:59", "url": "https://files.pythonhosted.org/packages/81/07/50d623edb95135aeff4efd9ca3b174d5c1e287431e907c24ce69081b6b08/beatboxer-2.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a0fa32e8b74cfe6db9a24e01860580e", "sha256": "8e96cf9617baa886d3a5e50f529b8cb6d10cd5dd966731373bf6c56a283d8bd9" }, "downloads": -1, "filename": "beatboxer-2.0.2.tar.gz", "has_sig": false, "md5_digest": "8a0fa32e8b74cfe6db9a24e01860580e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 615516, "upload_time": "2018-08-28T20:42:01", "url": "https://files.pythonhosted.org/packages/22/63/881516a3f76704b34a058f2f2755840de11c98384156c92b87e0e04cfadc/beatboxer-2.0.2.tar.gz" } ] }