{ "info": { "author": "thebigmunch", "author_email": "mail@thebigmunch.me", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# audio-metadata\n\n[![PyPI](https://img.shields.io/pypi/v/audio-metadata.svg?label=PyPI)](https://pypi.org/project/audio-metadata/)\n![](https://img.shields.io/badge/Python-3.6%2B-blue.svg) \n[![Travis](https://img.shields.io/travis/thebigmunch/audio-metadata.svg?label=Travis)](https://travis-ci.org/thebigmunch/audio-metadata)\n[![Codecov](https://img.shields.io/codecov/c/github/thebigmunch/audio-metadata.svg?label=Codecov)](https://codecov.io/gh/thebigmunch/audio-metadata) \n[![Docs - Stable](https://img.shields.io/readthedocs/audio-metadata/stable.svg?label=Docs%20%28Stable%29)](https://audio-metadata.readthedocs.io/en/stable/)\n[![Docs - Latest](https://img.shields.io/readthedocs/audio-metadata/latest.svg?label=Docs%20%28Latest%29)](https://audio-metadata.readthedocs.io/en/latest/)\n\n[audio-metadata](https://github.com/thebigmunch/audio-metadata) is a library for reading and, in the future, writing metadata from audio files.\n\n### Why another audio metadata library? / Why not just use mutagen et al?\n\nClean and understandable code, nice API, and good UX (user experience) are the focal points of audio-metadata.\nOne or more of these things I feel are lacking from already existing alternatives\nenough to want to write something from scratch with them in mind.\nAlso, there are certain features not present in other solutions that would be prohibitively painful to add.\n\n\n### So, why should I use it?\n\nFeatures and functionality that set it apart:\n\n* Uses the Python standard load(s)/dump(s) API.\n\t* Can load filepaths, file-like objects and binary data (bytes-like objects).\n* Metadata objects look like a dict **and** act like a dict.\n\t* Some common libraries shadow the representation of a dict\n\t and/or dict methods but do not behave like a dict.\n\t* Supports attribute-style access that can be mixed with dict key-subscription.\n* All metadata objects have user-friendly representations.\n\t* This includes *humanized* representations of certain values\n\t like filesize, bitrate, duration, and sample rate.\n\n```\n>>> import audio_metadata\n\n>>> metadata = audio_metadata.load('05 - Heart of Hearts.flac')\n\n>>> metadata\n,\n\t'streaminfo': ,\n\t'tags': ,\n})>\n\n>>> metadata['streaminfo']\n\n\n>>> metadata.streaminfo.bitrate\n1022134.0362995076\n\n>>> metadata.streaminfo['duration']\n362.9066666666667\n\n>>> metadata['streaminfo'].sample_rate\n44100\n```\n\n\n## Installation\n\n``pip install -U audio-metadata``\n\n\n## Usage\n\nFor the release version, see the [stable docs](https://audio-metadata.readthedocs.io/en/stable/). \nFor the development version, see the [latest docs](https://audio-metadata.readthedocs.io/en/latest/).\n\nThe high-level API and basic usage are covered, but more advanced features/functionality need documentation.\n\n\n## TODO\n\nPlease don't submit issues regarding the following:\n\n* Docs, docs, and more docs.\n* Finish ID3 abstractions.\n* Add support for more file formats.\n\t* MP4 reading is already well underway.\n* Add write support.\n\nIf you're willing to [contribute](https://github.com/thebigmunch/audio-metadata/blob/master/.github/CONTRIBUTING.md)\nyour time to work on them, post on the **Development** category on the [Discourse forum](https://forum.thebigmunch.me/).\n\n\n## Appreciation\n\nShowing appreciation is always welcome.\n\n#### Thank\n\n[![Say Thanks](https://img.shields.io/badge/thank-thebigmunch-blue.svg?style=flat-square)](https://saythanks.io/to/thebigmunch)\n\nGet your own thanks inbox at [SayThanks.io](https://saythanks.io/).\n\n#### Contribute\n\n[Contribute](https://github.com/thebigmunch/audio-metadata/blob/master/.github/CONTRIBUTING.md) by submitting bug reports, feature requests, or code.\n\n#### Help Others/Stay Informed\n\n[Discourse forum](https://forum.thebigmunch.me/)\n\n#### Referrals/Donations\n\n[![Digital Ocean](https://img.shields.io/badge/Digital_Ocean-referral-orange.svg?style=flat-square)](https://bit.ly/DigitalOcean-tbm-referral) [![Namecheap](https://img.shields.io/badge/Namecheap-referral-orange.svg?style=flat-square)](http://bit.ly/Namecheap-tbm-referral) [![PayPal](https://img.shields.io/badge/PayPal-donate-brightgreen.svg?style=flat-square)](https://bit.ly/PayPal-thebigmunch)\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/thebigmunch/audio-metadata", "keywords": "", "license": "MIT", "maintainer": "thebigmunch", "maintainer_email": "mail@thebigmunch.me", "name": "audio-metadata", "package_url": "https://pypi.org/project/audio-metadata/", "platform": "", "project_url": "https://pypi.org/project/audio-metadata/", "project_urls": { "Homepage": "https://github.com/thebigmunch/audio-metadata", "Repository": "https://github.com/thebigmunch/audio-metadata" }, "release_url": "https://pypi.org/project/audio-metadata/0.6.0/", "requires_dist": [ "attrs (>=18.2,<19.4)", "bidict (<1.0.0)", "bitstruct (>=6.0,<9.0)", "more-itertools (>=4.0,<8.0)", "pprintpp (<1.0.0)", "tbm-utils (>=1.0,<2.0)", "wrapt (>=1.0,<2.0)", "coverage (>=4.5,<5.0); extra == \"dev\" or extra == \"test\"", "flake8 (>=3.5,<4.0); extra == \"dev\" or extra == \"lint\"", "flake8-builtins (>=1.0,<2.0); extra == \"dev\" or extra == \"lint\"", "flake8-comprehensions (>=2.0,<3.0); extra == \"dev\" or extra == \"lint\"", "flake8-import-order (>=0.18,<0.19); extra == \"dev\" or extra == \"lint\"", "flake8-import-order-tbm (>=1.0.0,<2.0.0); extra == \"dev\" or extra == \"lint\"", "nox (>=2019,<2020); extra == \"dev\" or extra == \"test\"", "pytest (>=4.0,<6.0); extra == \"dev\" or extra == \"test\"", "sphinx (>=2.0,<3.0); extra == \"dev\" or extra == \"doc\"" ], "requires_python": ">=3.6,<4.0", "summary": "A library for reading and, in the future, writing metadata from audio files.", "version": "0.6.0" }, "last_serial": 5997313, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "d0d3d5f55b30d8c8332bf22df2235317", "sha256": "2c557aca272c79edb4db87e7c66c11d22355d07ae3f2858f88ef34cf8ef229a4" }, "downloads": -1, "filename": "audio_metadata-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d0d3d5f55b30d8c8332bf22df2235317", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 63392, "upload_time": "2018-10-19T16:07:16", "url": "https://files.pythonhosted.org/packages/9c/e0/16ec62c3fd7dd6c3d3ec0263d2145848e74b225570698e6bd228eba2eb96/audio_metadata-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "765ca32ee5d9d8b74af1a05fbc36c376", "sha256": "cd67bf6e0d61d48dcf700ac6d5d1d9f4deaba42cf6e9cf632cf4570304dd1899" }, "downloads": -1, "filename": "audio-metadata-0.1.0.tar.gz", "has_sig": false, "md5_digest": "765ca32ee5d9d8b74af1a05fbc36c376", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 21124, "upload_time": "2018-10-19T16:07:15", "url": "https://files.pythonhosted.org/packages/5a/fa/c1bceb53d64ea072f9ffd93a6b29122f3cac8f3c61e7bd71c5e7c3e67da9/audio-metadata-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "53781c832dc2a0378b47cd169a753676", "sha256": "8135a71f17d35f6f2b0716cefb14eeb54907dc0d4e1936a9451b2664f4ba2c26" }, "downloads": -1, "filename": "audio_metadata-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "53781c832dc2a0378b47cd169a753676", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 68874, "upload_time": "2018-11-13T11:20:53", "url": "https://files.pythonhosted.org/packages/a5/c6/42062a5d5bdbf430ee1afc5400cf2874cc4e946258474b28f52e8da03a31/audio_metadata-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0c44a04f6545f94cbb4afe1f1d8af37", "sha256": "0a8fcc324ce118c9b046f43b21e552cc2e54d19065912bb11c733c0cd8017b9b" }, "downloads": -1, "filename": "audio-metadata-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c0c44a04f6545f94cbb4afe1f1d8af37", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 22455, "upload_time": "2018-11-13T11:20:52", "url": "https://files.pythonhosted.org/packages/af/f0/9e5d3c246a260e0efb1b8cea8e23781542cbede1ac6e61e90116f89f3471/audio-metadata-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "e1a590eef2bf68b4e3db970973b75db1", "sha256": "d6f30519823442a22ebad12df9842fa3296671df589eed689d96ce924864112c" }, "downloads": -1, "filename": "audio_metadata-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e1a590eef2bf68b4e3db970973b75db1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 71220, "upload_time": "2019-01-15T19:07:03", "url": "https://files.pythonhosted.org/packages/75/fa/18e81009a8d88e11955767d6bfcf1ec6c4c0a290ba2fefaa42785a29efd7/audio_metadata-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9117a45f462ae069ff30c9ba2e3d2d8", "sha256": "47eecc776b6c94ac58153d768bc759d496aa97de15bfc7a3c742ab04e1e7a0c9" }, "downloads": -1, "filename": "audio-metadata-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c9117a45f462ae069ff30c9ba2e3d2d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23571, "upload_time": "2019-01-15T19:07:01", "url": "https://files.pythonhosted.org/packages/5e/6a/226c2cb77cbb83e71f43c73e76d5da4994e7ae34a450f231a1211a3a5bd3/audio-metadata-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "9fb16bc1672c0d1efd1b9541ca831394", "sha256": "b8e2bb1a4b0e8db3fdb0dd6ccfa550f7a7d188692d4a524ecba3d4fdd7bd246c" }, "downloads": -1, "filename": "audio_metadata-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9fb16bc1672c0d1efd1b9541ca831394", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 71150, "upload_time": "2019-01-16T18:44:04", "url": "https://files.pythonhosted.org/packages/ab/b6/1416bda53cc44c11d5f987d04ac923af5ef6b280df7584b8ca1ad7fa1268/audio_metadata-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12e4cfcd32de692a717dc2c742109b1d", "sha256": "2362db51a59c3948408ffeb68ca40acf4d5dfcac67dcab7628c9ec837fec89e7" }, "downloads": -1, "filename": "audio-metadata-0.3.1.tar.gz", "has_sig": false, "md5_digest": "12e4cfcd32de692a717dc2c742109b1d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23540, "upload_time": "2019-01-16T18:44:03", "url": "https://files.pythonhosted.org/packages/5e/55/4d9737d077be1e36937bfa1927bd16174a580ab40c75bc4c253ecbf58131/audio-metadata-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "965c21a9d42712d5f1d7fe0c992543e9", "sha256": "5806dca66df64f6b61139a5952fb684ef45bcc544a72c0de78e459e369acb627" }, "downloads": -1, "filename": "audio_metadata-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "965c21a9d42712d5f1d7fe0c992543e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 71813, "upload_time": "2019-01-26T21:18:25", "url": "https://files.pythonhosted.org/packages/dc/12/32bfadac2f6277f7737e345874c2f329fa650cdbc4307516851f6540b800/audio_metadata-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "883985790bac336623d8c63ddc3ada7b", "sha256": "d83998797902257c6c61f70dc00142b6c0e6a5699537753d6f3ecbf1c8209658" }, "downloads": -1, "filename": "audio-metadata-0.3.2.tar.gz", "has_sig": false, "md5_digest": "883985790bac336623d8c63ddc3ada7b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23751, "upload_time": "2019-01-26T21:18:23", "url": "https://files.pythonhosted.org/packages/8e/6a/3431c00332364d6b63ad9fd89234730538e8fb73835b0e4ca7916d7e3cc6/audio-metadata-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "1726bdbb73318a69bbd6eaf2533aaf34", "sha256": "9ccfaa99ea2c8d26df2185bed14432834451f1c29266d93ecbded540b1cbd828" }, "downloads": -1, "filename": "audio_metadata-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1726bdbb73318a69bbd6eaf2533aaf34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 71824, "upload_time": "2019-01-26T21:53:27", "url": "https://files.pythonhosted.org/packages/13/31/e3955a27559f0675b8d9dc75977d0d100c36a10f9e9009768d06140b9222/audio_metadata-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b53d60adaf8622e0e9467206a39892a", "sha256": "7db34e4cb045454f5cd7fec4f3f52c0e0fa2ed57991328f854d2dcdf3a91eb9c" }, "downloads": -1, "filename": "audio-metadata-0.3.3.tar.gz", "has_sig": false, "md5_digest": "1b53d60adaf8622e0e9467206a39892a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23771, "upload_time": "2019-01-26T21:53:26", "url": "https://files.pythonhosted.org/packages/9e/7e/6df4c6b5c793c7ff5d8a8e956bf6b7fcc04a811a7cf062226acf73ae2e89/audio-metadata-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "41884e13ccc74f124f11d14c25d199bf", "sha256": "6a506260aa70a9fa1e37e156f7b3a98d2ff52f9d1abaee1faf3cb0f79a196885" }, "downloads": -1, "filename": "audio_metadata-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "41884e13ccc74f124f11d14c25d199bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 71848, "upload_time": "2019-01-27T10:19:10", "url": "https://files.pythonhosted.org/packages/e6/dd/9dcde7d473be60a0604d8d40b583ac3de4633285322aafda741dd1197671/audio_metadata-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f9fc3eda660c33c9231d2f71d377e80", "sha256": "440be852cc67e83e0dc3254b229831c6c142c8957d35cf81b662599d308e2b3c" }, "downloads": -1, "filename": "audio-metadata-0.3.4.tar.gz", "has_sig": false, "md5_digest": "6f9fc3eda660c33c9231d2f71d377e80", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23756, "upload_time": "2019-01-27T10:19:08", "url": "https://files.pythonhosted.org/packages/3b/26/f09812ad478f94c8297be15eaeb67e549db297633291fca606b57abd18b9/audio-metadata-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "24ca0d54184780e9ad8f63a8844c2f43", "sha256": "1735a596efeb2d6d81a32ad6a8b3282374ca47a955008a70155f2a06e86f7230" }, "downloads": -1, "filename": "audio_metadata-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "24ca0d54184780e9ad8f63a8844c2f43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 74332, "upload_time": "2019-01-31T13:29:41", "url": "https://files.pythonhosted.org/packages/b3/a9/59551397abe838433c2214506615ce4adb0c4478a89e03ddb524db06bcd1/audio_metadata-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "72830c60e1002582a41c360243ee8c6c", "sha256": "a881f0f3b82752d306ac0a7850ed0e31bad275a399f63097733b4890986084b2" }, "downloads": -1, "filename": "audio-metadata-0.4.0.tar.gz", "has_sig": false, "md5_digest": "72830c60e1002582a41c360243ee8c6c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 24051, "upload_time": "2019-01-31T13:29:39", "url": "https://files.pythonhosted.org/packages/3c/67/83a7694ec734e6756ce1bff397a07cdd3256e8ff0849b115c6d20f763d12/audio-metadata-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "648aaa9d87306448f64c859639b3675d", "sha256": "c9c76aa82c43601887bb892b725c1ab76a689523cd672ba5d8e4fc5f2ef2cfa6" }, "downloads": -1, "filename": "audio_metadata-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "648aaa9d87306448f64c859639b3675d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 27917, "upload_time": "2019-07-22T21:21:58", "url": "https://files.pythonhosted.org/packages/39/df/d593394107c1fa36695ad35b094d260b2ee30341c80719528e6a66475718/audio_metadata-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c28d012cbab6133d8481fdfe18f6f733", "sha256": "7582c5ce007ed5420195dac5e2ebd8b6ead4029aee7c95fdd379d33d07da84f6" }, "downloads": -1, "filename": "audio-metadata-0.5.0.tar.gz", "has_sig": false, "md5_digest": "c28d012cbab6133d8481fdfe18f6f733", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 24992, "upload_time": "2019-07-22T21:21:56", "url": "https://files.pythonhosted.org/packages/4b/e5/e6d53e26262e1cce06ece8683c40d337f7c3c18860a093440e964bba9d4e/audio-metadata-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "5b3cdcfc2a6560c1b29ebc1204bfab6d", "sha256": "94764ec4ab71ed9e7f99a63e77fc72b578d19cb6759683aaece325ff51432592" }, "downloads": -1, "filename": "audio_metadata-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b3cdcfc2a6560c1b29ebc1204bfab6d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 27564, "upload_time": "2019-10-18T20:10:15", "url": "https://files.pythonhosted.org/packages/42/08/b73116af95697716f29599536e16ea0744a8a8a676f3804f32457da91f09/audio_metadata-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ab999dccc6361147ad31ed07b405eaa", "sha256": "7a0c060d05ac59a4ce841a485808fe8a6993fec554f96bee90e57e971c73a2a6" }, "downloads": -1, "filename": "audio-metadata-0.6.0.tar.gz", "has_sig": false, "md5_digest": "6ab999dccc6361147ad31ed07b405eaa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 24849, "upload_time": "2019-10-18T20:10:14", "url": "https://files.pythonhosted.org/packages/78/01/e8023f0f774066cbc94e7b0102f529c114480953ea054d6ceffb6da3b404/audio-metadata-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5b3cdcfc2a6560c1b29ebc1204bfab6d", "sha256": "94764ec4ab71ed9e7f99a63e77fc72b578d19cb6759683aaece325ff51432592" }, "downloads": -1, "filename": "audio_metadata-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b3cdcfc2a6560c1b29ebc1204bfab6d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 27564, "upload_time": "2019-10-18T20:10:15", "url": "https://files.pythonhosted.org/packages/42/08/b73116af95697716f29599536e16ea0744a8a8a676f3804f32457da91f09/audio_metadata-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ab999dccc6361147ad31ed07b405eaa", "sha256": "7a0c060d05ac59a4ce841a485808fe8a6993fec554f96bee90e57e971c73a2a6" }, "downloads": -1, "filename": "audio-metadata-0.6.0.tar.gz", "has_sig": false, "md5_digest": "6ab999dccc6361147ad31ed07b405eaa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 24849, "upload_time": "2019-10-18T20:10:14", "url": "https://files.pythonhosted.org/packages/78/01/e8023f0f774066cbc94e7b0102f529c114480953ea054d6ceffb6da3b404/audio-metadata-0.6.0.tar.gz" } ] }