mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-05-17 08:51:30 +00:00
59 lines
2 KiB
JavaScript
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);
|
|
});
|
|
});
|