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 { Offline } from "../../test/helper/Offline.js";
|
6 | import { Oscillator } from "../source/oscillator/Oscillator.js";
|
7 | import { FrequencyShifter } from "./FrequencyShifter.js";
|
8 |
|
9 | describe("FrequencyShifter", () => {
|
10 | BasicTests(FrequencyShifter);
|
11 | EffectTests(FrequencyShifter);
|
12 |
|
13 | it("matches a file", () => {
|
14 | return CompareToFile(
|
15 | () => {
|
16 | const shifter = new FrequencyShifter().toDestination();
|
17 | shifter.frequency.value = -60;
|
18 | const osc = new Oscillator().connect(shifter);
|
19 | osc.start(0);
|
20 | },
|
21 | "frequencyShifter.wav",
|
22 | 0.1
|
23 | );
|
24 | });
|
25 |
|
26 | context("API", () => {
|
27 | it("can pass in options in the constructor", () => {
|
28 | const shifter = new FrequencyShifter({
|
29 | frequency: -20,
|
30 | });
|
31 | expect(shifter.frequency.value).to.be.closeTo(-20, 0.001);
|
32 | shifter.dispose();
|
33 | });
|
34 |
|
35 | it("can get/set the options", () => {
|
36 | const shifter = new FrequencyShifter();
|
37 | shifter.set({
|
38 | frequency: 40,
|
39 | });
|
40 | expect(shifter.get().frequency).to.be.closeTo(40, 0.001);
|
41 | shifter.dispose();
|
42 | });
|
43 |
|
44 | it("passes audio from input to output", () => {
|
45 | return Offline(() => {
|
46 | const osc = new Oscillator();
|
47 | osc.start(0).stop(0.1);
|
48 | const shifter = new FrequencyShifter(0.2).toDestination();
|
49 | osc.connect(shifter);
|
50 | }, 0.3).then((buffer) => {
|
51 | expect(buffer.getRmsAtTime(0.05)).to.be.greaterThan(0);
|
52 | expect(buffer.getRmsAtTime(0.1)).to.be.greaterThan(0);
|
53 | expect(buffer.getRmsAtTime(0.2)).to.be.greaterThan(0);
|
54 | });
|
55 | });
|
56 | });
|
57 | });
|