@ audio/ 代码 
在浏览器中尝试: 从视频中提取音频, (中文(简体) ), 音频转换器。 。 。 .
将任何音频格式解码为原始样本 .
JS/WASM没有ffmpeg或原生捆绑;在Node.js和浏览器中工作.
体积小的API,尺寸最小,性能相近,能懒散地装入,能分解.
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-aac | 368 KB (英语) | WASM + 联合来文 |
| MP4/MOV/M4V/3GP视频 | @ audio/decode-mp4 (英语) | 12 KB + 代码c | 联合来文 |
| 质量保证 | @audio/decode-qoa (英语) | 8个KB | 联合来文 |
| 森林论坛 | @ audio/ decode-aiff | 20个KB | 联合来文 |
| 中国足协 | @audio/decode-caf (英语) | 9个KB | 联合来文 |
| WebM / MKV 视频 | @ audio/decode-webm (英语) | 250 KB (英语) | 刚才 |
| AVI 视频 | @ audio/decode-avi | 8个 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个KB | WASM (libgsm) (英语) |
| WMA (v1, v2, Pro, 无损失) | @ audio/decode-wma (英语) | 463个KB | WASM (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-avi | PCM、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 } */ }
另见
许可证发放
伞和大多数编码包是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 (英语). 只安装符合您的工程的密码 。 雨伞按要求载出.
