@audio/decode-tta (英语)

解码 TTA( True Audio) 无损失音频到 PCM 样本, 纯 JavaScript
npm install @audio/decode-tta
import decode, { decoder } from '@audio/decode-tta'
TTA1是Alexander Djourik的无损编码器:每个通道,一个适应性的双态水稻编码器会给一个8-tap标志-sign-LMS"hybrid"过滤器和一个固定的一阶预测器;多通道流会用相接的半和分/分等来装饰最后一个通道来对抗其余部分. 从 TTA项目 和BSD许可的参考解码器—— Djourik & Zhilin, True Audio Software (2004): ttadec.c 编号 : filter.h 编号 : ttadec.h 编号 : ttalib.h,通过 Rockbox 的 Libtta 端口 保留原许可证——见 (原始内容存档于2018-09-21) (英语). LICENSE. TATED解码 ffmpeg -c:a tta 写道:8/16/24-bitPCM,单通16道.
let { channelData, sampleRate } = decode(ttaBytes)
let dec = decoder()
let head = dec.decode(chunk1) // synchronous; header/seek-table/frame boundaries carry over
let tail = dec.flush()
dec.free()
API 密码
decode(src: Uint8Array | ArrayBuffer): AudioData
解码一个完整的流.
decoder(): TTADecoder
同步流解码器. decode(chunk) 返回迄今为止数据中每个完整框架的样本——从查找表格中可以知道框架字节长度,所以任何地方的块边界(即使是中点)都只是结转到下一个呼叫. flush() 丢弃一个后端不完整的标题/搜索表/框架. free() 释放状态,并具有同源性. errors 为 CRC32 错配而降下的计数框 .
AudioData
{ channelData: Float32Array[], sampleRate: number }
《儿童权利公约》(CRC32)
TTA1 校验了标题,搜索表,以及每个框架的独立. 一个标题或求表不匹配所抛出——这些描述出溪流的形状,无法被解码周围. 帧不匹配不是致命的:由于每个帧从零开始重新设置其过滤器/pradictor/Rice状态,一个坏帧不能腐蚀其邻居,因此帧的样本被丢弃, errors 递增 解码继续.
页:1
- 只有格式1(平面PCM)被解码;格式2(密码加密的TTA)被抛出.
- 频道顺序完全保持编码的状态——TTA不会像AC-3/DTS那样重排频道顺序,所以
channelData[i]是流道i。 。 。 . - 检测到并跳过一个领先的 ID3v2 标记( ffmpeg 预后之一以外的一些编码器)
TTA1签名; 后面的 APEv2 标记被忽略 . - 切换后的文件会默默丢失其最终不完整的框架, 匹配
flush()'"在这个伞中的其他原子中"放下部分"的行为. - 60 s为 44.1 kHz 立体声解码器,以~225 ms为单位,安装在一台电流笔记本电脑上(~265×实时).
使用时 : 打开 .tta 文件,或解码从容器取出 TTA 轨迹.
部分 @ audio/ 代码 ——解码出家伞.
麻省理工学院 音频,从 BSD 许可的 TTA 参考解码器移植出算法——见 (原始内容存档于2018-09-21) (英语). LICENSE. TATED