1 | import { expect } from "chai";
|
2 | import { BasicTests } from "../../test/helper/Basic.js";
|
3 | import { CompareToFile } from "../../test/helper/CompareToFile.js";
|
4 | import { EffectTests } from "../../test/helper/EffectTests.js";
|
5 | import { Oscillator } from "../source/oscillator/Oscillator.js";
|
6 | import { FeedbackDelay } from "./FeedbackDelay.js";
|
7 | import { FeedbackEffect } from "./FeedbackEffect.js";
|
8 |
|
9 | describe("FeedbackDelay", () => {
|
10 | BasicTests(FeedbackDelay);
|
11 | EffectTests(FeedbackDelay, 0.01);
|
12 |
|
13 | it("matches a file", () => {
|
14 | return CompareToFile(
|
15 | () => {
|
16 | const delay = new FeedbackDelay(0.1, 0.6).toDestination();
|
17 | const osc = new Oscillator().connect(delay);
|
18 | osc.type = "square";
|
19 | osc.start(0).stop(0.01);
|
20 | },
|
21 | "feedbackDelay.wav",
|
22 | 0.05
|
23 | );
|
24 | });
|
25 |
|
26 | context("API", () => {
|
27 | it("extends FeedbackEffect", () => {
|
28 | const feedbackDelay = new FeedbackDelay(0.2, 0.3);
|
29 | expect(feedbackDelay).to.be.instanceOf(FeedbackEffect);
|
30 | feedbackDelay.dispose();
|
31 | });
|
32 |
|
33 | it("parses constructor arguments correctly", () => {
|
34 | const feedbackDelay = new FeedbackDelay(0.1, 0.4);
|
35 | expect(feedbackDelay.delayTime.value).to.be.closeTo(0.1, 0.01);
|
36 | expect(feedbackDelay.feedback.value).to.be.closeTo(0.4, 0.01);
|
37 | feedbackDelay.dispose();
|
38 | });
|
39 |
|
40 | it("can pass in options in the constructor", () => {
|
41 | const feedbackDelay = new FeedbackDelay({
|
42 | delayTime: 0.2,
|
43 | feedback: 0.3,
|
44 | });
|
45 | expect(feedbackDelay.delayTime.value).to.be.closeTo(0.2, 0.01);
|
46 | expect(feedbackDelay.feedback.value).to.be.closeTo(0.3, 0.01);
|
47 | feedbackDelay.dispose();
|
48 | });
|
49 |
|
50 | it("can get/set the options", () => {
|
51 | const feedbackDelay = new FeedbackDelay();
|
52 | feedbackDelay.set({
|
53 | feedback: 0.4,
|
54 | });
|
55 | expect(feedbackDelay.get().feedback).to.be.closeTo(0.4, 0.01);
|
56 | feedbackDelay.dispose();
|
57 | });
|
58 |
|
59 | it("can set the delayTime", () => {
|
60 | const feedbackDelay = new FeedbackDelay();
|
61 | feedbackDelay.delayTime.value = "4n";
|
62 | expect(feedbackDelay.delayTime.value).to.be.closeTo(0.5, 0.001);
|
63 | feedbackDelay.delayTime.value = 0.22;
|
64 | expect(feedbackDelay.delayTime.value).to.be.closeTo(0.22, 0.001);
|
65 | feedbackDelay.dispose();
|
66 | });
|
67 |
|
68 | it("can set the feedback amount", () => {
|
69 | const feedbackDelay = new FeedbackDelay();
|
70 | feedbackDelay.feedback.value = 1;
|
71 | expect(feedbackDelay.feedback.value).to.be.closeTo(1, 0.001);
|
72 | feedbackDelay.feedback.value = 0.22;
|
73 | expect(feedbackDelay.feedback.value).to.be.closeTo(0.22, 0.001);
|
74 | feedbackDelay.dispose();
|
75 | });
|
76 | });
|
77 | });
|