mdfpwm support
This commit is contained in:
parent
745b92660c
commit
55840b54e5
2 changed files with 89 additions and 12 deletions
49
mdfpwmWriter.ts
Normal file
49
mdfpwmWriter.ts
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
export interface MDFPWMMetadata {
|
||||
title?: string;
|
||||
artist?: string;
|
||||
album?: string;
|
||||
}
|
||||
|
||||
function toS1(str: string): Buffer {
|
||||
const utf8 = Buffer.from(str, "utf-8");
|
||||
const len = utf8.length;
|
||||
return Buffer.concat([Buffer.from([len]), utf8]);
|
||||
}
|
||||
|
||||
export function writeMDFPWMv3(
|
||||
left: Buffer,
|
||||
right: Buffer,
|
||||
meta: MDFPWMMetadata = {}
|
||||
): Buffer {
|
||||
if (left.length !== right.length) {
|
||||
throw new Error("Left and right DFPWM buffers must be the same length");
|
||||
}
|
||||
|
||||
let length = left.byteLength*2;
|
||||
const mdfpwm = []
|
||||
mdfpwm.push(Buffer.from("MDFPWM\x03", "ascii"));
|
||||
mdfpwm.push(Buffer.alloc(4));
|
||||
mdfpwm.push(toS1(meta.artist || ""));
|
||||
mdfpwm.push(toS1(meta.title || ""));
|
||||
mdfpwm.push(toS1(meta.album || ""));
|
||||
mdfpwm[1]!.writeUint32LE(length)
|
||||
|
||||
for(let i =0; i < length / 12000; i++) {
|
||||
const lStart = i * 6000;
|
||||
const rStart = i * 6000;
|
||||
|
||||
const lChunk = left.subarray(lStart, lStart + 6000);
|
||||
mdfpwm.push(lChunk);
|
||||
if (lChunk.length < 6000) {
|
||||
mdfpwm.push(Buffer.alloc(6000 - lChunk.length, 0x55));
|
||||
}
|
||||
|
||||
const rChunk = right.subarray(rStart, rStart + 6000);
|
||||
mdfpwm.push(rChunk);
|
||||
if (rChunk.length < 6000) {
|
||||
mdfpwm.push(Buffer.alloc(6000 - rChunk.length, 0x55));
|
||||
}
|
||||
}
|
||||
|
||||
return Buffer.concat(mdfpwm)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue