From 578dc694880021eacb0297f219a2a4a386583a11 Mon Sep 17 00:00:00 2001 From: Raphael Forment Date: Thu, 21 Sep 2023 21:35:03 +0200 Subject: [PATCH] restore func --- src/ArrayExtensions.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/ArrayExtensions.ts b/src/ArrayExtensions.ts index 202a5e3..b7d73c1 100644 --- a/src/ArrayExtensions.ts +++ b/src/ArrayExtensions.ts @@ -1,5 +1,6 @@ import { type UserAPI } from "./API"; import { SCALES } from "./Scales"; +import { safeScale } from "zifferjs"; export { }; declare global { @@ -22,6 +23,7 @@ declare global { loop(index: number): T; shuffle(): this; scale(name: string, base_note?: number): this; + arp(scaleName: string): this; rotate(steps: number): this; unique(): this; in(value: T): boolean; @@ -366,10 +368,13 @@ Array.prototype.scale = function(scale: string = "major", base_note: number = 0) /** * @param scale - the scale name * @param base_note - the base note to start at (MIDI note number) + * + * @returns notes from the desired scalek */ // This is a helper function to handle up or down octaviation. const mod = (n: number, m: number) => ((n % m) + m) % m; + if (SCALES.hasOwnProperty(scale)) { const selected_scale = SCALES[scale]; return this.map((value) => { @@ -380,3 +385,25 @@ Array.prototype.scale = function(scale: string = "major", base_note: number = 0) return this.map((value) => value + base_note); } }; + +Array.prototype.arp = function(scaleName: string = "major") { + /* + * Ajouter documentation + * + */ + const scale = SCALES[scaleName]; + + //input protect from unknow scale + + if (!scale) { + throw new Error(`Unknown scale ${scaleName}`); + } + + let result = []; + for (let j = 0; j < scale.length; j++) { + for (let i = 0; i < this.length; i++) { + result.push(this[i] + scale[j]); + } + } + return result; +};