Tone.js/Tone/component/channel/Volume.test.ts
Yotam Mann bfc3d7ed15 toMaster() -> toDestination()
more consistent with the Web Audio API
2019-07-25 11:32:56 -04:00

129 lines
3.3 KiB
TypeScript

import { expect } from "chai";
import { BasicTests } from "test/helper/Basic";
import { connectFrom, connectTo } from "test/helper/Connect";
import { Offline } from "test/helper/Offline";
import { PassAudio } from "test/helper/PassAudio";
import { Signal } from "Tone/signal/Signal";
import { Volume } from "./Volume";
describe("Volume", () => {
BasicTests(Volume);
context("Volume", () => {
it("handles input and output connections", () => {
const vol = new Volume();
vol.connect(connectTo());
connectFrom().connect(vol);
connectFrom().connect(vol.volume);
vol.dispose();
});
it("can be constructed with volume value", () => {
const vol = new Volume(-12);
expect(vol.volume.value).to.be.closeTo(-12, 0.1);
vol.dispose();
});
it("can be constructed with an options object", () => {
const vol = new Volume({
volume: 2,
});
expect(vol.volume.value).to.be.closeTo(2, 0.1);
vol.dispose();
});
it("can be constructed with an options object and muted", () => {
const vol = new Volume({
mute: true,
});
expect(vol.mute).to.equal(true);
vol.dispose();
});
it("can set/get with an object", () => {
const vol = new Volume();
vol.set({
volume: -10,
});
expect(vol.get().volume).to.be.closeTo(-10, 0.1);
vol.dispose();
});
it("unmuting returns to previous volume", () => {
const vol = new Volume(-10);
vol.mute = true;
expect(vol.mute).to.equal(true);
expect(vol.volume.value).to.equal(-Infinity);
vol.mute = false;
// returns the volume to what it was
expect(vol.volume.value).to.be.closeTo(-10, 0.1);
vol.dispose();
});
it("passes the incoming signal through", () => {
return PassAudio(input => {
const vol = new Volume().toDestination();
input.connect(vol);
});
});
it.skip("passes the incoming stereo signal through", () => {
// return PassAudioStereo(function(input) {
// const vol = new Volume().toDestination();
// input.connect(vol);
// });
});
it("can lower the volume", () => {
return Offline(() => {
const vol = new Volume(-10).toDestination();
new Signal(1).connect(vol);
}).then((buffer) => {
expect(buffer.value()).to.be.closeTo(0.315, 0.01);
});
});
it("can mute the volume", () => {
return Offline(() => {
const vol = new Volume(0).toDestination();
new Signal(1).connect(vol);
vol.mute = true;
}).then((buffer) => {
expect(buffer.isSilent()).to.equal(true);
});
});
it("muted when volume is set to -Infinity", () => {
return Offline(() => {
const vol = new Volume(-Infinity).toDestination();
new Signal(1).connect(vol);
expect(vol.mute).to.equal(true);
}).then(buffer => {
expect(buffer.isSilent()).to.equal(true);
});
});
it("setting the volume unmutes it and reports itself as unmuted", () => {
const vol = new Volume(0).toDestination();
vol.mute = true;
expect(vol.mute).to.equal(true);
vol.volume.value = 0;
expect(vol.mute).is.equal(false);
vol.dispose();
});
it("multiple calls to mute still return the vol to the original", () => {
const vol = new Volume(-20);
vol.mute = true;
vol.mute = true;
expect(vol.mute).to.equal(true);
expect(vol.volume.value).to.equal(-Infinity);
vol.mute = false;
vol.mute = false;
expect(vol.volume.value).to.be.closeTo(-20, 0.5);
vol.dispose();
});
});
});