Skip to content

Commit

Permalink
feat: can switch track and mute/unmute when paused
Browse files Browse the repository at this point in the history
  • Loading branch information
JoaquinBCh committed Nov 28, 2024
1 parent c04145f commit f7907db
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
11 changes: 7 additions & 4 deletions lib/playback/backend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,18 @@ export default class Backend {
this.send({ config: msg }, msg.video.canvas)
}

async play() {
await this.#audio?.context.resume()
pause() {
this.send({ pause: true })
}

async pause() {
this.send({ pause: true })
async mute() {
await this.#audio?.context.suspend()
}

async unmute() {
await this.#audio?.context.resume()
}

init(init: Init) {
this.send({ init })
}
Expand Down
38 changes: 22 additions & 16 deletions lib/playback/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,7 @@ export class Player {

// Call #runTrack on each track
tracks.forEach((track) => {
this.#runTrack(track).catch((err) => {
console.error(`Error in #runTrack for track ${track.name}:`, err)
})
this.#runTrack(track)
})
}

Expand Down Expand Up @@ -174,7 +172,7 @@ export class Player {
}
}

async #runTrack(track: Catalog.Track) {
#runTrack(track: Catalog.Track) {
if (this.#trackTasks.has(track.name)) {
console.warn(`Already exist a runTrack task for the track: ${track.name}`)
return
Expand All @@ -184,7 +182,9 @@ export class Player {

this.#trackTasks.set(track.name, task)

task.finally(() => {
task.catch((err) => {
console.error(`Error to subscribe to track ${track.name}`, err)
}).finally(() => {
this.#trackTasks.delete(track.name)
})
}
Expand Down Expand Up @@ -212,6 +212,10 @@ export class Player {

async switchTrack(trackname: string) {
const currentTrack = this.getCurrentTrack()
if (this.#paused) {
this.#videoTrackName = trackname
return
}
if (currentTrack) {
console.log(`Unsubscribing from track: ${currentTrack.name} and Subscribing to track: ${trackname}`)
await this.unsubscribeFromTrack(currentTrack.name)
Expand All @@ -224,14 +228,15 @@ export class Player {
}

async mute(isMuted: boolean) {
this.#muted = isMuted
if (isMuted) {
console.log("Unsubscribing from audio track: ", this.#audioTrackName)
await this.unsubscribeFromTrack(this.#audioTrackName)
await this.#backend.mute()
} else {
console.log("Subscribing to audio track: ", this.#audioTrackName)
const audioTrack = this.#tracksByName.get(this.#audioTrackName)
audioTrack && (await this.#runTrack(audioTrack))
this.#backend.pause()
this.subscribeFromTrackName(this.#audioTrackName)
await this.#backend.unmute()
}
}

Expand All @@ -244,13 +249,11 @@ export class Player {
}
}

async subscribeFromTrackName(trackname: string) {
subscribeFromTrackName(trackname: string) {
console.log(`Subscribing to track: ${trackname}`)
const track = this.#tracksByName.get(trackname)
if (track) {
this.#runTrack(track).catch((err) => {
console.error(`Error to subscribe to track ${trackname}:`, err)
})
this.#runTrack(track)
} else {
console.warn(`Track ${trackname} not in #tracksByName`)
}
Expand Down Expand Up @@ -292,11 +295,14 @@ export class Player {
if (this.#paused) {
this.#paused = false
this.subscribeFromTrackName(this.#videoTrackName)
this.subscribeFromTrackName(this.#audioTrackName)
this.#backend.play()
if (!this.#muted) {
this.subscribeFromTrackName(this.#audioTrackName)
await this.#backend.unmute()
}
} else {
this.unsubscribeFromTrack(this.#videoTrackName)
this.unsubscribeFromTrack(this.#audioTrackName)
await this.unsubscribeFromTrack(this.#videoTrackName)
await this.unsubscribeFromTrack(this.#audioTrackName)
await this.#backend.mute()
this.#backend.pause()
this.#paused = true
}
Expand Down

0 comments on commit f7907db

Please sign in to comment.