twiddles
This commit is contained in:
parent
e0023a722b
commit
780a6482e5
2 changed files with 49 additions and 14 deletions
|
|
@ -134,11 +134,25 @@ class Hap {
|
||||||
return new Hap(this.whole, this.part, func(this.value))
|
return new Hap(this.whole, this.part, func(this.value))
|
||||||
}
|
}
|
||||||
|
|
||||||
has_onset() {
|
hasOnset() {
|
||||||
// Test whether the event contains the onset, i.e that
|
// Test whether the event contains the onset, i.e that
|
||||||
// the beginning of the part is the same as that of the whole timespan."""
|
// the beginning of the part is the same as that of the whole timespan."""
|
||||||
return (this.whole != undefined) && (this.whole.begin.equals(this.part.begin))
|
return (this.whole != undefined) && (this.whole.begin.equals(this.part.begin))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spanEquals(other) {
|
||||||
|
return((this.whole === undefined && other.whole === undefined)
|
||||||
|
|| this.whole.equals(other.whole)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
equals(other) {
|
||||||
|
return(this.spanEquals(other)
|
||||||
|
&& this.part.equals(other.part)
|
||||||
|
// TODO would == be better ??
|
||||||
|
&& this.value === other.value
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Pattern {
|
class Pattern {
|
||||||
|
|
@ -146,8 +160,6 @@ class Pattern {
|
||||||
this.query = query
|
this.query = query
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
splitQueries() {
|
splitQueries() {
|
||||||
// Splits queries at cycle boundaries. This makes some calculations
|
// Splits queries at cycle boundaries. This makes some calculations
|
||||||
// easier to express, as all events are then constrained to happen within
|
// easier to express, as all events are then constrained to happen within
|
||||||
|
|
@ -157,14 +169,20 @@ class Pattern {
|
||||||
}
|
}
|
||||||
return new Pattern(query)
|
return new Pattern(query)
|
||||||
}
|
}
|
||||||
// def with_query_span(self, func):
|
|
||||||
// """ Returns a new pattern, with the function applied to the timespan of the query. """
|
|
||||||
// return Pattern(lambda span: self.query(func(span)))
|
|
||||||
|
|
||||||
// def with_query_time(self, func):
|
withQuerySpan(func) {
|
||||||
// """ Returns a new pattern, with the function applied to both the begin
|
return new Pattern(span => this.query(func(span)))
|
||||||
// and end of the the query timespan. """
|
}
|
||||||
// return Pattern(lambda span: self.query(span.with_time(func)))
|
|
||||||
|
withQueryTime(func) {
|
||||||
|
// Returns a new pattern, with the function applied to both the begin
|
||||||
|
// and end of the the query timespan
|
||||||
|
return new Pattern(span => this.query(span.withTime(func)))
|
||||||
|
}
|
||||||
|
|
||||||
|
//withEventSpan(func) {
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
// def with_event_span(self, func):
|
// def with_event_span(self, func):
|
||||||
// """ Returns a new pattern, with the function applied to each event
|
// """ Returns a new pattern, with the function applied to each event
|
||||||
|
|
@ -431,3 +449,4 @@ function pure(value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export {TimeSpan, Hap, Pattern, pure, Fraction}
|
export {TimeSpan, Hap, Pattern, pure, Fraction}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { strict as assert } from 'assert';
|
||||||
import {TimeSpan, Hap, Pattern, pure} from "../js/strudel.mjs";
|
import {TimeSpan, Hap, Pattern, pure} from "../js/strudel.mjs";
|
||||||
|
|
||||||
describe('TimeSpan', function() {
|
describe('TimeSpan', function() {
|
||||||
describe('equal()', function() {
|
describe('equals()', function() {
|
||||||
it('Should be equal to the same value', function() {
|
it('Should be equal to the same value', function() {
|
||||||
assert.equal((new TimeSpan(0,4)).equals(new TimeSpan(0,4)), true);
|
assert.equal((new TimeSpan(0,4)).equals(new TimeSpan(0,4)), true);
|
||||||
});
|
});
|
||||||
|
|
@ -18,11 +18,27 @@ describe('TimeSpan', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Hap', function() {
|
describe('Hap', function() {
|
||||||
describe('has_onset()', function() {
|
describe('hasOnset()', function() {
|
||||||
it('True if part includes onset from whole', function() {
|
it('True if part includes onset from whole', function() {
|
||||||
assert.equal(new Hap(new TimeSpan(0,1), new TimeSpan(0,1), "thing").has_onset(), true);
|
assert.equal(new Hap(new TimeSpan(0,1), new TimeSpan(0,1), "thing").hasOnset(), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
var a = new Hap(new TimeSpan(Fraction(0), Fraction(0.5)), new TimeSpan(Fraction(0), Fraction(0.5)), "a")
|
||||||
|
var b = new Hap(new TimeSpan(Fraction(0), Fraction(0.5)), new TimeSpan(Fraction(0), Fraction(0.5)), "b")
|
||||||
|
var c = new Hap(new TimeSpan(Fraction(0), Fraction(0.25)), new TimeSpan(Fraction(0), Fraction(0.5)), "c")
|
||||||
|
var d = new Hap(undefined, new TimeSpan(Fraction(0), Fraction(0.5)), "d")
|
||||||
|
var e = new Hap(undefined, new TimeSpan(Fraction(0), Fraction(0.5)), "e")
|
||||||
|
describe('spanEquals', function() {
|
||||||
|
it('True if two haps have the same whole and part', function() {
|
||||||
|
assert.equal(a.spanEquals(b), true)
|
||||||
|
})
|
||||||
|
it('False if two haps don\'t the same whole and part', function() {
|
||||||
|
assert.equal(a.spanEquals(c), false)
|
||||||
|
})
|
||||||
|
it('True if two haps have the same part and undefined wholes', function() {
|
||||||
|
assert.equal(d.spanEquals(e), true)
|
||||||
|
})
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Pattern', function() {
|
describe('Pattern', function() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue