From 3986c407ff55896fc05e264830a9fd2597b5f04e Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 7 Aug 2022 23:53:14 +0200 Subject: [PATCH] cache loaded soundfonts --- packages/soundfonts/index.mjs | 4 ++-- packages/soundfonts/sfumato.mjs | 14 +++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/soundfonts/index.mjs b/packages/soundfonts/index.mjs index 2c4ffcc6..3c5c226c 100644 --- a/packages/soundfonts/index.mjs +++ b/packages/soundfonts/index.mjs @@ -1,6 +1,6 @@ import { getFontBufferSource } from './fontloader.mjs'; import * as soundfontList from './list.mjs'; -import { loadSoundfont, startPresetNote } from 'sfumato'; -import './sfumato.mjs'; +import { startPresetNote } from 'sfumato'; +import { loadSoundfont } from './sfumato.mjs'; export { loadSoundfont, startPresetNote, getFontBufferSource, soundfontList }; diff --git a/packages/soundfonts/sfumato.mjs b/packages/soundfonts/sfumato.mjs index f13712a5..1cca2ffe 100644 --- a/packages/soundfonts/sfumato.mjs +++ b/packages/soundfonts/sfumato.mjs @@ -1,7 +1,5 @@ import { Pattern } from '@strudel.cycles/core'; -import { /* loadSoundfont, */ startPresetNote } from 'sfumato'; - -// TODO: find way to cache loadSoundfont +import { loadSoundfont as _loadSoundfont, startPresetNote } from 'sfumato'; Pattern.prototype.soundfont = function (sf, n = 0) { return this.onTrigger((t, h, ct) => { @@ -14,3 +12,13 @@ Pattern.prototype.soundfont = function (sf, n = 0) { stop(deadline + h.duration); }); }; + +const soundfontCache = new Map(); +export function loadSoundfont(url) { + if (soundfontCache.get(url)) { + return soundfontCache.get(url); + } + const sf = _loadSoundfont(url); + soundfontCache.set(url, sf); + return sf; +}