From 492393c18638feb35c3066b08a76a1a3b0400fa8 Mon Sep 17 00:00:00 2001 From: zenoamaro Date: Wed, 3 Jul 2019 01:15:53 +0200 Subject: [PATCH] Audio compressor --- src/constants.js | 2 +- src/sound.js | 32 ++++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/constants.js b/src/constants.js index 485c9a7..82a8861 100644 --- a/src/constants.js +++ b/src/constants.js @@ -128,4 +128,4 @@ export const FONT_WIDTH = 3; export const FONT_HEIGHT = 5; export const SOUND_MUSIC_VOLUME = 0.3; -export const SOUND_SFX_VOLUME = 0.05; +export const SOUND_SFX_VOLUME = 0.1; diff --git a/src/sound.js b/src/sound.js index 7bd356a..cbd2a44 100644 --- a/src/sound.js +++ b/src/sound.js @@ -2,14 +2,18 @@ import {SOUND_MUSIC_VOLUME, SOUND_SFX_VOLUME} from './constants.js'; // @ts-ignore export const audio = new (window.AudioContext || window.webkitAudioContext)(); +export const volume = createGain(1); +volume.connect(audio.destination); -export const music = audio.createGain(audio); -music.gain.setValueAtTime(SOUND_MUSIC_VOLUME, audio.currentTime); -music.connect(audio.destination); +export const music = createCompressor(); +export const musicGain = createGain(SOUND_MUSIC_VOLUME); +music.connect(musicGain); +musicGain.connect(volume); -export const sfx = audio.createGain(audio); -sfx.gain.setValueAtTime(SOUND_SFX_VOLUME, audio.currentTime); -sfx.connect(audio.destination); +export const sfx = createCompressor(); +export const sfxGain = createGain(SOUND_SFX_VOLUME); +sfx.connect(sfxGain); +sfxGain.connect(volume); export async function createAudioLoop(src) { const file = await fetch(src); @@ -30,6 +34,22 @@ export function createOsc(type='triangle') { return osc; } +export function createGain(amount) { + const gain = audio.createGain(); + gain.gain.setValueAtTime(amount, audio.currentTime); + return gain; +} + +export function createCompressor() { + let compressor = audio.createDynamicsCompressor(); + compressor.threshold.setValueAtTime(-30, audio.currentTime); + compressor.knee.setValueAtTime(40, audio.currentTime); + compressor.ratio.setValueAtTime(12, audio.currentTime); + compressor.attack.setValueAtTime(0, audio.currentTime); + compressor.release.setValueAtTime(0.25, audio.currentTime); + return compressor; +} + export function playTickSound() { const osc = createOsc('triangle'); osc.frequency.setValueAtTime(440, audio.currentTime);