{"id":13473444,"url":"https://github.com/fasterthanlime/jsmad","last_synced_at":"2025-03-26T19:34:09.276Z","repository":{"id":64074186,"uuid":"1813466","full_name":"fasterthanlime/jsmad","owner":"fasterthanlime","description":":saxophone: Javascript MPEG-1 Audio Layer III (mp3) and ID3v2 decoder","archived":true,"fork":false,"pushed_at":"2013-08-21T13:51:21.000Z","size":34428,"stargazers_count":762,"open_issues_count":7,"forks_count":41,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-10-30T06:32:10.828Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://audiocogs.org/codecs/mp3/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fasterthanlime.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-05-28T08:38:03.000Z","updated_at":"2024-06-19T19:24:48.000Z","dependencies_parsed_at":"2023-01-14T20:45:25.269Z","dependency_job_id":null,"html_url":"https://github.com/fasterthanlime/jsmad","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsmad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsmad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsmad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsmad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fasterthanlime","download_url":"https://codeload.github.com/fasterthanlime/jsmad/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245722831,"owners_count":20661831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T16:01:03.678Z","updated_at":"2025-03-26T19:34:08.848Z","avatar_url":"https://github.com/fasterthanlime.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Audio Codecs"],"sub_categories":[],"readme":"**NOTICE: This project has been absorbed by the audiocogs js codecs initiative**\n\n**See \u003chttp://audiocogs.org/codecs/mp3/\u003e for details.**\n\n\n## About\n\njsmad is a pure javascript MP3 decoder, based on [libmad](http://www.underbit.com/products/mad/), with an ID3 decoder written from scratch.\n\nFor example, jsmad allows Firefox 4.0+ to play MP3s without any Flash. Faster loading times. Fewer security holes. No 64-bit headaches on Linux. Fewer memory leaks.\n\njsmad opens up a whole world of realtime audio applications implemented in javascript: \ndj-mixers, samplers, sequencers, all these applications benefit from using mp3s as audio source.  \n\njsmad is released under the GPLv2 license.\n\n## Demo\n\nSee a live demo here: http://jsmad.org/ in collaboration with [official.fm](http://official.fm/) and using the [musicmetric](http://musicmetric.com/) API\n\nIt works out of the box under Firefox 4.0 and above. On Chrome 13.0+, you have to enable manually the Web Audio API in 'about:flags', then restart the browser and it should work fine! No Opera support at the moment.\n\n## Authors\n\n  * [@nddrylliog](http://twitter.com/nddrylliog) - lead developer\n  * [@jensnockert](http://twitter.com/jensnockert) - helped porting \u0026 debugging the code at MusicHackDay Berlin\n  * [@mgeorgi](http://twitter.com/mgeorgi) - helped debugging the code after MusicHackDay Berlin\n\nSpecial thanks to [@antoinem](http://twitter.com/antoinem) for the Demo design and particularly to [@_romac](http://twitter.com/_romac) for adding features \u0026 keeping the demo server alive!\n\n## Porting notes\n\nObviously, porting low-level C code to Javascript isn't an easy task. Some things had to be \nadapted pretty heavily. jsmad is not the result of an automatic translation - all 15K+ lines\nof code were translated by hand by @nddrylliog and @jensnockert during MusicHackDay Berlin.\nThen, @mgeorgi helped us a lot with the debugging process, and @antoinem did the design of the demo\nduring MusicHackDay Barcelona.\n\nIt performs well enough to decode and play MP3s in realtime on Firefox on modern computers,\nalthough if you do lots of things at once, Firefox might forget at all about scheduled tasks\nand let the soundcard underflow. There is a rescue mechanism for that in the demo, which works\nmost of the time.\n\njsmad will undoubtedly be an interesting benchmark for browser's javascript implementations.\nWe would love to get feedback from the Mozilla, Google Chrome, and Opera team - shoot us a note!\n\n## Accuracy\n\nThe output from jsmad is NOT representative of the output quality of libmad itself. jsmad hasn't been\ntested for ISO/IEC 11172-4 computational accuracy requirements compliance. JavaScript number crunching\nhas always been a bad idea, and we're aware of that - we've done it to push the limits of what is being\ndone with JavaScript, much in the spirit of [pdf.js](https://github.com/andreasgal/pdf.js)\n\n## License\n\njsmad is available under the terms of the GNU General Public License, Version 2. Please note that\nunder the GPL, there is absolutely no warranty of any kind, to the extent permitted by the law.\n\nWhat GPL means for a javascript library is not exactly clear to us. What's clear is that you have\nto release any fork/changes under the GPL as well, so that everyone can profit from it. However,\nusing it on a commercial platform is probably alright. Remember: no guarantees, and we'd love to know\nabout it!\n\nlibmad has commercial license. As for jsmad, we're in a sort of grey legal area. If you're from\nUnderbit and want to work this out with us please drop me a note at amos@official.fm\n\n## Future\n\nWhat's next? A few things:\n\n  - Strings are still used in the core decoding routines instead of Uint8Arrays - this should change\n  - Optimizations, always\n  - Better buffering strategy - player.js is still pretty naive and we stumble now and then onto buffer underflow\n  - MPEG Layer I and II are not supported, only Layer III is - it should be pretty trivial but we had no interest for it in the first place.\n  - MPEG 2.5 is not supported.\n  - Free bitrate streams are not supported (this is different from VBR - VBR is supported)\n  - Most of ID3v2.2 and ID3v2.3 are implemented, but some tags are mising.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffasterthanlime%2Fjsmad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffasterthanlime%2Fjsmad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffasterthanlime%2Fjsmad/lists"}