Add @mediabunny/flac-encoder extension, clean up some other code, fix incorrect top-level tsconfig

This commit is contained in:
Vanilagy
2026-03-04 21:21:52 +01:00
parent e18da824ce
commit a15283eaa3
35 changed files with 1713 additions and 48 deletions
+1 -11
View File
@@ -7,7 +7,7 @@
*/
import createModule from '../build/aac';
import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
import type { PacketInfo, WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
type ExtendedEmscriptenModule = EmscriptenModule & {
cwrap: typeof cwrap;
@@ -28,8 +28,6 @@ let resetEncoderFn: (ctx: number) => void;
let getEncodedData: (ctx: number) => number;
let getEncodedPts: (ctx: number) => number;
let getEncodedDuration: (ctx: number) => number;
let closeEncoderFn: (ctx: number) => void;
const ensureModule = async () => {
if (!module) {
if (modulePromise) {
@@ -52,7 +50,6 @@ const ensureModule = async () => {
getEncodedData = module.cwrap('get_encoded_data', 'number', ['number']);
getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']);
getEncodedDuration = module.cwrap('get_encoded_duration', 'number', ['number']);
closeEncoderFn = module.cwrap('close_encoder', null, ['number']);
}
};
@@ -77,8 +74,6 @@ const initEncoder = async (
return { ctx, frameSize, extradata };
};
type PacketInfo = { encodedData: ArrayBuffer; pts: number; duration: number };
const drainPackets = (ctx: number) => {
const packets: PacketInfo[] = [];
@@ -151,11 +146,6 @@ const onMessage = (data: { id: number; command: WorkerCommand }) => {
resetEncoderFn(command.data.ctx);
result = { type: command.type, packets };
}; break;
case 'close': {
closeEncoderFn(command.data.ctx);
result = { type: command.type };
}; break;
}
const response: WorkerResponse = {
+2 -3
View File
@@ -19,7 +19,7 @@ import {
EncodedPacket,
registerEncoder,
} from 'mediabunny';
import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
import type { PacketInfo, WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
// @ts-expect-error An esbuild plugin handles this, TypeScript doesn't need to understand
import createWorker from './encode.worker';
@@ -184,7 +184,6 @@ class AacEncoder extends CustomAudioEncoder {
}
close() {
void this.sendCommand({ type: 'close', data: { ctx: this.ctx } });
this.worker?.terminate();
}
@@ -219,7 +218,7 @@ class AacEncoder extends CustomAudioEncoder {
this.emitPackets(result.packets);
}
private emitPackets(packets: Array<{ encodedData: ArrayBuffer; pts: number; duration: number }>) {
private emitPackets(packets: PacketInfo[]) {
assert(this.nextPacketTimestampInSamples !== null);
for (const p of packets) {
+8 -17
View File
@@ -25,11 +25,12 @@ export type WorkerCommand = {
data: {
ctx: number;
};
} | {
type: 'close';
data: {
ctx: number;
};
};
export type PacketInfo = {
encodedData: ArrayBuffer;
pts: number;
duration: number;
};
export type WorkerResponseData = {
@@ -39,20 +40,10 @@ export type WorkerResponseData = {
extradata: ArrayBuffer;
} | {
type: 'encode';
packets: Array<{
encodedData: ArrayBuffer;
pts: number;
duration: number;
}>;
packets: PacketInfo[];
} | {
type: 'flush';
packets: Array<{
encodedData: ArrayBuffer;
pts: number;
duration: number;
}>;
} | {
type: 'close';
packets: PacketInfo[];
};
export type WorkerResponse = {