diff --git a/src/cdrom.emscripten.c b/src/cdrom.emscripten.c index 3349095..975748a 100644 --- a/src/cdrom.emscripten.c +++ b/src/cdrom.emscripten.c @@ -59,7 +59,9 @@ int cdrom_stop() { return OK; } -int cdrom_getPlayingInfo (cd_time *info) { - info->t = info->m = info->s = info->f = 999; - return NG; +int cdrom_getPlayingInfo(cd_time *info) { + int t = EM_ASM_INT_V( return xsystem35.cdPlayer.getPosition(); ); + info->t = t & 0xff; + FRAMES_TO_MSF(t >> 8, &info->m, &info->s, &info->f); + return OK; } diff --git a/web/shell/shell.ts b/web/shell/shell.ts index 19dd2fa..7955206 100644 --- a/web/shell/shell.ts +++ b/web/shell/shell.ts @@ -79,12 +79,14 @@ class System35Shell { class CDPlayer { audio = $('audio'); private blobs: Blob[]; + private currentTrack: number; constructor(private imageLoader:ImageLoader) { this.blobs = []; } play(track:number, loop:number) { + this.currentTrack = track; if (this.blobs[track]) { this.startPlayback(this.blobs[track], loop); return; @@ -97,6 +99,14 @@ class CDPlayer { stop() { this.audio.pause(); + this.currentTrack = null; + } + + getPosition(): number { + if (!this.currentTrack) + return 0; + var time = Math.round(this.audio.currentTime * 75); + return this.currentTrack | time << 8; } private startPlayback(blob:Blob, loop:number) {