花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 14|回复: 3

JS:读取本地音频元数据示例

[复制链接]
  • TA的每日心情
    奋斗
    2026-4-4 09:12
  • 签到天数: 1779 天

    [LV.Master]伴坛终老

    3174

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-4-4 20:11 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    获取本地音频元信息

    音频元信息(Metadata)指存储在音频文件中的描述性数据,通常包括以下内容:

    • 艺术家:演唱或创作该音频的艺术家
    • 专辑名称:音频所属的专辑名称
    • 曲目标题:音频的具体名称
    • 音频格式:如MP3、WAV、FLAC等
    • 比特率和采样率:音频文件的技术规格
    • 歌词:如果可用,音频文件中嵌入的歌词信息
    • 专辑封面:与音频文件相关的图像文件,通常是专辑的封面艺术

    例如在 Windows 资源管理器中,默认情况下,鼠标指针悬停在一首 MP3 文件上,系统会弹出项目类型、大小等歌曲信息,点选该文件,在右侧预览窗口可能还出现一张图片。

    音频的元数据可以增删改,Windows 平台资源管理器操作入口:属性→详细信息,或用专业工具完成。

    在JS中,获取这些信息有部分需要借助第三方库,且因为涉及到权限问题,通常只能操作通过 input[type=file] 控件(下称input控件)获取到的本地音频文档,对于服务器上的文档需要跨域支持(本文不讨论)。

    要读取音频文档的元数据信息,最简单的第三方库叫 jsmediatags,开源、免费项目,它可以拿到诸如艺术家、唱片集、标题、专辑封面等等音频元信息,但是它并不完美,其他信息还需要借助 input控件 集成的 file 数据和 audio 控件提供的相关数据实现。下面是引用 jsmediatags 的方法之一:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jsmediatags/3.9.5/jsmediatags.min.js"></script>

    如果访问上述资源不稳定(不墙裂支持的原因),有条件的可以将其保存在自己的虚拟或真实的服务器上使用。

    以下是一个完整的应用实例,它不仅仅是只使用 jsmediatags 库但突出它:

    <style> .pa { margin: auto; width: 700px; height: 460px; } .pa > p, .pa > pre { margin: 30px 0; } .flex { display: flex; justify-content: space-between; align-items: center; } .tMid { text-align: center; } #coverPic { max-width: 100%; } </style> <div class="pa"> <p class="flex"> <input type="file" id="musicFile" accept=".mp3, .ogg, .wav, .acc, .webm"> <audio id="audio" controls></audio> </p> <pre id="metaMsg"></pre> <p class="tMid"> <img id="coverPic" src="https://638183.freep.cn/638183/small/260.webp" alt=""> </p> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jsmediatags/3.9.5/jsmediatags.min.js"></script> <script> const rawPic = coverPic.src; // 原始图片 musicFile.onchange = () => { const fileList = musicFile.files; // 获取被选中文件列表 if (fileList.length === 0) return; // 未选择任何文件 const file = fileList[0]; // 处理列表中的第一个文件 jsmediatags.read(file, { onSuccess: (tag) => { // 获取封面 if (tag.tags.picture) { const { data, format } = tag.tags.picture; const byteArray = new Uint8Array(data); const blob = new Blob([byteArray], { type: format }); const cover = URL.createObjectURL(blob); // 创建URL对象 coverPic.src = cover || rawPic; // 如果没有封面就是用原始图片 } // 获取其它信息 metaMsg.innerText = `唱片集 :${tag.tags.album || '未知'} 艺术家 : ${tag.tags.artist || '未知'} 歌曲名 :${tag.tags.title || '未知'} 大 小 :${(file.size/1024/1024).toFixed(2)} MB`; }, onError: console.error }); audio.src = URL.createObjectURL(file); // 使用URL创建音频文档对象使其可用 audio.play(); // 播放音频 }; </script>

    评分

    参与人数 1威望 +50 金钱 +100 经验 +50 收起 理由
    红影 + 50 + 100 + 50 匠心独运,细节精致入微!

    查看全部评分

  • TA的每日心情
    奋斗
    2026-4-4 09:12
  • 签到天数: 1779 天

    [LV.Master]伴坛终老

    3174

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-4-4 20:15 | 显示全部楼层
    一楼的应用实例,直接通过 <script src=""></script> 标签引用 jsmediatags 库,运行时有效(前提是能正常访问 cloudflare.com  的资源),因为预览效果页面属性 frame 页面,不受制于 Discuz! 论坛程序的相关机制。若在 Discuz! 基础页面展示,需要动态加载JS资源。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1897

    主题

    32万

    回帖

    39万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2026-4-4 22:03 | 显示全部楼层
    有意思,去听了几首本地歌曲,其他的信息倒没什么,主要能看到专辑封面,这个通常看不到的呢
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2026-4-4 09:12
  • 签到天数: 1779 天

    [LV.Master]伴坛终老

    3174

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-4-4 22:06 | 显示全部楼层
    红影 发表于 2026-4-4 22:03
    有意思,去听了几首本地歌曲,其他的信息倒没什么,主要能看到专辑封面,这个通常看不到的呢

    音频文档的元信息可以随意编辑,有时候为了减少体量,优先删除封面,你的文件却是反过来?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-4-4 23:17 , Processed in 0.059818 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表