主要观点:代码可以有趣且有创意,但有时需克制以免代码可读性差,偶尔有趣的解决方案是最好的。作者更新 Deno Audio Duration 包时想起一段有趣代码,可在原生 Deno 中获取 MP3 和 M4A 音频文件的毫秒时长且无依赖。获取时长的简单方法是通过 [Deno.Command
]调用ffprobe
或exiftool
,但依赖第三方二进制会使 Docker 镜像膨胀,MP3 文件无时长元数据需解析帧等后估计,M4A 音频等使用的容器规格有时长元数据,代码通过Promise.race
设置两个异步调用搜索 MP4 头部,默认另一个 promise 会继续运行,用AbortController
停止它,此代码虽不是最快但效果好,作者觉得竞速代码的想法很有趣,可多于两个 promise 竞速,最后呼吁享受编码。
关键信息:
- 介绍代码的有趣与创作性及需克制。
- 更新包时想起获取音频时长代码。
- 两种获取时长方法及各自特点。
Promise.race
的使用及作用。AbortController
的应用。
重要细节:
- [Deno Audio Duration]包的更新及相关链接。
- MP3 无时长元数据及处理方式。
- M4A 时长元数据位置及搜索方法。
Promise.race
中两个异步调用的方向。AbortController
停止多余 promise 的方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。