Tone.js/Tone/component/analysis/Waveform.ts
Yotam Mann d9a7520eb6 feat: Analyser can handle multiple channels
Can pass in `channels` into constructor which runs a separate analysis on each channel and returns the results as a Float32Array[].
2019-12-15 16:42:50 -05:00

57 lines
1.6 KiB
TypeScript

import { PowerOfTwo } from "../../core/type/Units";
import { optionsFromArguments } from "../../core/util/Defaults";
import { MeterBase, MeterBaseOptions } from "./MeterBase";
export interface WaveformOptions extends MeterBaseOptions {
/**
* The size of the Waveform. Value must be a power of two in the range 16 to 16384.
*/
size: PowerOfTwo;
}
/**
* Get the current waveform data of the connected audio source.
* @category Component
*/
export class Waveform extends MeterBase<WaveformOptions> {
readonly name: string = "Waveform";
/**
* @param size The size of the Waveform. Value must be a power of two in the range 16 to 16384.
*/
constructor(size?: PowerOfTwo);
constructor(options?: Partial<WaveformOptions>);
constructor() {
super(optionsFromArguments(Waveform.getDefaults(), arguments, ["size"]));
const options = optionsFromArguments(Waveform.getDefaults(), arguments, ["size"]);
this._analyser.type = "waveform";
this.size = options.size;
}
static getDefaults(): WaveformOptions {
return Object.assign(MeterBase.getDefaults(), {
size: 1024,
});
}
/**
* Return the waveform for the current time as a Float32Array where each value in the array
* represents a sample in the waveform.
*/
getValue(): Float32Array {
return this._analyser.getValue() as Float32Array;
}
/**
* The size of analysis. This must be a power of two in the range 16 to 16384.
* Determines the size of the array returned by [[getValue]].
*/
get size(): PowerOfTwo {
return this._analyser.size;
}
set size(size) {
this._analyser.size = size;
}
}