1
0
mirror of synced 2026-08-07 03:56:54 +00:00
Files
music-metadata/lib/asf/AsfUtil.ts
2024-08-08 19:15:49 +02:00

46 lines
1.2 KiB
TypeScript

import * as Token from 'token-types';
import * as util from '../common/Util.js';
import type { DataType } from './AsfObject.js';
export type AttributeParser = (buf: Uint8Array) => boolean | string | number | bigint | Uint8Array;
export function getParserForAttr(i: DataType): AttributeParser {
return attributeParsers[i];
}
export function parseUnicodeAttr(uint8Array: Uint8Array): string {
return util.stripNulls(util.decodeString(uint8Array, 'utf-16le'));
}
const attributeParsers: AttributeParser[] = [
parseUnicodeAttr,
parseByteArrayAttr,
parseBoolAttr,
parseDWordAttr,
parseQWordAttr,
parseWordAttr,
parseByteArrayAttr
];
function parseByteArrayAttr(buf: Uint8Array): Uint8Array {
return new Uint8Array(buf);
}
function parseBoolAttr(buf: Uint8Array, offset = 0): boolean {
return parseWordAttr(buf, offset) === 1;
}
function parseDWordAttr(buf: Uint8Array, offset = 0): number {
return Token.UINT32_LE.get(buf, offset);
}
function parseQWordAttr(buf: Uint8Array, offset = 0): bigint {
return Token.UINT64_LE.get(buf, offset);
}
function parseWordAttr(buf: Uint8Array, offset = 0): number {
return Token.UINT16_LE.get(buf, offset);
}