|
|
@@ -5,13 +5,7 @@ import getFractionalOctaveCountUnmemoized from './getFractionalOctaveCount' |
|
|
|
import { ACCIDENTAL_KEY_TO_NATURAL_KEY_WIDTH_RATIO } from './constants' |
|
|
|
import * as caches from './caches' |
|
|
|
|
|
|
|
export interface GetKeyWidth { |
|
|
|
(k: number): number |
|
|
|
} |
|
|
|
|
|
|
|
interface GetKeyWidthDecorator { |
|
|
|
(startKey: number, endKey: number): GetKeyWidth |
|
|
|
} |
|
|
|
type GetKeyWidthDecorator = (startKey: number, endKey: number) => (k: number) => number |
|
|
|
|
|
|
|
const isNaturalKey = mem(isNaturalKeyUnmemoized, { cache: caches.isNaturalKey }) |
|
|
|
const getFractionalOctaveCount = mem(getFractionalOctaveCountUnmemoized, { |
|
|
@@ -19,11 +13,11 @@ const getFractionalOctaveCount = mem(getFractionalOctaveCountUnmemoized, { |
|
|
|
}) |
|
|
|
const getOctaveCount = mem(getOctaveCountUnmemoized, { cacheKey: (args) => args.join(':') }) |
|
|
|
|
|
|
|
const getKeyWidthDecorator: GetKeyWidthDecorator = (startKey, endKey) => (k) => { |
|
|
|
const getKeyWidth: GetKeyWidthDecorator = (startKey, endKey) => (k) => { |
|
|
|
const fractionalOctaveCount = getFractionalOctaveCount(startKey, endKey) |
|
|
|
const octaveCount = getOctaveCount(startKey, endKey) |
|
|
|
const naturalKeyWidth = (100 * (octaveCount / fractionalOctaveCount)) / (octaveCount * 7) |
|
|
|
return isNaturalKey(k) ? naturalKeyWidth : naturalKeyWidth * ACCIDENTAL_KEY_TO_NATURAL_KEY_WIDTH_RATIO |
|
|
|
} |
|
|
|
|
|
|
|
export default getKeyWidthDecorator |
|
|
|
export default getKeyWidth |