@ audio/decode-dsd (英语)

解码DSD (DSF, DFF) 音频到PCM浮标样本.
npm install @audio/decode-dsd
import decode, { decoder } from '@audio/decode-dsd'
DSD是一款以2.8224 MHz和上("DSD64","DSD128",". 进入PCM是一个低通+被毁灭:一个Kaiser-windowed-sinc FIR可以去除被推向音频波段上方的噪声形状的分量化噪声,然后保存出每一个Ns样本. 第一个被毁灭的阶段(raw bits → 8× 该速率)直接运行在用每字节检索表的1位流上——塞巴斯蒂安·盖斯曼的经典把戏 dsd2pcm 时速 (BSD),同样被ffmpeg's使用 dsd_lsbf_planar编号 :dsd_msbf 解码器;这是同一想法的独立执行,而不是一个端口. 第二道普通的损毁飞行情报区(在多位浮流上,价格便宜得多)达到44.1/88.2/176.4千赫.
let { channelData, sampleRate } = decode(dsfOrDffBytes)
let dec = decoder({ sampleRate: 88200 })
let head = dec.decode(chunk1) // synchronous; partial blocks carry over
let tail = dec.flush()
dec.free()
两者 decode() 财务报告和审定财务报表 decoder() 是同步的——没有WASM,没有同步设置.
格式
DSF 数据源 (Sony DSD流文件): DSD 编号 :fmt 编号 :data 块,可达5.1个通道,DSD64/128/256/512样本率,1位LSB第一或MSB第一包装(按 fmt 块 bitsPerSample 字段,与 光谱 定义它),数据在固定的4096字节-每道块中互出. 跟踪 ID3v2 标记( 由 DSD 块头)通过 @audio/decode-dsd/meta。 。 。 .
DFF 翻译 (哲学DSDIFF): FRM8编号 :FVER编号 :PROP (单位:千美元)FS, (中文(简体) ), CHNL, (中文(简体) ), CMPR页:1DSD 块,数据互出字节-每道,总是MSB第一. DST 压缩文件 (CMPR =: 'DST '投掷 Unsupported: DST —— DST 是一个单独的无损编码器,而不是生的DSD. 已编辑主块( E)DIIN编号 :DITI/...)被忽略. 非标准 ID3 如果存在,块也可以通过 @audio/decode-dsd/meta。 。 。 .
API 密码
decode(src, opts?): AudioData
解码完整 Uint8Array 或者说 ArrayBuffer。 。 。 .
decoder(opts?): DSDDecoder
dec.decode(data)解码一个块。 DSF需要一个完整的4096 × channels-每个通道的字节块组,然后才能解码任何东西(这是容器本身的间叶单元);DFF只需要一个channels-字节框.dec.flush(): 零- 将一个短的最后块与容器自身的框架大小相匹配(将DSF spec本身的会合部分最后一个块相匹配)并解码——它不会单独排出FIR的组-延迟尾.dec.free(): 释放状态. 同上,注:.
| 选项 | 默认 | |
|---|---|---|
sampleRate | dsdRate / 32 | 产出率。 必须等于 dsdRate / 8, (中文(简体) ), /16, (中文(简体) ), /32,或 /64 (DSD64 → 352.8k / 176.4k / 88.2k / 44.1k) ——字节-外观-表相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相. |
cutoff | 0.45 | 传出带边缘,作为输出率的一小部分,用于确定最终率的阶段. |
length | 计算 | 该舞台的FIR水龙头。 更长 = 接近 stopband 目标,慢点. |
stopband | 100 | 目标停止波段衰减(dB),用于得到凯瑟β. |
AudioData 实值 { channelData: Float32Array[], sampleRate: number }。 。 。 .
DSD的1位±1地图直接到PCM全比例图——没有应用增益变化. SACD材料在DSD的名义"0分贝"中被掌握,相对于PCM全尺寸可以合法地击出+6分贝;这种解码器不会夹住或再正常化,因此这种材料会像其他比特透明的DSD解码器一样精确地从Float32(±1外值)的意义上剪接.
数字
- Bit-domain 第1阶段(固定):192个自来水龙头(96-tap half + 对称,12字节取景表),截取0.45×(dsdRate/8),100个dB目标截取带.
- 第2阶段(按请求构建):从Kaiser公式计算出在请求时真正无名的过渡波段(通过波段边缘到毁灭者自己的镜点)的长度
stopband。 。 。 . - 通过正确合成的5等1位调制解调器测量出(第2个测序测试语气),
test.js:在44.1k/88.2k/176.4k(需要80dB,在调制器自己的~100+dB理论上限下保守)的波段SNR 114–117 dB——见test.js以准确的引号发誓. - 对照
ffmpeg -i x.dsf -f f32le -ar 88200 -: 0.000分贝以内1千赫兹音色振幅,相位为1.6°后延迟对接后,持续时间精确. - 速度:60 s 立体声 DSD64 → 88.2 kHz 解码于 QQ 2.1 s (纯 JS,单核).
许可证
使用时 : 您有原始的DSD/SACD-rip材料(.dsf编号 :.dff)并需要PCM——回放,格式转换,或喂入常规DSP链. 不是 DST 解码器( DST 压缩 DFF 扔出) 也不是 DSD 编码器。 。 。 .
部分 @ audio/ 代码 ——解码出家伞.
麻省理工学院 音频