Пример #1
0
const launchSaveModal = (enableModal, disableModal) =>
    Task((rej, res) => {
        const onCancel = () => {
            disableModal()
            rej()
        }
        const onSave = (description) => {
            disableModal()
            res(description)
        }
        const content = (
            <SaveModal
                onCancel={ onCancel }
                onSave={ onSave }
            />
        )
        enableModal({ content, isCloseable: true, title: 'Save Preset' })
    })
Пример #2
0
const getBufferFromInstrument = curry((context, instrument) => {
    const newInstrument = { ...instrument }
    const enabledSounds = newInstrument.sounds
        .filter(sound => sound.amount)
    newInstrument.buffers = {}

    return Task((rej, res) => {
        const onComplete = (buffer, sound, sounds) => {
            newInstrument.buffers[sound.id] = buffer
            bufferCount += 1
            if (bufferCount === sounds.length) {
                res(newInstrument)
            }
        }
        let bufferCount = 0
        enabledSounds.forEach((sound, i, sounds) =>
            getBufferFromURL(context, sound.path)
                .fork(rej, buffer => onComplete(buffer, sound, sounds)))
    })
})
Пример #3
0
const getBufferFromAudioTemplate = (audioTemplate, timeLength) => {
    const offlineCtx = new OfflineAudioContext(2, 44100 * timeLength, 44100)

    audioTemplate.forEach(({
        buffer,
        startTime,
        duration,
        volume,
        pitchAmount,
        fadeInDuration,
        fadeOutDuration,
    }) => {
        playSound(offlineCtx, buffer, startTime, duration, volume, pitchAmount, fadeInDuration, fadeOutDuration)
    })

    return Task((rej, res) => {
        offlineCtx.oncomplete = ev => res(ev.renderedBuffer)
        offlineCtx.onerror    = () => rej(Error('Failed rendering buffer'))
        offlineCtx.startRendering()
    })
}
Пример #4
0
const getBufferFromURL = curry((context, url) =>
    Task((rej, res) => {
        if (bufferCache[url]) return res(bufferCache[url])
        const onError = () => rej(Error(`Error decoding file data: ${url}`))
        const request = new XMLHttpRequest()
        request.open('GET', url, true)
        request.responseType = 'arraybuffer'
        request.onload = () =>
            context.decodeAudioData(
                request.response,
                (buffer) => {
                    if (!buffer) {
                        onError()
                        return
                    }
                    bufferCache[url] = buffer
                    res(buffer)
                },
                onError
            )
        request.onerror = onError
        request.send()
    }))
Пример #5
0
const promiseToTask = p => Task((rej, res) => p().then(res).catch(rej))
Пример #6
0
const getRandomPost = posts => Future((reject, resolve) =>
resolve(findByIndex(getRandomIndex(posts), posts)));
Пример #7
0
 IO.of(map(connection => curry((name, time) => Future((reject, resolve) => {
   connection.get_subreddit(name).get_top({ time })
   .then(resolve)
   .then(reject);
 })),