我正在尝试从 XFDF 声音注释中解压缩 AIFF 音频数据,并在浏览器中播放音频。每当我从 Adobe Acrobat 导出声音注释并解压缩音频数据时,它都会导致看似垃圾数据。
下面的代码适用于以789C
header 开头的压缩音频,但是一些压缩流以4889
or开头78DA
并且无法在浏览器中播放。在使用 Acrobat 进行多次测试后,在 XFDF 中导出的声音注释以4889
.
// Two audio examples, one working and one failing.
// Can't paste it all due to char limit.
const compressedHexString_working = `789C3C9C059C13D7FBF5473293F55DBCB8BBBBBB53DC8ABB142FEE5AB4 ...`;
const compressedHexString_failing = `48892C97077C8FE716C7CFF9532EB7418D5E24768492DABB0862146DAF ...`;
// Convert hex string into ArrayBuffer.
const compressedByteArray = new Uint8Array(
compressedHexString_working
.match(/[a-fA-F0-9]{2}/g)
.map((str: string) => parseInt(str, 16))
);
const { default: zlib } = await import('pako');
const audioData = await zlib.inflate(compressedByteArray);
// Parse header bytes to determine audio file.
const fileHeader = new TextDecoder().decode(audioData).substring(0, 4);
console.log('Sound File Header:', fileHeader);
通常在解压成功时console.log
打印ID3
,RIFF
或。FORM
但是当解压失败的例子时,结果是一个垃圾值:�D�C
.
我是不是解压有误?还是我错过了一步?