{ "info": { "author": "Augustin Lafanechere", "author_email": "augustin.lafanechere@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Programming Language :: Python :: 3.7", "Topic :: Multimedia :: Sound/Audio", "Topic :: Multimedia :: Sound/Audio :: Analysis", "Topic :: Multimedia :: Sound/Audio :: Conversion", "Topic :: Multimedia :: Sound/Audio :: Editors" ], "description": "# HARMONIZER\n[![PyPI version](https://badge.fury.io/py/harmonizer.svg)](https://badge.fury.io/py/harmonizer)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/harmonizer.svg)\n\nThis library helps you to **convert**, **normalize**, **enrich** and **validate** your music library.\nIt fullfills the need we have at [imr.party](https://imr.party) to harmonize the music library of our webradio.\n\nThe library comes shipped with a CLI tools which allow you to process audio files in a directory to create normalized mp3 versions of all files, enrich their metadata from various sources (Discogs, Spotify).\n\n## What it does\n* **Audio conversion**: Converts FLAC, MP3, AAC (m4a) to MP3 (128k, 192k, 320k).\n* **Audio normalization**: Peak normalize your input audio. Normalization is expressed in headroom ratio (0.1 means max peak will me 90% of the maximum volume).\n* **Metadata extraction** : \n * Audio tags: extracted from the audio and written to the JSON metadata results.\n * Audio fingerprinting: [Chromaprint](https://acoustid.org/chromaprint) fingerprinting extracted from the audio and written to the JSON metadata results. \n* **Metadata enrichment**:\n * Use Discogs API to find the releases related to the audio track. Get your tokens [here](https://www.discogs.com/developers/)\n * Use Spotify API to find the audio track in their catalog. Get your API secrets [here](https://developer.spotify.com/documentation/web-api/)\n* **Covert Art extraction (MP3 only)** : extract the covert art to an image file.\n* **Validation** : run various integrity check to assert the input audio respects the rules you defined in the your config.\n * Minimum input bit rate (MP3 only)\n * Mandatory audio tags\n * Accepted input mime types\n\n\n## Outputs\nAll file processing will create 2 or 3 files :\n* The mp3 converted and normalized audio version of the input audio file.\n* A metadata json file (check [metadata_output.json](./examples/metadata_output.json))\n* A cover art image file if present in the original file\n\n## Install\n### System dependency\nYou need to have **ffmpeg** on your system :\n\nOS X : `$ brew install ffmpeg`\\\nLinux: `$ sudo apt install ffmpeg`\n\n### Pip\n`$ pip install harmonizer`\n\n## CLI usage\n```bash\nUsage: harmonizer [OPTIONS] AUDIO_INPUT_DIR AUDIO_OUTPUT_DIR\n\n Please provide an audio_input_dir path and an audio_output_dir path to\n launch harmonization of your files.\n\nOptions:\n --json-out DIRECTORY Path to directory to which JSON metadata will be\n written to.\n --img-out DIRECTORY Path to directory to which extracted cover arts will\n be written to.\n -c, --conf FILE Path to your Harmonizer YAML configuration.\n --help Show this message and exit.\n\n```\n## Config file structure\nCheckout [example_config.yml](./example_config.yml).\n\n## Test\n`$ python setup.py test`\n\n## TODO:\n* Docstrings\n* More documentation\n* Better discogs search and match algorithm\n* More pipeline control through the config\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": "http://github.com/alafanechere/harmonizer", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "harmonizer", "package_url": "https://pypi.org/project/harmonizer/", "platform": "", "project_url": "https://pypi.org/project/harmonizer/", "project_urls": { "Homepage": "http://github.com/alafanechere/harmonizer" }, "release_url": "https://pypi.org/project/harmonizer/0.1.1/", "requires_dist": [ "eyeD3 (==0.8.10)", "pydub (==0.23.1)", "pyacoustid (==1.1.5)", "mutagen (==1.42.0)", "discogs-client (==2.2.2)", "spotipy (==2.4.4)", "titlecase (==0.12.0)", "click (==7.0)", "pyyaml (==5.1)", "logme (==1.3.2)", "schema (==0.7.0)" ], "requires_python": "", "summary": "Harmonizes your audio media: converts, normalizes, enriches and validates.", "version": "0.1.1" }, "last_serial": 5138907, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "54fdabc430f6532d21ecdfcd9356578b", "sha256": "97d65c2e70a1f217a6fd7456fa414b0e27c8571b71f0525082d378fcb2ed2826" }, "downloads": -1, "filename": "harmonizer-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "54fdabc430f6532d21ecdfcd9356578b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22412, "upload_time": "2019-04-13T14:39:05", "url": "https://files.pythonhosted.org/packages/fc/4c/aaef26dd48536227865406d22a41a93a457e49daf11764a4f3f7f5447015/harmonizer-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7a63064ef00551d12c2a08235ccc1b3", "sha256": "e6539cd8aae2b506add8fd2a52c3f7dbfd854b44b7f50a8116c6ccd402eaf9dd" }, "downloads": -1, "filename": "harmonizer-0.1.tar.gz", "has_sig": false, "md5_digest": "b7a63064ef00551d12c2a08235ccc1b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21073, "upload_time": "2019-04-13T14:39:07", "url": "https://files.pythonhosted.org/packages/6e/46/d7f36d69a2269aa311118072ae26089ba9d96ee35c84fd92a7ca62c90cb9/harmonizer-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "6639627966a739f0324387a5b410bfb9", "sha256": "eafa050f1f54069f33808030723bfd28d3c7bc6cff181798c9d4cf19329df300" }, "downloads": -1, "filename": "harmonizer-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6639627966a739f0324387a5b410bfb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22569, "upload_time": "2019-04-13T19:08:04", "url": "https://files.pythonhosted.org/packages/55/91/1c1f7f46bec861375ceb491f852d2d93e16a45a7d69a0e93daff00bc2d33/harmonizer-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c3e8d706ca7f8890ff0678e71e1257b", "sha256": "a7324f17f298be44dc0191c219c062a4ae475116210cb7806dc4183cb5518b91" }, "downloads": -1, "filename": "harmonizer-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7c3e8d706ca7f8890ff0678e71e1257b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21240, "upload_time": "2019-04-13T19:08:06", "url": "https://files.pythonhosted.org/packages/9a/b6/5eb60deee4a57e6fa6a6099aa4bbec174a8bdbbc21277126b988fb789812/harmonizer-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6639627966a739f0324387a5b410bfb9", "sha256": "eafa050f1f54069f33808030723bfd28d3c7bc6cff181798c9d4cf19329df300" }, "downloads": -1, "filename": "harmonizer-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6639627966a739f0324387a5b410bfb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22569, "upload_time": "2019-04-13T19:08:04", "url": "https://files.pythonhosted.org/packages/55/91/1c1f7f46bec861375ceb491f852d2d93e16a45a7d69a0e93daff00bc2d33/harmonizer-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c3e8d706ca7f8890ff0678e71e1257b", "sha256": "a7324f17f298be44dc0191c219c062a4ae475116210cb7806dc4183cb5518b91" }, "downloads": -1, "filename": "harmonizer-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7c3e8d706ca7f8890ff0678e71e1257b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21240, "upload_time": "2019-04-13T19:08:06", "url": "https://files.pythonhosted.org/packages/9a/b6/5eb60deee4a57e6fa6a6099aa4bbec174a8bdbbc21277126b988fb789812/harmonizer-0.1.1.tar.gz" } ] }