{"_id":"taglib","_rev":"31-bb3c5eaf44bb3013819aff4091143b78","name":"taglib","description":"Simple bindings to TagLib","dist-tags":{"latest":"0.8.1"},"versions":{"0.0.0":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.0.0","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://kodeclutz.blogspot.com/"},"contributors":[{"name":"Lennart Melzer","url":"https://github.com/lennart"}],"main":"lib/taglib.js","directories":{"lib":"lib"},"devDependencies":{"vows":">= 0.5.9"},"scripts":{"test":"vows","preinstall":"node-waf clean || true; node-waf configure build"},"engines":{"node":"*"},"dependencies":{},"_id":"taglib@0.0.0","_engineSupported":true,"_npmVersion":"1.0.6","_nodeVersion":"v0.5.4-pre","_defaultsLoaded":true,"dist":{"shasum":"e758ce41143f82b03514931234a4b2a07ee30ee8","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.0.0.tgz","integrity":"sha512-+14IegKVwusQDmuUythvy64YAbst8NWQRKfRNvCIDKsc3o2/IgAeiM6BWimlTy35fGseh8QV16q8pvmJIBlpQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCr9O+K/C6nVP+xrAXanmIVJ5MzfW5M+h+/y0tk9/LwJwIgdbL9cf7JcfgzY3Wx2z9Ct3Lkw4duRftQRORLi/FsIAg="}]},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.2.1":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.2.1","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://kodeclutz.blogspot.com/"},"main":"lib/taglib.js","directories":{"lib":"lib"},"devDependencies":{"vows":">= 0.5.9"},"scripts":{"test":"vows","preinstall":"node-waf clean || true; node-waf configure build"},"engines":{"node":"*"},"_npmUser":{"name":"nsm","email":"me@nikhilmarathe.me"},"_id":"taglib@0.2.1","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.5.11-pre","_defaultsLoaded":true,"dist":{"shasum":"c88fce19ead531d2761feabbbea6b0472485d6f6","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.2.1.tgz","integrity":"sha512-CgVtwlerQZpY96yiAH8prD25hlUEQQ9Ab2taR1+KUQXQ40iJaIkHh22RHHtYuvy+xD3pHJeDPC5qE6N1QSDZag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIz+8T8qpTyQZwnYKAUGBJyIH00x6DXg3HAkGWAK4RMgIgCHTEjVCisECvcoA2RO14XY0eHspd0L4f4DI6Gy1TuAs="}]},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.3.0":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.3.0","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"devDependencies":{"vows":">= 0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows","preinstall":"node-waf clean || (exit 0); node-waf configure build"},"engines":{"node":">= 0.4.10"},"_npmUser":{"name":"nsm","email":"me@nikhilmarathe.me"},"_id":"taglib@0.3.0","dependencies":{},"optionalDependencies":{},"_engineSupported":false,"_npmVersion":"1.1.1","_nodeVersion":"v0.7.7-pre","_defaultsLoaded":true,"dist":{"shasum":"1248b7e04184ccbb6f5213feadcc99e403d13609","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.3.0.tgz","integrity":"sha512-Xw3sj+VZqWEDfZhwghnJF80EE+3NvuIrNSXfLeTTXg9vaiQxkmq6lwbpWnh7c+MGxGdWAiW7MK0ngDlvVjQ4lA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK698hRzgWAGYk+a8NmlSo9da5CpHOYOBGju9m9HpVwwIhAOtQZnNvbW5XZvcsla/H7mCnKxWNhTxFQPA0X06fEIOH"}]},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.3.1":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.3.1","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"devDependencies":{"vows":">= 0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows","preinstall":"node-waf clean || (exit 0); node-waf configure build"},"engines":{"node":">= 0.4.10"},"_npmUser":{"name":"nsm","email":"nsm.nikhil@gmail.com"},"_id":"taglib@0.3.1","dependencies":{},"optionalDependencies":{},"_engineSupported":false,"_npmVersion":"1.1.1","_nodeVersion":"v0.7.7-pre","_defaultsLoaded":true,"dist":{"shasum":"9c08a6690a0acfb717ab08c8fa7b1361f490819a","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.3.1.tgz","integrity":"sha512-Ns/XcoF3F+RFSgQ5IOsOMgL+/pbaxzPRnfhEwCDLSP96BeoETNSGr9J0KU52ovx4oMjW2/Qwk8IuQgFeJQ/Muw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDn2FuVX1/RqWGLgDTnrYwxevxM90ia+YcQSmrpqBkBTQIgWNtUz8vyzY9f0Wda41bBNu1OuL9KFnzDg7Ccsc3Emwc="}]},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.5.0":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.5.0","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"devDependencies":{"vows":">= 0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows","preinstall":"node-waf clean || (exit 0); node-waf configure build"},"engines":{"node":">= 0.4.10"},"_npmUser":{"name":"nsm","email":"nsm.nikhil@gmail.com"},"_id":"taglib@0.5.0","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.23","_nodeVersion":"v0.7.9-pre","_defaultsLoaded":true,"dist":{"shasum":"cb519b5c23734f40e2b6056291cdef67212019e8","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.5.0.tgz","integrity":"sha512-RCD1q9/KZ/vdTvg4C+qC9ATN5Fk6VRCsI/BVBG11seuPSPQr0GBpf1OMnLXmvL3ly0uqBfjdjE71zPM0ppnYHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDK8GaeHn5NMDM6HnW6B52xD5ie8ERhe1Ypa0S9Ru/orAiBDRkpslxTdCHOl07LMpvhNwvG8c7/LnscP1ya7NADnpg=="}]},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.6.0":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.6.0","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"devDependencies":{"vows":">= 0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows","preinstall":"node-waf clean || (exit 0); node-waf configure build"},"engines":{"node":">= 0.6.1"},"_npmUser":{"name":"nsm","email":"nsm.nikhil@gmail.com"},"_id":"taglib@0.6.0","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"ef510f663d3354b054947e8f38d5fb0dced3d169","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.6.0.tgz","integrity":"sha512-J7AmZPkAtIf0H7jUmHToP3UHjLwyMCVhPdC+h4sa6Zel5yZ8Lwe8KjjLUyYnj6oRB5eUyAAEHxEfY8CkB0BzrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFaKGIGfq76XWADuVZAGYNjrj2rkxnU7RTXhOXsW/2IkAiEA0xWtKoZITVtPOTEMEr16YrwErwPEuIjxskzTWHRUWMU="}]},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.7.0":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.7.0","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"dependencies":{"bindings":"1.0.0"},"devDependencies":{"vows":">=0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows","install":"node-gyp rebuild"},"engines":{"node":">= 0.6.1"},"gypfile":true,"_id":"taglib@0.7.0","dist":{"shasum":"8a1fc6fc4e7c78409ad9b9ad74c08207a33ada0e","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.7.0.tgz","integrity":"sha512-snEnnXWZ8Kqlt0zyIIrYnH+wqa4pEPWhILwmLkIY5kMYTTDtFA0ga/mkYFJ9AdRqoeGRScVWzJVF1m29Ewkw7g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiggbY79cLRFTDazckyWX5RT9O8QFjg8oQhm8H+XgIrgIgelwjf3vuDes7GVoBqnkjgd4xalFzLWqrlCngmKVvYiI="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"nsm","email":"nsm.nikhil@gmail.com"},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.8.0":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.8.0","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"dependencies":{"bindings":"1.0.0"},"devDependencies":{"vows":">=0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows --spec","install":"node-gyp rebuild"},"engines":{"node":">=0.10.0 <0.11"},"gypfile":true,"bugs":{"url":"https://github.com/nikhilm/node-taglib/issues"},"_id":"taglib@0.8.0","dist":{"shasum":"998fc3ad9b9d6521bd36492af85783aed7203e66","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.8.0.tgz","integrity":"sha512-xStAUohhtkkfpv3fJxPIkUiFc2x94/F+IY1MoU8HcbTU3hptWvfX+e5z+IWBqJ0dP3gjB+bw0S0YrYEI5mKtWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBh9ZRs2fRYXdbOJcP1kckyounxNZEVqGC0KA/i978pXAiEAw15K4e35axcpPmNwoc74iYhB6eCr28oLZwHJKTZkgKo="}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"nsm","email":"nsm.nikhil@gmail.com"},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}]},"0.8.1":{"name":"taglib","description":"Simple bindings to TagLib","version":"0.8.1","repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"main":"taglib.node","directories":{"example":"examples"},"dependencies":{"bindings":"1.0.0"},"devDependencies":{"vows":">=0.6.0","async":">=0.1.0","match-files":"latest"},"scripts":{"test":"vows --spec","install":"node-gyp rebuild"},"engines":{"node":">=0.10.0 <0.11"},"gypfile":true,"gitHead":"486aabb4aaa7860501be1ef0b7709da61ecd02d2","bugs":{"url":"https://github.com/nikhilm/node-taglib/issues"},"homepage":"https://github.com/nikhilm/node-taglib","_id":"taglib@0.8.1","_shasum":"36b3064dd795d7185ae2ee47ddb57ebbe9bb20ec","_from":".","_npmVersion":"2.1.6","_nodeVersion":"0.10.33","_npmUser":{"name":"nsm","email":"me@nikhilmarathe.me"},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}],"dist":{"shasum":"36b3064dd795d7185ae2ee47ddb57ebbe9bb20ec","tarball":"https://registry.npmjs.org/taglib/-/taglib-0.8.1.tgz","integrity":"sha512-0U1vKEbNM4aHkabY9Wv2CObgEpB4elkX4T2leEqXGBA3A4ygxGdTcLOExgavtJuZvb2QXR7kklKbOLDzHPqzWA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwMU7cxHVAF3iD1GH1acL5xTmhyGZUNX04ButYL6zZHAiBG6oCCiqUoIKfuYm/IGsTGrp0wS9mftQWpxIrLU8vD3w=="}]}}},"maintainers":[{"name":"nsm","email":"me@nikhilmarathe.me"}],"time":{"modified":"2022-06-27T03:38:34.939Z","created":"2011-08-06T11:04:30.390Z","0.0.0":"2011-08-06T11:04:31.394Z","0.2.1":"2011-10-30T06:15:17.133Z","0.3.0":"2012-03-22T08:49:37.999Z","0.3.1":"2012-04-04T19:32:48.485Z","0.5.0":"2012-05-29T11:34:06.639Z","0.6.0":"2012-06-08T11:24:45.008Z","0.7.0":"2012-08-29T07:55:12.891Z","0.8.0":"2013-09-24T03:12:33.550Z","0.8.1":"2014-11-24T02:56:27.309Z"},"author":{"name":"Nikhil Marathe","email":"nsm.nikhil@gmail.com","url":"http://nikhilism.com"},"repository":{"type":"git","url":"git://github.com/nikhilm/node-taglib.git"},"users":{"nsm":true,"smerik":true},"readme":"node-taglib\n===========\n\nnode-taglib is a simple binding to\n[TagLib](http://developer.kde.org/~wheeler/taglib/) in Javascript.\n\nIt requires [node.js](http://nodejs.org).\n\nnode-taglib offers only an abstract interface without giving access to extended\nfile-specific attributes. It does allow custom resolvers though. Synchronous\nwrite support is supported for Tag.\n\n**NOTE: Asynchronous API requires use of TagLib [from git][taglib-git] since\ncertain bugs present in the released v1.7 cause problems.**\n\n[taglib-git]: https://github.com/taglib/taglib\n\n## Example\n\n    // load the library\n    var taglib = require('taglib');\n\n    // asynchronous API\n    taglib.tag(path, function(err, tag) {\n        tag.artist; // => \"Queen\"\n        tag.title = \"Erm\";\n        tag.saveSync();\n    });\n\n    // synchronous API\n    var tag = taglib.tagSync(path);\n\n    tag.title; // => \"Another one bites the dust\"\n    tag.artist; // => \"Kween\"\n    tag.artist = \"Queen\";\n\n    tag.isEmpty(); // => false\n\n    tag.saveSync(); // => true\n\n## Installation\n\n### via npm (Recommended)\n\n    npm install taglib\n\n### From source\n\n    # make sure you have node and taglib installed\n    git clone git://github.com/nikhilm/node-taglib.git\n    cd node-taglib\n    npm install .\n    node examples/simple.js /path/to/mp3_or_ogg_file\n    # you can now require('./taglib')\n\nThe `examples` show usage.\n\n## API\n\n### read(path, callback)\n### read(buffer, format, callback)\n\nThe function you will most likely want to use. `callback` should have signature\n`callback(err, tag, audioProperties)` where `tag` and `audioProperties` are\nplain-old JavaScript objects. For the distinction between these and `Tag`, see\n`Tag` below.\n\nIf there was an error reading the file, `err` will be non-null and `tag` and\n`audioProperties` will be `null`.\n\nIf no tag was found, `tag` will be an empty object (falsy). `tag` can have the\nfollowing fields. node-taglib currently supports only the fields common to all\nformats:\n\n* title   (string)\n* album   (string)\n* comment (string)\n* artist  (string)\n* track   (string)\n* year    (integer)\n* genre   (string)\n\nIf no audio properties could be read, `audioProperties` will be an empty object\n(falsy). The following fields are available in `audioProperties`, all are\nintegers:\n\n* length\n* bitrate\n* sampleRate\n* channels\n\nWriting audio properties is not supported.\n\nIn the second variant, which can read from a buffer, `format` should be\na string as specified in [Formats](#formats).\n\n### tag(path, callback)\n### tag(buffer, format, callback)\n\nRead the tag from the file at `path` _asynchronously_. The callback should have\nsignature `(err, tag)`. On success, `err` will be `null` and `tag` will be\na `Tag`. If errors occurred, `err` will contain the error and\n`tag` will be `null`. `err` will be an object with field `code` having the\ninteger error code (`errno.h`) and field `message` will have a string\nrepresentation.\n\nIn the second variant, which can read from a buffer, `format` should be\na string as specified in [Formats](#formats).\n\n### tagSync(path)\n### tagSync(buffer, format)\n\nRead the tags from the file at `path` _synchronously_. Returns a `Tag`. If\nerrors occurred, throws an exception.\n\nRead the tags from `buffer` assuming that it is a `format` file. See\n[Formats](#formats)\n\n### Tag\n\n**NOTE: A Tag object should *NOT* be created using `new`. Instead use `tag()`\nor `tagSync()`**\n\nA Tag object allows _read-write_ access to all the meta-data fields. For valid\nfield names see `read()` above.\n\nTo get a value, simply access the field -- `tag.artist`.\n\nTo set a value, assign a value to the field -- `tag.year = 2012`. You **will\nhave to call `saveSync()`** to actually save the changes to the file on disc.\n\n##### Large number of files\n\nDue to TagLib's design, every `Tag` object in memory has to keep its backing\nfile descriptor open. If you are dealing with a large number of files, you will\nsoon run into problems because operating systems impose limits on how many\nfiles a process can have open simultaneously. If you want to only read tags,\nuse `read()` instead as it will immediately close the file after the tag is\nread.\n\n### Tag.save(callback)\n\nSave any changes in the Tag meta-data to disk _asynchronously_. `callback` will\nbe invoked once the save is done, and should have a signature `(err)`. `err`\nwill be `null` if the save was successful, otherwise it will be an object with\n`message` having the error string and `path` having the file path.\n\n### Tag.saveSync()\n\nSave any changes in the Tag meta-data to disk _synchronously_. Throws an\nexception if the save failed.\n\n### Tag.isEmpty()\n\nReturns whether the tag is empty or not.\n\n### taglib.addResolvers(\\[resolver1\\[, resolver2\\[, ...]]])\n\nAdds JavaScript functions that will be called to resolve the filetype of\na file. Each resolver will be added to the front of the resolver queue. So the\nlast resolver will be called first. Multiple calls to `addResolvers` are\nallowed.\n\nEach resolver must be a JavaScript function which takes a `filename` parameter\nand returns a format `string`. List of [formats](#formats).\n\n### Formats {#formats}\n\nAny place where `node-taglib` expects a format can be passed one of these\n(case-insensitive):\n\n    \"MPEG\"\n    \"OGG\"      - Ogg Vorbis\n    \"OGG/FLAC\" - Ogg FLAC\n    \"FLAC\"\n    \"MPC\"\n    \"WV\"\n    \"SPX\"      - Ogg Speex\n    \"TTA\"\n    \"MP4\"\n    \"ASF\"\n    \"AIFF\"     - RIFF AIFF\n    \"WAV\"      - RIFF WAV\n    \"APE\"\n    \"MOD\"\n    \"S3M\"\n    \"IT\"\n    \"XM\"\n\nThese correspond directly to the [filetypes\nsupported](http://developer.kde.org/~wheeler/taglib/api/classTagLib_1_1File.html)\nby TagLib.  If the filetype cannot be determined, return anything other than\none of these literals.\n\nAsynchronous resolvers (which indicate the filetype via a callback rather than\na return value) are not supported.\n\n### taglib.WITH_ASF\n\nA boolean representing whether node-taglib supports ASF files. Depends on\nfeature being enabled in TagLib.\n\n### taglib.WITH_MP4\n\nA boolean representing whether node-taglib supports MP4 files. Depends on\nfeature being enabled in TagLib.\n\nContributors are listed at: <https://github.com/nikhilm/node-taglib/contributors>\n","homepage":"https://github.com/nikhilm/node-taglib","bugs":{"url":"https://github.com/nikhilm/node-taglib/issues"},"readmeFilename":"README.md"}