@audio/decode

中文文档
4.2.0发布于 2026/10/18MITTypeScriptES Module近 30 天下载 60.2万

在节点或浏览器中解码音频数据

中文使用文档
文档目录10 节
  1. 整个文件
  2. 被截断
  3. 流线
  4. 视频文件
  5. 浏览器
  6. 同步编码器
  7. 元数据
  8. 网络工人
  9. 另见
  10. 许可证发放

@ audio/ 代码 test

在浏览器中尝试: 从视频中提取音频, (中文(简体) ), 音频转换器。 。 。 .

将任何音频格式解码为原始样本 .
JS/WASM没有ffmpeg或原生捆绑;在Node.js和浏览器中工作.
体积小的API,尺寸最小,性能相近,能懒散地装入,能分解.

npm install @audio/decode

import decode from '@audio/decode';

const { channelData, sampleRate } = await decode(anyAudioBuffer);

支持的格式

格式软件包大小发动机
MP3 主题@ audio/decode-mp3 (英语)92个KB刚才
瓦维@audio/decode-wav (英语)11个KB联合来文
OGG 沃尔比斯@ audio/decode-vorbis (英语)166 KB (英语)刚才
拉丁美洲和加勒比@audio/decode-flac (英语)135 KB (韩语)刚才
奥普斯 Opus@ audio/decode-opus (英语)166 KB (英语)刚才
M4A / AAC / 拉丁美洲和加勒比@ audio/decode-aac368 KB (英语)WASM + 联合来文
MP4/MOV/M4V/3GP视频@ audio/decode-mp4 (英语)12 KB + 代码c联合来文
质量保证@audio/decode-qoa (英语)8个KB联合来文
森林论坛@ audio/ decode-aiff20个KB联合来文
中国足协@audio/decode-caf (英语)9个KB联合来文
WebM / MKV 视频@ audio/decode-webm (英语)250 KB (英语)刚才
AVI 视频@ audio/decode-avi8个 KB + 代码c联合来文
AC-3号@ audio/decode-ac3 (英语)43个KB刚才
数字@ audio/decode-dts (英语)200 KB (英语)刚才
电子AC-3(多比数字加号,+AC-3)@ audio/ decode-eac3 (英语)432 KB (英语)WASM (FFmpeg libavcodec, LGPL) (英语)
APE (Monkey 音频)@ audio/ decode-ape (英语)262 KB (韩语)WASM (FFmpeg libavcodec, LGPL) (英语)
AMR (韩语)@ audio/decode-amr (英语)241 KB (韩语)刚才
GSM 06.10 (画框,按名称)@ audio/decode-gsm (英语)23个KBWASM (libgsm) (英语)
WMA (v1, v2, Pro, 无损失)@ audio/decode-wma (英语)463个KBWASM (FFmpeg libavcodec, LGPL) (英语)
自动包@audio/decode-wavpack (英语)51个KB刚才
TTA (真声)@audio/decode-tta (英语)11个KB联合来文
Musepack SV7 / SV8 请检查url=值 (帮助)@ audio/decode-mpc (英语)51个KB刚才
MOD / XM / S3M / IT 跟踪模块@ audio/decode-mod (英语)1.4 甲基溴WASM (libopenmpt) (英语)
DSF / DFF (DSD64–512 — PCM) (中文(简体) )@ audio/decode-dsd (英语)18个KB联合来文

整个文件

自动检测格式. 输入可以是 矩阵缓冲, (中文(简体) ), Uint8 阵列, (中文(简体) ), 缓冲,或任何东西 实现到字节,包括 块编号 :文件 或获取 回应。 。 。 .

import decode from '@audio/decode'

let { channelData, sampleRate } = await decode(buf)
let fromFile = await decode(fileInput.files[0])   // File
let fromUrl  = await decode(await fetch(url))      // Response

被截断

let dec = await decode.mp3()
let a = await dec(chunk1)    // { channelData, sampleRate }
let b = await dec(chunk2)
await dec()                  // close

流线

import decode from '@audio/decode'

for await (let { channelData, sampleRate } of decode.mp3(response.body)) {
  // process chunks
}

与 ReadableStream, (中文(简体) ), fetch 身体 节点流 或任何可同步的.

格式 : mp3, (中文(简体) ), flac, (中文(简体) ), opus, (中文(简体) ), oga, (中文(简体) ), m4a, (中文(简体) ), mp4, (中文(简体) ), mov, (中文(简体) ), wav, (中文(简体) ), qoa, (中文(简体) ), aac, (中文(简体) ), aiff, (中文(简体) ), caf, (中文(简体) ), webm, (中文(简体) ), mkv, (中文(简体) ), avi, (中文(简体) ), ac3, (中文(简体) ), dts, (中文(简体) ), amr, (中文(简体) ), gsm, (中文(简体) ), wma, (中文(简体) ), eac3, (中文(简体) ), ape, (中文(简体) ), wv, (中文(简体) ), tta, (中文(简体) ), mpc, (中文(简体) ), dsf, (中文(简体) ), dff, (中文(简体) ), mod, (中文(简体) ), xm, (中文(简体) ), s3m, (中文(简体) ), it。 。 。 .

视频文件

视频容器直接解码到他们的音频轨道——视频流被跳过,不涉及ffmpeg:

