function bell({frequency, duration=1, offset=0, harmonics_range=[0,6]}) {
let harmonic_series = [1, 2, 3, 4.2, 5.4, 6.8].slice(...harmonics_range);
let proportions = [1, 0.6, 0.4, 0.25, 0.2, 0.15].slice(...harmonics_range);
function component(harmonic, proportion) {
return (time) => proportion * beep((harmonic * frequency), duration, offset)(time);
}
return (time) =>
_.sum(
_.map(
_.zip(harmonic_series, proportions),
([harmonic, proportion]) => component(harmonic, proportion)(time)
)
)
}