{"id":5030,"date":"2016-09-12T00:07:28","date_gmt":"2016-09-12T00:07:28","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=5030"},"modified":"2016-09-12T00:07:28","modified_gmt":"2016-09-12T00:07:28","slug":"processing-mp3s-python","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/","title":{"rendered":"Processing MP3s in python"},"content":{"rendered":"<p>There are a series of Python libraries for handling mp3s<sup><a href=\"#footnote_1_5030\" id=\"identifier_1_5030\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/pypi.python.org\/pypi\/scikits.audiolab\/\">1<\/a><\/sup><sup><a href=\"#footnote_2_5030\" id=\"identifier_2_5030\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/pypi.python.org\/pypi\/pysndfile\">2<\/a><\/sup>. I tried setting up a few of these &#8211; many seem to be out of date, unmaintained, or nearly impossible to set up due to Python version requirements that conflict with other libraries you may wish to use (most likely numpy, matplotlib, and the like)<\/p>\n<p>After going through a few of these, I found that ffmpeg is a well-supported choice for converting sound files, and works on about every OS. MP3s are effectively a compressed sound file, so the best way to work with them seems to be to &#8220;uncompress&#8221; them to WAV files. Conveniently, these closely resembly the internals of an array of measurements, so they are actually easy to work on. It is worth noting that effectively every Python library that claims to be able to operate on MP3s is actually a C library with Python bindings, so Python is hardly adding anything useful to the mix.<\/p>\n<p>However, it is quite convenient to call ffmpeg as a script directly from Python:<\/p>\n<pre lang=\"python\">\nimport scipy.io.wavfile as wavfile\nimport os.path\nfrom subprocess import call\n\nif (not os.path.isfile(fileWav)):\n  wavConvertCommand = \\\n    [\"d:\\\\Software\\\\ffmpeg-20160619-5f5a97d-win32-static\\\\bin\\\\ffmpeg.exe\", \n    \"-i\", fileMp3, \"-acodec\", \"pcm_u8\", \"-ar\", \"22050\", fileWav]\n  call(wavConvertCommand)\n<\/pre>\n<p>To actually work on these, you should install Anaconda<sup><a href=\"#footnote_3_5030\" id=\"identifier_3_5030\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/www.continuum.io\/downloads\">3<\/a><\/sup> so you get all the right analysis libraries.  Then, to do something like compute the signal to noise ratio in the file, you can do this:<\/p>\n<pre lang=\"python\">\nimport scipy.io.wavfile as wavfile\nimport scipy.stats as stats\n\ndata = wavfile.read(fileWav)[1]\nstats.signaltonoise(data)\n<\/pre>\n<ol class=\"footnotes\"><li id=\"footnote_1_5030\" class=\"footnote\">https:\/\/pypi.python.org\/pypi\/scikits.audiolab\/<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_5030\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_2_5030\" class=\"footnote\">https:\/\/pypi.python.org\/pypi\/pysndfile<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_2_5030\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_3_5030\" class=\"footnote\">https:\/\/www.continuum.io\/downloads<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_3_5030\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>How to get MP3s into memory in Python so you can do things with them<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[12],"tags":[67,178,226,371,447,584],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"How to get MP3s into memory in Python so you can do things with them\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Processing MP3s in python - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"How to get MP3s into memory in Python so you can do things with them\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-09-12T00:07:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2016-09-12T00:07:28+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Processing MP3s in python - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How to get MP3s into memory in Python so you can do things with them\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#blogposting\",\"name\":\"Processing MP3s in python - Gary Sieling\",\"headline\":\"Processing MP3s in python\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2016-09-12T00:07:28+00:00\",\"dateModified\":\"2016-09-12T00:07:28+00:00\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#webpage\"},\"articleSection\":\"How-To, audio, dsp, ffmpeg, mp3, python, wav\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/how-to\\\/#listItem\",\"name\":\"How-To\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/how-to\\\/#listItem\",\"position\":2,\"name\":\"How-To\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/how-to\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#listItem\",\"name\":\"Processing MP3s in python\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#listItem\",\"position\":3,\"name\":\"Processing MP3s in python\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/how-to\\\/#listItem\",\"name\":\"How-To\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/\",\"name\":\"Processing MP3s in python - Gary Sieling\",\"description\":\"How to get MP3s into memory in Python so you can do things with them\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/processing-mp3s-python\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2016-09-12T00:07:28+00:00\",\"dateModified\":\"2016-09-12T00:07:28+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Processing MP3s in python - Gary Sieling","description":"How to get MP3s into memory in Python so you can do things with them","canonical_url":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#blogposting","name":"Processing MP3s in python - Gary Sieling","headline":"Processing MP3s in python","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2016-09-12T00:07:28+00:00","dateModified":"2016-09-12T00:07:28+00:00","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#webpage"},"articleSection":"How-To, audio, dsp, ffmpeg, mp3, python, wav"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/how-to\/#listItem","name":"How-To"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/how-to\/#listItem","position":2,"name":"How-To","item":"https:\/\/www.garysieling.com\/blog\/category\/how-to\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#listItem","name":"Processing MP3s in python"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#listItem","position":3,"name":"Processing MP3s in python","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/how-to\/#listItem","name":"How-To"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/","name":"Processing MP3s in python - Gary Sieling","description":"How to get MP3s into memory in Python so you can do things with them","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2016-09-12T00:07:28+00:00","dateModified":"2016-09-12T00:07:28+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Processing MP3s in python - Gary Sieling","og:description":"How to get MP3s into memory in Python so you can do things with them","og:url":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/","article:published_time":"2016-09-12T00:07:28+00:00","article:modified_time":"2016-09-12T00:07:28+00:00","twitter:card":"summary_large_image","twitter:title":"Processing MP3s in python - Gary Sieling","twitter:description":"How to get MP3s into memory in Python so you can do things with them"},"aioseo_meta_data":{"post_id":"5030","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 17:05:33","updated":"2026-07-06 02:13:39","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/how-to\/\" title=\"How-To\">How-To<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tProcessing MP3s in python\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"How-To","link":"https:\/\/www.garysieling.com\/blog\/category\/how-to\/"},{"label":"Processing MP3s in python","link":"https:\/\/www.garysieling.com\/blog\/processing-mp3s-python\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/5030"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=5030"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/5030\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=5030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=5030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=5030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}