Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

(#692) Fix duration mismatch between audio and metadata #818

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/components/VAudioTrack/VAudioTrack.vue
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ export default defineComponent({

const status = ref('paused')
const currentTime = ref(0)
const audioDuration = ref(null)

const initLocalAudio = () => {
// Preserve existing local audio if we plucked it from the global active audio
Expand All @@ -133,6 +134,7 @@ export default defineComponent({
localAudio.addEventListener('pause', setPaused)
localAudio.addEventListener('ended', setPlayed)
localAudio.addEventListener('timeupdate', setTimeWhenPaused)
localAudio.addEventListener('durationchange', setDuration)

/**
* Similar to the behavior in the global audio track,
Expand Down Expand Up @@ -216,6 +218,9 @@ export default defineComponent({
}
}
}
const setDuration = () => {
audioDuration.value = localAudio?.duration
}

/**
* If we're transforming the globally active audio
Expand All @@ -238,6 +243,7 @@ export default defineComponent({
localAudio.removeEventListener('pause', setPaused)
localAudio.removeEventListener('ended', setPlayed)
localAudio.removeEventListener('timeupdate', setTimeWhenPaused)
localAudio.removeEventListener('durationchange', setDuration)

if (
route.value.params.id == props.audio.id ||
Expand Down Expand Up @@ -285,7 +291,9 @@ export default defineComponent({

/* Timekeeping */

const duration = computed(() => (props.audio?.duration ?? 0) / 1e3) // seconds
const duration = computed(
() => audioDuration.value ?? props.audio?.duration / 1e3 ?? 0 // seconds
)

const message = computed(() => store.state.active.message)

Expand Down
11 changes: 10 additions & 1 deletion src/components/VAudioTrack/VGlobalAudioTrack.vue
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ export default defineComponent({

const status = ref('paused')
const currentTime = ref(0)
const audioDuration = ref(null)

const setPlaying = () => {
status.value = 'playing'
Expand All @@ -133,6 +134,9 @@ export default defineComponent({
}
}
}
const setDuration = () => {
audioDuration.value = activeAudio.obj.value?.duration
}

const updateTimeLoop = () => {
if (activeAudio.obj.value && status.value === 'playing') {
Expand All @@ -149,7 +153,9 @@ export default defineComponent({
audio.addEventListener('pause', setPaused)
audio.addEventListener('ended', setPlayed)
audio.addEventListener('timeupdate', setTimeWhenPaused)
audio.addEventListener('durationchange', setDuration)
currentTime.value = audio.currentTime
audioDuration.value = audio.duration

/**
* By the time the `activeAudio` is updated and a rerender
Expand Down Expand Up @@ -179,6 +185,7 @@ export default defineComponent({
audio.removeEventListener('pause', setPaused)
audio.removeEventListener('ended', setPlayed)
audio.removeEventListener('timeupdate', setTimeWhenPaused)
audio.removeEventListener('durationchange', setDuration)
})
},
{ immediate: true }
Expand All @@ -189,7 +196,9 @@ export default defineComponent({

/* Timekeeping */

const duration = computed(() => (props.audio?.duration ?? 0) / 1e3) // seconds
const duration = computed(
() => audioDuration.value ?? props.audio?.duration / 1e3 ?? 0
) // seconds

const message = computed(() => store.state.active.message)

Expand Down