feat: add afterglow and synchronized drive lift
This commit is contained in:
@@ -27,6 +27,9 @@ export interface FakeAudioHarness {
|
||||
readonly gainNodes: readonly GainNode[];
|
||||
readonly buffers: AudioBuffer[];
|
||||
readonly destination: AudioNode;
|
||||
readonly resumeCount: number;
|
||||
readonly suspendCount: number;
|
||||
readonly closeCount: number;
|
||||
setCurrentTime(seconds: number): void;
|
||||
decodedBuffer(durationSeconds: number, channels?: number): AudioBuffer;
|
||||
emitContextState(state: AudioContextState | 'interrupted'): void;
|
||||
@@ -105,6 +108,9 @@ export function createFakeAudioHarness(): FakeAudioHarness {
|
||||
const sampleRate = 48_000;
|
||||
let currentTime = 0;
|
||||
let state: AudioContextState | 'interrupted' = 'suspended';
|
||||
let resumeCount = 0;
|
||||
let suspendCount = 0;
|
||||
let closeCount = 0;
|
||||
|
||||
const decodedBuffer = (durationSeconds: number, channels = 2): AudioBuffer => {
|
||||
const length = Math.max(1, Math.round(durationSeconds * sampleRate));
|
||||
@@ -232,12 +238,15 @@ export function createFakeAudioHarness(): FakeAudioHarness {
|
||||
return decodedBuffer(1);
|
||||
},
|
||||
async resume() {
|
||||
resumeCount += 1;
|
||||
state = 'running';
|
||||
},
|
||||
async suspend() {
|
||||
suspendCount += 1;
|
||||
state = 'suspended';
|
||||
},
|
||||
async close() {
|
||||
closeCount += 1;
|
||||
state = 'closed';
|
||||
},
|
||||
addEventListener(type: string, listener: () => void) {
|
||||
@@ -255,6 +264,15 @@ export function createFakeAudioHarness(): FakeAudioHarness {
|
||||
gainNodes,
|
||||
buffers,
|
||||
destination,
|
||||
get resumeCount() {
|
||||
return resumeCount;
|
||||
},
|
||||
get suspendCount() {
|
||||
return suspendCount;
|
||||
},
|
||||
get closeCount() {
|
||||
return closeCount;
|
||||
},
|
||||
setCurrentTime(seconds) {
|
||||
currentTime = seconds;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user