mirror of
https://github.com/Tonejs/Tone.js
synced 2024-12-28 12:33:12 +00:00
56 lines
1.1 KiB
TypeScript
56 lines
1.1 KiB
TypeScript
import { Timeline, TimelineEvent } from "./Timeline";
|
|
import { Tone } from "../Tone";
|
|
import { Seconds } from "../type/Units";
|
|
|
|
interface TimelineValueEvent<T> extends TimelineEvent {
|
|
value: T;
|
|
}
|
|
|
|
/**
|
|
* Represents a single value which is gettable and settable in a timed way
|
|
*/
|
|
export class TimelineValue<Type> extends Tone {
|
|
|
|
readonly name: string = "TimelineValue";
|
|
|
|
/**
|
|
* The timeline which stores the values
|
|
*/
|
|
private _timeline: Timeline<TimelineValueEvent<Type>> = new Timeline({ memory: 10 })
|
|
|
|
/**
|
|
* Hold the value to return if there is no scheduled values
|
|
*/
|
|
private _initialValue: Type;
|
|
|
|
/**
|
|
* @param initialValue The value to return if there is no scheduled values
|
|
*/
|
|
constructor(initialValue: Type) {
|
|
|
|
super();
|
|
this._initialValue = initialValue;
|
|
}
|
|
|
|
/**
|
|
* Set the value at the given time
|
|
*/
|
|
set(value: Type, time: Seconds): this {
|
|
this._timeline.add({
|
|
value, time
|
|
});
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Get the value at the given time
|
|
*/
|
|
get(time: Seconds): Type {
|
|
const event = this._timeline.get(time);
|
|
if (event) {
|
|
return event.value;
|
|
} else {
|
|
return this._initialValue;
|
|
}
|
|
}
|
|
}
|