Skip to content

Commit

Permalink
Merge remote-tracking branch 'pnkapadia64/627-co-to-async' into co-merge
Browse files Browse the repository at this point in the history
  • Loading branch information
resir014 committed Feb 3, 2020
2 parents 5ca0279 + 4d68212 commit 1b6beed
Showing 1 changed file with 44 additions and 48 deletions.
92 changes: 44 additions & 48 deletions src/coming-soon/demo/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import $ from 'jquery'
import { Compiler, Notes, Reader, SongInfo, Timing } from 'bms'
import DndResources from 'bemuse/resources/dnd-resources'
import SamplingMaster from 'bemuse/sampling-master'
import co from 'co'
import ctx from 'bemuse/audio-context'

import template from './template.jade'
Expand Down Expand Up @@ -33,56 +32,53 @@ export function main(element) {
}
}

// TODO [#627]: Convert the `go` function to async function (instead of using `co`) in src/coming-soon/demo/index.js
// See issue #575 for more details.
function go(loader, element) {
async function go(loader, element) {
let master = new SamplingMaster(ctx)
let $log = element.find('.js-log')
let $play = element.find('.js-play').hide()
let $sampler = element.find('.js-sampler')

co(function*() {
log('Loading file list')
let list = yield loader.fileList
let bmsFile = list.filter(f => f.match(/\.(?:bms|bme|bml|pms)$/i))[0]
log('Loading ' + bmsFile)
log('Loading file list')
let list = await loader.fileList
let bmsFile = list.filter(f => f.match(/\.(?:bms|bme|bml|pms)$/i))[0]
log('Loading ' + bmsFile)

let arraybuffer = yield (yield loader.file(bmsFile)).read()
let buffer = Buffer.from(new Uint8Array(arraybuffer))
let text = yield Promise.promisify(Reader.readAsync)(buffer)
let chart = Compiler.compile(text).chart
var timing = Timing.fromBMSChart(chart)
var notes = Notes.fromBMSChart(chart)
var info = SongInfo.fromBMSChart(chart)
$('<pre wrap></pre>')
.text(JSON.stringify(info, null, 2))
.appendTo($sampler)
log('Loading samples')
var samples = yield loadSamples(notes, chart)
log('Click the button to play!')
yield waitForPlay()
void (function() {
master.unmute()
for (let note of notes.all()) {
setTimeout(() => {
let sample = samples[note.keysound]
if (!sample) {
console.log('warn: unknown sample ' + note.keysound)
return
}
let span = $('<span></span>')
.text('[' + note.keysound + '] ')
.appendTo($sampler)
let instance = sample.play()
$sampler[0].scrollTop = $sampler[0].scrollHeight
instance.onstop = function() {
span.addClass('is-off')
}
}, timing.beatToSeconds(note.beat) * 1000)
}
return false
})()
}).done()
let loadedFile = await loader.file(bmsFile)
let arraybuffer = await loadedFile.read()
let buffer = Buffer.from(new Uint8Array(arraybuffer))
let text = await Promise.promisify(Reader.readAsync)(buffer)
let chart = Compiler.compile(text).chart
var timing = Timing.fromBMSChart(chart)
var notes = Notes.fromBMSChart(chart)
var info = SongInfo.fromBMSChart(chart)
$('<pre wrap></pre>')
.text(JSON.stringify(info, null, 2))
.appendTo($sampler)
log('Loading samples')
var loadedSamples = await loadSamples(notes, chart)
log('Click the button to play!')
await waitForPlay()
void (function() {
master.unmute()
for (let note of notes.all()) {
setTimeout(() => {
let sample = loadedSamples[note.keysound]
if (!sample) {
console.log('warn: unknown sample ' + note.keysound)
return
}
let span = $('<span></span>')
.text('[' + note.keysound + '] ')
.appendTo($sampler)
let instance = sample.play()
$sampler[0].scrollTop = $sampler[0].scrollHeight
instance.onstop = function() {
span.addClass('is-off')
}
}, timing.beatToSeconds(note.beat) * 1000)
}
return false
})()

function waitForPlay() {
return new Promise(function(resolve) {
Expand All @@ -98,17 +94,17 @@ function go(loader, element) {
$log.text(t)
}

function loadSamples(notes, chart) {
function loadSamples(_notes, _chart) {
var samples = {}
var promises = []
let completed = 0

for (let note of notes.all()) {
for (let note of _notes.all()) {
let keysound = note.keysound
if (!(keysound in samples)) {
samples[keysound] = null
promises.push(
loadKeysound(chart.headers.get('wav' + keysound))
loadKeysound(_chart.headers.get('wav' + keysound))
.then(blob => master.sample(blob))
.then(sample => (samples[keysound] = sample))
.catch(e => console.error('Unable to load ' + keysound + ': ' + e))
Expand Down

0 comments on commit 1b6beed

Please sign in to comment.