Skip to content

Commit 16713fe

Browse files
committed
Adds audio node tests and validation
1 parent 249b6e3 commit 16713fe

23 files changed

+1335
-316
lines changed

.vscode/launch.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"configurations": [
3+
{
4+
"type": "node",
5+
"name": "vscode-jest-tests",
6+
"request": "launch",
7+
"console": "integratedTerminal",
8+
"internalConsoleOptions": "neverOpen",
9+
"disableOptimisticBPs": true,
10+
"program": "${workspaceFolder}/jest",
11+
"cwd": "${workspaceFolder}",
12+
"args": [
13+
"--runInBand",
14+
"--watchAll=false"
15+
]
16+
}
17+
]
18+
}

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"jest.jestCommandLine": "jest"
3+
}

demo/demo1.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@
8686
}
8787

8888
byteFrequencyButton.onclick = async () => {
89+
const response = await analyserNode.getByteFrequencyData()
90+
drawFrame(snapshotCanvas, snapshotContext2d, response)
8991
output.innerHTML =
9092
`
9193
\nByte Frequency Data

dist/bundle.js

Lines changed: 157 additions & 38 deletions
Large diffs are not rendered by default.

dist/bundle.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/processor.worklet.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/src/node/index.d.ts

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,43 @@
1-
import { EventListenerTypes, Message, MessageTypes, WindowingFunctionTypes } from "../types";
1+
import { EventListenerTypes, WindowFunctionTypes } from "../types";
22
declare type AdvancedAnalyserNodeProperties = {
3-
dataAsByteArray: boolean;
43
fftSize?: number;
54
samplesBetweenTransforms?: number;
65
timeDomainSamplesCount?: number;
7-
windowFunction?: WindowingFunctionTypes;
6+
windowFunction?: WindowFunctionTypes;
87
};
9-
export declare class AdvancedAnalyserNode extends AudioWorkletNode {
10-
_portMapId: number;
11-
_portMap: Map<any, any>;
12-
_eventListenersCount: Record<EventListenerTypes, EventListenerOrEventListenerObject[]>;
13-
constructor(context: BaseAudioContext, { fftSize, samplesBetweenTransforms, timeDomainSamplesCount, windowFunction }: AudioWorkletNodeOptions & AdvancedAnalyserNodeProperties);
14-
_uniqId(): number;
15-
_postMessage(message: Message, transfer?: Transferable[]): void;
8+
export declare class AdvancedAnalyserNode extends AudioWorkletNode implements AdvancedAnalyserNode {
9+
private _portMapId;
10+
private _portMap;
11+
private _fftSize;
12+
private _samplesBetweenTransforms?;
13+
private _timeDomainSamplesCount?;
14+
private _windowFunction;
15+
get fftSize(): number;
16+
set fftSize(value: number);
17+
set samplesBetweenTransforms(value: number);
18+
get samplesBetweenTransforms(): number;
19+
get frequencyBinCount(): number;
20+
set timeDomainSamplesCount(value: number);
21+
get timeDomainSamplesCount(): number;
22+
set windowFunction(value: WindowFunctionTypes);
23+
get windowFunction(): WindowFunctionTypes;
24+
private _eventListenersCount;
25+
constructor(context: BaseAudioContext, inputs: AdvancedAnalyserNodeProperties);
26+
private _validateInputs;
27+
private _uniqId;
28+
private _postMessage;
1629
onprocessorerror: (err: Event) => void;
1730
private _onmessage;
18-
_postIdentifiedDataRequest(requestType: MessageTypes.getByteFrequencyData | MessageTypes.getByteTimeDomainData | MessageTypes.getFloatFrequencyData | MessageTypes.getFloatTimeDomainData): Promise<unknown>;
31+
private _updateProcessorOptions;
32+
private _postIdentifiedDataRequest;
1933
getFloatFrequencyData(): Promise<unknown>;
2034
getByteFrequencyData(): Promise<unknown>;
2135
getFloatTimeDomainData(): Promise<unknown>;
2236
getByteTimeDomainData(): Promise<unknown>;
23-
start(): void;
24-
_pushEventListener(type: EventListenerTypes, listener: EventListenerOrEventListenerObject): void;
25-
_removeEventListener(type: EventListenerTypes, listener: EventListenerOrEventListenerObject): void;
26-
addEventListener(type: EventListenerTypes | "processorerror", listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
27-
removeEventListener(type: EventListenerTypes | "processorerror", listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
37+
private _pushEventListener;
38+
private _removeEventListener;
39+
addEventListener(type: "processorerror" | EventListenerTypes, listener: EventListenerOrEventListenerObject | CustomEvent<ArrayBuffer>, options?: boolean | AddEventListenerOptions): void;
40+
removeEventListener(type: "processorerror" | EventListenerTypes, listener: EventListenerOrEventListenerObject | CustomEvent<ArrayBuffer>, options?: boolean | EventListenerOptions): void;
2841
}
2942
export declare const createAdvancedAnalyserNode: (context: BaseAudioContext, options: AudioWorkletNodeOptions & AdvancedAnalyserNodeProperties) => Promise<AdvancedAnalyserNode>;
3043
export {};

dist/src/node/index.test.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export {};

dist/src/node/validation.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { WindowFunctionTypes } from "../types";
2+
export declare const validateFftSize: (value: number) => void;
3+
export declare const validateSamplesBetweenTransforms: (value: number) => void;
4+
export declare const validateTimeDomainSamplesCount: (value: number) => void;
5+
export declare const validateWindowFunction: (value: WindowFunctionTypes) => void;

dist/src/processor/index.d.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import FFT from 'fft.js';
2-
import { EventListenerTypes, Message, WindowingFunctionTypes } from '../types';
2+
import { EventListenerTypes, Message, WindowFunctionTypes } from '../types';
33
export declare class AdvancedAnalyserProcessor extends AudioWorkletProcessor {
44
_samplesCount: number;
55
_count: number;
@@ -10,7 +10,7 @@ export declare class AdvancedAnalyserProcessor extends AudioWorkletProcessor {
1010
_fftOutput: number[];
1111
_lastTransform: Float32Array;
1212
_samplesBetweenTransforms: number;
13-
_windowFunctionType: WindowingFunctionTypes;
13+
_windowFunctionType: WindowFunctionTypes;
1414
_isListeningTo: Record<EventListenerTypes, boolean>;
1515
/**
1616
* The W3C spec for the analyser node states that:
@@ -26,13 +26,11 @@ export declare class AdvancedAnalyserProcessor extends AudioWorkletProcessor {
2626
_maxDecibels: number;
2727
_smoothingTimeConstant: number;
2828
_portMap: Map<any, any>;
29-
_timeDomainSamplesCountValue?: number;
29+
_timeDomainSamplesCount: number;
3030
get _frequencyBinCount(): number;
3131
set frequencyBinCount(value: number);
3232
get _isListeningToFrequencyData(): boolean;
3333
get _isListeningToTimeDomainData(): boolean;
34-
get _timeDomainSamplesCount(): number;
35-
set _timeDomainSamplesCount(value: number);
3634
static get parameterDescriptors(): {
3735
name: string;
3836
defaultValue: number;
@@ -41,8 +39,8 @@ export declare class AdvancedAnalyserProcessor extends AudioWorkletProcessor {
4139
processorOptions: {
4240
fftSize: number;
4341
samplesBetweenTransforms: number;
44-
timeDomainSamplesCount?: number;
45-
windowFunction?: WindowingFunctionTypes;
42+
timeDomainSamplesCount: number;
43+
windowFunction: WindowFunctionTypes;
4644
};
4745
});
4846
_onmessage(message: Message): void;

0 commit comments

Comments
 (0)