【Vite+Vue】获取歌曲元数据
项目环境:Vite + Vue3 +TypeScript
使用music-metadata-browser
安装
cnpm install music-metadata-browser |
引入
import * as musicMetadata from 'music-metadata-browser'; |
使用
- 提供
Blob
或File
类型的对象: parseBlob function. - 提供
URL
: fetch the audio track from.
parseBlob function
Parse an audio file from a Blob or File.
let blob; |
Or with async/await if you prefer:
(async () => { |
fetchUrl function
(async () => { |
踩坑实录
好了,官网的介绍很美好,使用看起来也很方便,可是我实际上使用的时候,就是各种undefined
,包括buffer等等一些很底层的东西。。。。
首先我这里是通过element-ui
的upload
拿到的文件,里面的raw
本身就是File
类型的,在log里面可以看到(此处没图),然后我试着转Blob
类型,还是不行
然后看到这么一句:If you prefer to parse files or streams server (node.js) side, you should use music-metadata instead.
虽然好像不太符合,但好歹试试吧,结果还是不行
然后我又去找有没有其他方案,比如看到了jsmediatags
,还是不行,而且配置和使用上更加复杂
然后我又去issues
里面找找看有没有希望
解决
结果还真有,但是是已经close的issue:Can’t use this package with vite 3 · Issue #836 · Borewit/music-metadata-browser (github.com)
(所以为什么close掉呢,明明完全没解决,也没有在readme上注明 神金
just one plugin: https://github.com/grikomsn/vite-plugin-ngmi-polyfill
安装
cnpm install vite vite-plugin-ngmi-polyfill -D |
使用
修改vite.config.ts
import { NgmiPolyfill } from "vite-plugin-ngmi-polyfill"; |
就可以了,就是这么简单
插播一下
拿到元数据后,可以发现里面的封面图片,是一个uint8array
的数组,那么如何显示呢?(利用img
标签,audio
和video
同理)
网上方法不止一种,但是花里胡哨的感觉不如直接用Blob
,虽然缺点是重启一下就没了,但是这里也只是一个小工具,一次性的用,管他呢
321上代码
// 创建一个 Blob 对象 |
然后把这个url
储存起来,后面直接调用即可
<el-table-column prop="cover" label="封面" align="center"> |
这里的img
在创建时,cover
已经存在了,直接显示没问题,不需要别的操作
那么如果是组件先出来的,src
在后面才有的呢?其实也很简单,给组件绑定一个ref
对象,通过ref
对象赋src
就可以了
321上代码
// 播放音频 |
<audio ref="audioRef" controls autoplay style="height:40px; width:90%;"> |
哈哈 没想到吧 又卡了这么久 真的很无语
下篇稍微没那么精彩 但是也很精彩((((