let { channelData, sampleRate } = await decode(await fetch('trailer.mp4'))
集装箱软件包音频解码器
MP4、MOV、M4V、3GP@ audio/decode-mp4 (英语)AAC、ALAC、MP3、FLAC、Opus、AC-3、DTS、AMR、PCM、G.711
网络M, MKV@ audio/decode-webm (英语)Opus、Vorbis、AAC、ALAC、MP3、FLAC、AC-3、DTS、PCM
AVI 语句@ audio/decode-aviPCM、MP3、AAC、AC-3、DTS、G.711

绕行道保持其布局(最高可达5.1,WAV频道顺序). E-AC-3和TrueHD轨道抛出一个给解码器命名的错误.

浏览器

在没有捆绑的CDN工作. 解码器通过动态导入按需加载, 只用于格式解码 :

<script type="module">
  import decode from 'https://esm.sh/@audio/decode'
  let { channelData, sampleRate } = await decode(buf)
</script>

对于自宿,请使用导入地图指向 @audio/decode 每个需要 @audio/decode-* 软件包到本地文件。 通过相对路径加载编码-内部文件.

每个编码包的主要导出工作在一个 AudioWorklet 无 Blob, (中文(简体) ), TextDecoder, (中文(简体) ), Worker,或 fetch。直接导入编码包是因为 @audio/decode 使用动态导入.

在渲染前初始化 WASM 。 解码会运行在工作网线上,并可中断音频输出.

同步编码器

保护伞仍用于探测、懒惰进口和 Blob编号 :Response 投入. 为同步调用直接导入一个编码包.

wav, (中文(简体) ), qoa, (中文(简体) ), aiff,以及 caf 是同步的 :

import decode from '@audio/decode-wav'
let pcm = decode(wavBytes)

WASM 编码器同步初始化,然后同步解码:

import { decoder } from '@audio/decode-flac'
let dec = await decoder()
let pcm = dec.decode(bytes)
let tail = dec.flush()
dec.free()

元数据

读取标签,图片,标记和地区而不解码样本. 备查 wav, (中文(简体) ), mp3, (中文(简体) ), flac, (中文(简体) ), oga (Ogg Vorbis), (英语:, opus,以及 m4a。 。 。 .

import { wav, mp3, flac, oga, opus, m4a } from '@audio/decode/meta'

let { meta, sampleRate, markers, regions } = mp3(bytes)
// meta: { title, artist, album, year, bpm, key, comment, pictures, raw, ... }
// markers: [{ sample, label }]
// regions: [{ sample, length, label }]

每个编码子包也直接暴露出它的解析器:

import { parseMeta } from '@audio/decode-wav/meta'
let info = parseMeta(wavBytes)

网络工人

每个 @audio/decode-* 软件包是一个自成一体的无害环境管理模块,可在工人中运行:

// decode-worker.js
import decode from '@audio/decode-mp3'

self.onmessage = async ({ data }) => {
  let pcm = await decode(data)
  self.postMessage(pcm, pcm.channelData.map(ch => ch.buffer))
}

// main.js
let worker = new Worker('./decode-worker.js', { type: 'module' })
worker.postMessage(mp3buf, [mp3buf])
worker.onmessage = ({ data }) => { /* { channelData, sampleRate } */ }

另见

  • 音频 – 编辑,测量并保存:修剪,发声到分光,快递检查,一个CLI.
  • 编码 – 将PCM编码为任何音频格式.
  • 音频类型 – 从缓冲器中检测音频格式.

许可证发放

伞和大多数编码包是MIT. 以其他图书馆为基础的编解码器携带该图书馆的执照: @ audio/decode-aac GPL-2.0; (中文(简体) ); @ audio/decode-ac3 (英语) 财务报告和审定财务报表 @ audio/decode-dts (英语) GPL-2.0-或-后; @ audio/ decode-ape (英语), (中文(简体) ), @ audio/ decode-eac3 (英语) 财务报告和审定财务报表 @ audio/decode-wma (英语) LGPL-2.1-或-后期(一个瘦小的FFmpeg libavcodec构建,没有GPL组件); @audio/decode-wavpack (英语), (中文(简体) ), @ audio/decode-mpc (英语) 财务报告和审定财务报表 @ audio/decode-mod (英语) (一) BSD-3-吊灯; @ audio/decode-amr (英语) 阿帕奇2.0 (英语). 只安装符合您的工程的密码 。 雨伞按要求载出.

ॐ • 妇女 麻省理工学院

版本与发布记录

@audio/decode 共发布 16 个版本,首次发布于 2026/07/09;过去 12 个月发布了 16 个版本。

版本发布日期距今
4.2.0latest2026/10/1820 天前
4.1.12026/10/071 个月前
4.1.02026/10/071 个月前
4.0.02026/09/291 个月前
3.16.22026/09/271 个月前
3.16.12026/09/261 个月前

关于 @audio/decode 的常见问题

@audio/decode 是什么?

在节点或浏览器中解码音频数据

如何安装 @audio/decode?

在项目目录运行 npm install @audio/decode,或使用 pnpm add / yarn add / bun add。

@audio/decode 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@audio/decode 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@audio/decode 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@audio/decode 可以商用吗?

@audio/decode 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@audio/decode 的下载量有多少?

根据 npm 官方下载统计,@audio/decode 在 2026/10/07 – 2026/11/05 这 30 天内被下载 602,170 次,日均约 20,072 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@audio/decode 还在维护吗?

最新版本 4.2.0 发布于 2026/10/18(20 天前);至今共发布 16 个版本,其中过去 12 个月发布了 16 个;首次发布于 2026/07/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。