mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-11 21:58:31 +00:00
Merge pull request #13 from tidalcycles/continuous-functions
Add continuous signals (sine, cosine, saw, etc)
This commit is contained in:
commit
6bbe759f74
28
strudel.mjs
28
strudel.mjs
@ -148,7 +148,7 @@ class TimeSpan {
|
||||
return result
|
||||
}
|
||||
|
||||
get midpoint() {
|
||||
midpoint() {
|
||||
return(this.begin.add((this.end.sub(this.begin)).div(Fraction(2))))
|
||||
}
|
||||
|
||||
@ -671,6 +671,32 @@ function steady(value) {
|
||||
return new Pattern(span => Hap(undefined, span, value))
|
||||
}
|
||||
|
||||
export const signal = func => {
|
||||
const query = span => [new Hap(undefined, span, func(span.midpoint()))]
|
||||
return new Pattern(query)
|
||||
}
|
||||
|
||||
const _toBipolar = pat => pat.fmap(x => (x * 2) - 1)
|
||||
const _fromBipolar = pat => pat.fmap(x => (x + 1) / 2)
|
||||
|
||||
export const sine2 = signal(t => Math.sin(Math.PI * 2 * t))
|
||||
export const sine = _fromBipolar(sine2)
|
||||
|
||||
export const cosine2 = sine2._early(0.25)
|
||||
export const cosine = sine._early(0.25)
|
||||
|
||||
export const saw = signal(t => t % 1)
|
||||
export const saw2 = _toBipolar(saw)
|
||||
|
||||
export const isaw = signal(t => 1 - (t % 1))
|
||||
export const isaw2 = _toBipolar(isaw)
|
||||
|
||||
export const tri2 = fastcat(isaw2, saw2)
|
||||
export const tri = fastcat(isaw, saw)
|
||||
|
||||
export const square = signal(t => Math.floor((t*2) % 2))
|
||||
export const square2 = _toBipolar(square)
|
||||
|
||||
function reify(thing) {
|
||||
// Tunrs something into a pattern, unless it's already a pattern
|
||||
if (thing?.constructor?.name == "Pattern") {
|
||||
|
||||
@ -2,7 +2,7 @@ import Fraction from 'fraction.js'
|
||||
|
||||
import { strict as assert } from 'assert';
|
||||
|
||||
import {TimeSpan, Hap, Pattern, pure, stack, fastcat, slowcat, cat, sequence, polyrhythm, silence, fast, timeCat,add,sub,mul,div} from "../strudel.mjs";
|
||||
import {TimeSpan, Hap, Pattern, pure, stack, fastcat, slowcat, cat, sequence, polyrhythm, silence, fast, timeCat,add,sub,mul,div,saw,saw2,isaw,isaw2,sine,sine2,square,square2,tri,tri2} from "../strudel.mjs";
|
||||
//import { Time } from 'tone';
|
||||
import pkg from 'tone';
|
||||
const { Time } = pkg;
|
||||
@ -307,4 +307,26 @@ describe('Pattern', function() {
|
||||
)
|
||||
})
|
||||
})
|
||||
describe('signal()', function() {
|
||||
it('Can make saw/saw2', function() {
|
||||
assert.deepStrictEqual(
|
||||
saw.struct(true,true,true,true).firstCycle,
|
||||
sequence(1/8,3/8,5/8,7/8).firstCycle
|
||||
)
|
||||
assert.deepStrictEqual(
|
||||
saw2.struct(true,true,true,true).firstCycle,
|
||||
sequence(-3/4,-1/4,1/4,3/4).firstCycle
|
||||
)
|
||||
})
|
||||
it('Can make isaw/isaw2', function() {
|
||||
assert.deepStrictEqual(
|
||||
isaw.struct(true,true,true,true).firstCycle,
|
||||
sequence(7/8,5/8,3/8,1/8).firstCycle
|
||||
)
|
||||
assert.deepStrictEqual(
|
||||
isaw2.struct(true,true,true,true).firstCycle,
|
||||
sequence(3/4,1/4,-1/4,-3/4).firstCycle
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user