audiobookshelf/client/cypress/tests/players/LocalAudioPlayer.cy.js
2026-05-07 20:43:30 +01:00

59 lines
2 KiB
JavaScript

import LocalAudioPlayer from '../../../players/LocalAudioPlayer'
describe('LocalAudioPlayer', () => {
it('increases playbackRate during silence with the real Web Audio pipeline', () => {
const localPlayer = new LocalAudioPlayer({})
expect(localPlayer.player.playbackRate).to.equal(1)
cy.wrap(localPlayer.setSmartSpeed(true)).then(() => {
expect(localPlayer.enableSmartSpeed).to.be.true
expect(localPlayer.usingWebAudio).to.be.true
expect(localPlayer.audioContext).to.not.be.null
expect(localPlayer.audioSourceNode).to.not.be.null
expect(localPlayer.silenceDetectorNode).to.not.be.null
expect(localPlayer.silenceDetectorNode.constructor.name).to.equal('AudioWorkletNode')
localPlayer.player.currentTime = 5
localPlayer.silenceDetectorNode.port.onmessage({
data: {
type: 'silence-start',
time: localPlayer.audioContext.currentTime * 1000
}
})
expect(localPlayer.player.playbackRate).to.equal(2.0)
localPlayer.player.currentTime = 8
localPlayer.silenceDetectorNode.port.onmessage({
data: {
type: 'silence-end',
time: localPlayer.audioContext.currentTime * 1000
}
})
expect(localPlayer.player.playbackRate).to.equal(1.0)
localPlayer.destroy()
})
})
it('maps currentTime, duration, and seek through the same Smart Speed wall-clock contract', () => {
const localPlayer = new LocalAudioPlayer({});
localPlayer.audioTracks = [{ startOffset: 0, duration: 12 }];
localPlayer.currentTrackIndex = 0;
localPlayer.enableSmartSpeed = true;
localPlayer.smartSpeedRatio = 2.0;
localPlayer.silenceMap.addRegion(2000, 6000);
localPlayer.updateSmartSpeedRegions();
localPlayer.player.currentTime = 8;
expect(localPlayer.getCurrentTime()).to.equal(6);
expect(localPlayer.getDuration()).to.equal(10);
localPlayer.seek(6, false);
expect(localPlayer.player.currentTime).to.equal(8);
});
});