diff --git a/src/API.ts b/src/API.ts index 8385477..67883ba 100644 --- a/src/API.ts +++ b/src/API.ts @@ -938,7 +938,7 @@ export class UserAPI { // Time markers // ============================================================= - bar = (): number => { + cbar = (): number => { /** * Returns the current bar number * @@ -947,7 +947,7 @@ export class UserAPI { return this.app.clock.time_position.bar + 1; }; - tick = (): number => { + ctick = (): number => { /** * Returns the current tick number * @@ -956,7 +956,7 @@ export class UserAPI { return this.app.clock.tick + 1; }; - pulse = (): number => { + cpulse = (): number => { /** * Returns the current pulse number * @@ -965,7 +965,7 @@ export class UserAPI { return this.app.clock.time_position.pulse + 1; }; - beat = (): number => { + cbeat = (): number => { /** * Returns the current beat number * @@ -1008,7 +1008,7 @@ export class UserAPI { // Time Filters // ============================================================= - public mod = (...n: number[]): boolean => { + public beat = (...n: number[]): boolean => { const results: boolean[] = n.map( (value) => this.app.clock.pulses_since_origin % Math.floor(value * this.ppqn()) === @@ -1017,13 +1017,16 @@ export class UserAPI { return results.some((value) => value === true); }; - public modpulse = (...n: number[]): boolean => { + public pulse = (...n: number[]): boolean => { const results: boolean[] = n.map( (value) => this.app.clock.pulses_since_origin % value === 0 ); return results.some((value) => value === true); }; - modp = this.modpulse; + + // ============================================================= + // Modulo basd time filters + // ============================================================= public modbar = (...n: number[]): boolean => { const results: boolean[] = n.map( @@ -1032,18 +1035,12 @@ export class UserAPI { ); return results.some((value) => value === true); }; - modb = this.modbar; - // Original implementation - // public div = (chunk: number): boolean => { - // const time_pos = this.app.clock.pulses_since_origin; - // const current_chunk = Math.floor( - // time_pos / Math.floor(chunk * this.ppqn()) - // ); - // return current_chunk % 2 === 0; - // }; + // ============================================================= + // Other core temporal functions + // ============================================================= - public div = (chunk: number, ratio: number = 50): boolean => { + public flip = (chunk: number, ratio: number = 50): boolean => { /** * Determines if the current time position is in the first * or second half of a given time chunk. @@ -1065,6 +1062,10 @@ export class UserAPI { return current_chunk % 2 === 0; }; + // ============================================================= + // "On" Filters + // ============================================================= + public onbar = ( bars: number[] | number, n: number = this.app.clock.time_signature[0] @@ -1095,7 +1096,7 @@ export class UserAPI { if (decimal_part <= 0) decimal_part = decimal_part + this.ppqn() * this.nominator(); final_pulses.push( - integral_part === this.beat() && this.pulse() === decimal_part + integral_part === this.cbeat() && this.cpulse() === decimal_part ); }); return final_pulses.some((p) => p == true); @@ -1199,7 +1200,7 @@ export class UserAPI { rotate: number = 0 ): boolean => { return ( - this.mod(div) && this._euclidean_cycle(pulses, length, rotate).div(div) + this.beat(div) && this._euclidean_cycle(pulses, length, rotate).div(div) ); }; @@ -1249,7 +1250,7 @@ export class UserAPI { */ let convert: string = n.toString(2); let tobin: boolean[] = convert.split("").map((x: string) => x === "1"); - return this.mod(div) && tobin.div(div); + return this.beat(div) && tobin.div(div); }; // ============================================================= diff --git a/src/ArrayExtensions.ts b/src/ArrayExtensions.ts index 54771fa..ee30b87 100644 --- a/src/ArrayExtensions.ts +++ b/src/ArrayExtensions.ts @@ -14,12 +14,11 @@ declare global { repeatAll(amount: number): T; repeatPair(amount: number): T; repeatOdd(amount: number): T; - beat(): T; + beat(division: number): T; bar(): T; pulse(): T; pick(): T; loop(index: number): T; - div(division: number): T; shuffle(): this; rotate(steps: number): this; unique(): this; @@ -93,15 +92,6 @@ export const makeArrayExtensions = (api: UserAPI) => { return this[Math.floor(api.randomGen() * this.length)]; }; - Array.prototype.beat = function (beat: number = 1) { - /** - * Returns the element corresponding to the current beat - * - * @returns The element corresponding to the current beat - */ - return this[(api.app.clock.beats_since_origin / beat) % this.length]; - }; - Array.prototype.gen = function (min: number, max: number, times: number) { /** * Returns an array of random numbers. @@ -110,10 +100,13 @@ export const makeArrayExtensions = (api: UserAPI) => { * @param times - The number of random numbers to generate * @returns An array of random numbers */ - if(times < 1) { + if (times < 1) { return []; } - return Array.from({ length: times }, () => Math.floor(api.randomGen() * (max - min + 1)) + min); + return Array.from( + { length: times }, + () => Math.floor(api.randomGen() * (max - min + 1)) + min + ); }; Array.prototype.bar = function () { @@ -134,7 +127,7 @@ export const makeArrayExtensions = (api: UserAPI) => { return this[api.app.clock.time_position.pulse % this.length]; }; - Array.prototype.div = function (divisor: number) { + Array.prototype.beat = function (divisor: number = 1) { const chunk_size = divisor; // Get the first argument (chunk size) const timepos = api.app.clock.pulses_since_origin; const slice_count = Math.floor(