Initial Commit
This commit is contained in:
49
packages/media/audio/audio-sprite-player/bench/play.bench.ts
Normal file
49
packages/media/audio/audio-sprite-player/bench/play.bench.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { bench, run } from "mitata";
|
||||
import {
|
||||
createNullSpritePlaybackAdapter,
|
||||
createSpritePlayer,
|
||||
} from "../src/index.js";
|
||||
|
||||
const sprite = {
|
||||
data: new Uint8Array([1, 2, 3]),
|
||||
manifest: {
|
||||
version: 1 as const,
|
||||
format: "ogg" as const,
|
||||
sampleRate: 48000,
|
||||
channels: 2,
|
||||
totalDurationSeconds: 1,
|
||||
entries: [
|
||||
{
|
||||
name: "hit",
|
||||
offset: 0,
|
||||
byteLength: 100,
|
||||
durationSeconds: 0.1,
|
||||
sampleRate: 48000,
|
||||
channels: 2,
|
||||
format: "ogg" as const,
|
||||
},
|
||||
],
|
||||
contentHash: "0".repeat(64),
|
||||
},
|
||||
};
|
||||
|
||||
const adapter = createNullSpritePlaybackAdapter();
|
||||
const player = createSpritePlayer({ adapter, maxConcurrentVoices: 64 });
|
||||
await player.load(sprite);
|
||||
|
||||
bench("play() one-shot via NullSpritePlaybackAdapter", async () => {
|
||||
const h = await player.play("hit");
|
||||
await h.stop(0);
|
||||
});
|
||||
|
||||
const tightPlayer = createSpritePlayer({
|
||||
adapter: createNullSpritePlaybackAdapter(),
|
||||
maxConcurrentVoices: 1,
|
||||
});
|
||||
await tightPlayer.load(sprite);
|
||||
|
||||
bench("play() under voice-stealing pressure (cap=1)", async () => {
|
||||
await tightPlayer.play("hit");
|
||||
});
|
||||
|
||||
await run();
|
||||
@@ -0,0 +1,44 @@
|
||||
import { bench, run } from "mitata";
|
||||
import {
|
||||
createNullSpritePlaybackAdapter,
|
||||
createSpritePlayer,
|
||||
} from "../src/index.js";
|
||||
|
||||
function makeSprite(n: number) {
|
||||
const entries = Array.from({ length: n }, (_, i) => ({
|
||||
name: `clip-${i}`,
|
||||
offset: i * 100,
|
||||
byteLength: 100,
|
||||
durationSeconds: 0.05,
|
||||
sampleRate: 48000,
|
||||
channels: 2,
|
||||
format: "ogg" as const,
|
||||
}));
|
||||
return {
|
||||
data: new Uint8Array(n * 100),
|
||||
manifest: {
|
||||
version: 1 as const,
|
||||
format: "ogg" as const,
|
||||
sampleRate: 48000,
|
||||
channels: 2,
|
||||
totalDurationSeconds: n * 0.05,
|
||||
entries,
|
||||
contentHash: "0".repeat(64),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
for (const n of [1, 10, 100]) {
|
||||
const sprite = makeSprite(n);
|
||||
const player = createSpritePlayer({
|
||||
adapter: createNullSpritePlaybackAdapter(),
|
||||
maxConcurrentVoices: 256,
|
||||
});
|
||||
await player.load(sprite);
|
||||
const names = sprite.manifest.entries.map((e) => e.name);
|
||||
bench(`playSequence n=${n}`, async () => {
|
||||
await player.playSequence(names);
|
||||
});
|
||||
}
|
||||
|
||||
await run();
|
||||
Reference in New Issue
Block a user