帮酷LOGO
  • 显示原文与译文双语对照的内容
Media Tags Reader (ID3, ID4)

  • 源代码名称:jsmediatags
  • 源代码网址:http://www.github.com/aadsm/jsmediatags
  • jsmediatags源代码文档
  • jsmediatags源代码下载
  • Git URL:
    git://www.github.com/aadsm/jsmediatags.git
  • Git Clone代码到本地:
    git clone http://www.github.com/aadsm/jsmediatags
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/aadsm/jsmediatags
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • MediaTags

    下一个版本的https://github.com/aadsm/JavaScript-ID3-Reader

    捐赠

    有几个人问我捐赠( 甚至是 crowdfunding ) 。 我希望你可以考虑捐款到 "。代码的女孩"npo 。 请给我一个消息,以便我可以添加你作为贡献者。

    内置电流支持

    • 文件读取器
      • NodeJS
      • XMLHttpRequest
      • Blob
      • 文件
      • 缓冲区/数组
      • 响应本机
    • 标签阅读器
      • ID3v1
      • ID3v2 ( 带有unsynchronisation支持) !
      • MP4
      • FLAC

    :如何使用

    NodeJS

    运行 npm install jsmediatags --save 要安装。

    // Simple API - will fetch all tagsvar jsmediatags =require("jsmediatags");jsmediatags.read("./music-file.mp3", {
     onSuccess:function(tag) {
     console.log(tag);
     },
     onError:function(error) {
     console.log(':(', error.type, error.info);
     }
    });
    // Advanced APIvar jsmediatags =require("jsmediatags");newjsmediatags.Reader("http://www.example.com/music-file.mp3")
    . setTagsToRead(["title", "artist"])
    . read({
     onSuccess:function(tag) {
     console.log(tag);
     },
     onError:function(error) {
     console.log(':(', error.type, error.info);
     }
     });

    浏览器

    在你的web应用程序目录中复制 dist/jsmediatags.min.js 文件并将它的包含在脚本标记中。 这个库也可以在 https://cdnjs.com/libraries/jsmediatags的cdnjs上使用。 UMD将为你提供多种使用选项来使用它:

    // As a global Objectvar jsmediatags =window.jsmediatags;
    // As a CommonJS Modulevar jsmediatags =require("jsmediatags");

    它支持从远程主机,Blob和文件对象加载文件:

    // From remote hostjsmediatags.read("http://www.example.com/music-file.mp3", {
     onSuccess:function(tag) {
     console.log(tag);
     },
     onError:function(error) {
     console.log(error);
     }
    });
    // From Blobjsmediatags.read(blob, ...);
    // From FileinputTypeFile.addEventListener("change", function(event) {
     var file =event.target.files[0];
     jsmediatags.read(file, ...);
    }, false);

    你可以在这里找到关于UMD使用选项的更多内容。

    本机响应

    响应本机支持需要一些附加依赖项:

    npm install --save jsmediatags buffer react-native-fs

    安装这些依赖项后,与响应的用法应保持一致:

    constjsmediatags=require('jsmediatags');newjsmediatags.Reader('/path/to/song.mp3')
    . read({
     onSuccess: (tag) => {
     console.log('Success!');
     console.log(tag);
     },
     onError: (error) => {
     console.log('Error');
     console.log(error);
     }
    });// Or wrap it with a promisenewPromise((resolve, reject) => {
     newjsmediatags.Reader('/path/to/song.mp3')
    . read({
     onSuccess: (tag) => {
     console.log('Success!');
     resolve(tag);
     },
     onError: (error) => {
     console.log('Error');
     reject(error);
     }
     });
    })
    . then(tagInfo=> {
     // handle the onSuccess return })
    . catch(error=> {
     // handle errors });

    文章

    • :lire,metadatas,mp3s,mp3s,mp3s,mp3s,mp3s 。

    文档

    输出

    这是传递给回调的jsmediatags.readonSuccess的对象的示例。

    ID3v2
    {
     type:"ID3",
     version:"2.4.0",
     major:4,
     revision:0,
     tags: {
     artist:"Sam, The Kid",
     album:"Pratica(mente)",
     track:"12",
     TPE1: {
     id:"TPE1",
     size:14,
     description:"Lead performer(s)/Soloist(s)",
     data:"Sam, The Kid" },
     TALB: {
     id:"TALB",
     size:16,
     description:"Album/Movie/Show title",
     data:"Pratica(mente)" },
     TRCK: {
     id:"TRCK",
     size:3,
     description:"Track number/Position in set",
     data:"12",
     }
     },
     size:34423,
     flags: {
     unsynchronisation:false,
     extended_header:false,
     experimental_indicator:false,
     footer_present:false }
    }
    MP4
    {
     type:"MP4",
     ftyp:"M4A",
     version:0,
     tags: {
     "©too": {
     id:"©too",
     size:35,
     description:'Encoding Tool',
     data:'Lavf53.24.2' }
     }
    }
    FLAC
    {
     type:"FLAC",
     version:"1",
     tags: {
     title:"16/12/95",
     artist:"Sam, The Kid",
     album:"Pratica(mente)",
     track:"12",
     picture:... }
    }

    tags 属性包含已经找到或者指定要读取的所有标记。 由于每个标记类型( 比如,: 对于同一类型的数据,ID3 。MP4使用不同的标记名称( 比如: 艺术家名称) 最常用的标签也可以在人类可读的名字( 。快捷方式快捷方式) 下。 在本例中,artist 将指向 TPE1.dataalbumTALB.data 等等。

    预期标记对象取决于读取( 。ID3,MP4,等等 )的标记类型,但它们都共享一个共同结构:

    {
     type: <the tag type: ID3, MP4, etc.>
     tags: {
     <shortcut name>: <points to a tags data>
     <tag name>: {
     id: <tag name>,
     data: <the actual tag data>
     }
     }
    }

    命令行快捷方式

    这些是支持的快捷方式。

    • title
    • artist
    • album
    • year
    • comment
    • track
    • genre
    • picture
    • lyrics

    HTTP访问控制( kdc )

    当使用 HTTP 请求时,需要确保服务器配置为接收请求的If-Modified-SinceRange 头。 可以通过返回带有选项请求响应的Access-Control-Allow-Headers HTTP头来配置。

    同样,你也应该允许浏览器读取 Content-LengthContent-Range 标题。 这可以通过返回 Access-Control-Expose-Headers HTTP头来配置。

    简而言之,需要以下标头:

    Access-Control-Allow-Headers: If-Modified-Since, Range
    Access-Control-Expose-Headers: Content-Length, Content-Range

    在服务器上没有配置这些选项时,这个库仍然有效。 但是它将下载整个文件,而不只是读取标签所必需的字节。

    文件和标签读取器

    这个库使用文件读取器( MediaFileReader API ) 读取文件本身和媒体标记读取器( MediaTagReader API ) 来解析文件中的标记。

    默认情况下,库将根据文件位置自动选取最合适的文件阅读器。 通常情况下,这将是文件所在的URL或者本地路径。

    标记阅读器采用了类似的方法。 根据文件中找到的标记签名,将选择最合适的标签阅读器。

    但是,你可以使用高级API指定要使用的文件阅读器或者标签阅读器。

    可以通过扩展MediaFileReader和MediaTagReader类来实现新文件和标记阅读器。 查看 Development 节的详细信息。

    引用

    • jsmediatags.Reader

      • setTagsToRead(tags: Array<string>) - 指定要读取的标签
      • setFileReader(fileReader: typeof MediaFileReader) - 使用这里特定的文件读取器
      • setTagReader(tagReader: typeof MediaTagReader) - 使用这里特定标签阅读器
      • read({onSuccess, onError}) - 读取标签。
    • jsmediatags.Config

      • addFileReader(fileReader: typeof MediaFileReader) - 在自动检测系统中添加新的文件阅读器。
      • addTagReader(tagReader: typeof MediaTagReader) - 在自动检测系统中添加新的标签阅读器。
      • setDisallowedXhrHeaders(disallowedXhrHeaders: Array<string>) - 防止库使用特定的http标头。 在处理你不控制的CORS启用的服务器时,这可能很有用。
      • setXhrTimeoutInSec(timeoutInSec: number) - 设置http请求的超时时间。 将它设置为 0,无超时。 默认为 30秒。

    插件开发

    源代码使用流进行类型检查,这意味着需要一个编译步骤来删除所有类型注释。 当使用NodeJS库时,你可以使用babel支持的运行时编译。 它将稍微慢一点,但不需要编译步骤。

    NodeJS ( 带有运行时编译)

    require('babel-core/register');var NodeFileReader =require('./src/NodeFileReader');var ID3v2TagReader =require('./src/ID3v2TagReader');...

    NodeJS ( 使用编译代码( 更快) )

    运行 npm run buildbuild2 目录中生成适当的JavaScript代码。

    var NodeFileReader =require('./build2/NodeFileReader');var ID3v2TagReader =require('./build2/ID3v2TagReader');...

    当文件更改时,运行 npm run watch 自动重新编译源代码。

    浏览器

    运行 npm run dist 生成这个库的UMD版本,可以在浏览器中使用。

    为浏览器创建两个软件包: dist/jsmediatags.min.jsdist/jsmediatags.js 。一个是最小化版本,该版本应用于生产中,另一个常规版本应用于调试。

    当文件更改时运行 npm run dist-watch 重新编译和browserify源代码。 这将只重新生成 dist/jsmediatags.js 文件。

    新文件阅读器

    扩展 MediaFileReader 类以实现新的文件读取器。 实现的方法包括:

    • 初始化
    • loadRange
    • getBytesLoaded
    • getByteAt

    当前实现:

    新标签阅读器

    扩展 MediaTagReader 类以实现新的标记读取器。 实现的方法包括:

    • getTagIdentifierByteRange
    • canReadTagFormat
    • _loadData
    • _parseData

    当前实现:

    单元测试

    Jest是使用的框架。 运行 npm test 以执行所有测试。

    JavaScript-ID3-Reader

    如果要将项目从 JavaScript-ID3-Reader 迁移到 jsmediatags,请使用以下指导示例:

    所有标签

    JavaScript-ID3-Reader:

    ID3.loadTags("filename.mp3", function() {
     var tags =ID3.getAllTags("filename.mp3");
     alert(tags.artist+" - "+tags.title+", "+tags.album);
    });

    jsmediatags:

    jsmediatags.read("filename.mp3", {
     onSuccess:function(tag) {
     var tags =tag.tags;
     alert(tags.artist+" - "+tags.title+", "+tags.album);
     }
    });

    特定标签

    JavaScript-ID3-Reader:

    ID3.loadTags("filename.mp3", function() {
     var tags =ID3.getAllTags("filename.mp3");
     alert(tags.COMM.data+" - "+tags.TCON.data+", "+tags.WXXX.data);
    },
    {tags: ["COMM", "TCON", "WXXX"]});

    jsmediatags:

    newjsmediatags.Reader("filename.mp3")
    . setTagsToRead(["COMM", "TCON", "WXXX"])
    . read({
     onSuccess:function(tag) {
     var tags =tag.tags;
     alert(tags.COMM.data+" - "+tags.TCON.data+", "+tags.WXXX.data);
     }
     });

    错误句柄

    JavaScript-ID3-Reader:

    ID3.loadTags("http://localhost/filename.mp3", function() {
     var tags =ID3.getAllTags("http://localhost/filename.mp3");
     alert(tags.comment+" - "+tags.track+", "+tags.lyrics);
    },
    {
     tags: ["comment", "track", "lyrics"],
     onError:function(reason) {
     if (reason.error==="xhr") {
     console.log("There was a network error: ", reason.xhr);
     }
     }
    });

    jsmediatags:

    newjsmediatags.Reader("filename.mp3")
    . setTagsToRead(["comment", "track", "lyrics"])
    . read({
     onSuccess:function(tag) {
     var tags =tag.tags;
     alert(tags.comment+" - "+tags.track+", "+tags.lyrics);
     },
     onError:function(error) {
     if (error.type==="xhr") {
     console.log("There was a network error: ", error.xhr);
     }
     }
     });

    目标

    • 改进JavaScript-ID3-Reader的API
    • 使用可以读代码和注释类型改进源代码
    • 进行单元测试
    • 支持 NodeJS



    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语