Added media player keyboard controls
This commit is contained in:
parent
cb45be9024
commit
be2660df80
@ -6,10 +6,11 @@ var gainNode: GainNode
|
|||||||
var volume = 0.5
|
var volume = 0.5
|
||||||
var volumeTimeConstant = 0.01
|
var volumeTimeConstant = 0.01
|
||||||
var volumeSmoothingDelay = 0.05
|
var volumeSmoothingDelay = 0.05
|
||||||
|
var targetSpeed = 1.0
|
||||||
var playId = 0
|
var playId = 0
|
||||||
var audioPlayer = document.getElementById("audio-player")
|
var audioPlayer = document.getElementById("audio-player")
|
||||||
var audioPlayerPlay = document.getElementById("audio-player-play")
|
var audioPlayerPlay = document.getElementById("audio-player-play") as HTMLButtonElement
|
||||||
var audioPlayerPause = document.getElementById("audio-player-pause")
|
var audioPlayerPause = document.getElementById("audio-player-pause") as HTMLButtonElement
|
||||||
var trackLink = document.getElementById("audio-player-track-title") as HTMLLinkElement
|
var trackLink = document.getElementById("audio-player-track-title") as HTMLLinkElement
|
||||||
var animeInfo = document.getElementById("audio-player-anime-info") as HTMLElement
|
var animeInfo = document.getElementById("audio-player-anime-info") as HTMLElement
|
||||||
var animeLink = document.getElementById("audio-player-anime-link") as HTMLLinkElement
|
var animeLink = document.getElementById("audio-player-anime-link") as HTMLLinkElement
|
||||||
@ -75,6 +76,7 @@ function playAudioFile(arn: AnimeNotifier, trackId: string, trackUrl: string) {
|
|||||||
audioNode.buffer = buffer
|
audioNode.buffer = buffer
|
||||||
audioNode.connect(gainNode)
|
audioNode.connect(gainNode)
|
||||||
gainNode.connect(audioContext.destination)
|
gainNode.connect(audioContext.destination)
|
||||||
|
audioNode.playbackRate.setValueAtTime(targetSpeed, 0)
|
||||||
audioNode.start(0)
|
audioNode.start(0)
|
||||||
|
|
||||||
audioNode.onended = (event: MediaStreamErrorEvent) => {
|
audioNode.onended = (event: MediaStreamErrorEvent) => {
|
||||||
@ -183,6 +185,20 @@ export function toggleAudio(arn: AnimeNotifier, element: HTMLElement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Play or pause audio
|
||||||
|
export function playPauseAudio(arn: AnimeNotifier) {
|
||||||
|
if(!audioNode) {
|
||||||
|
playNextTrack(arn)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if(audioNode.playbackRate.value === 0) {
|
||||||
|
resumeAudio(arn, audioPlayerPlay)
|
||||||
|
} else {
|
||||||
|
pauseAudio(arn, audioPlayerPlay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Play previous track
|
// Play previous track
|
||||||
export async function playPreviousTrack(arn: AnimeNotifier) {
|
export async function playPreviousTrack(arn: AnimeNotifier) {
|
||||||
alert("Previous track is currently work in progress! Check back later :)")
|
alert("Previous track is currently work in progress! Check back later :)")
|
||||||
@ -228,8 +244,26 @@ export function resumeAudio(arn: AnimeNotifier, button: HTMLButtonElement) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
audioNode.playbackRate.setValueAtTime(1.0, 0)
|
audioNode.playbackRate.setValueAtTime(targetSpeed, 0)
|
||||||
|
|
||||||
audioPlayerPlay.classList.add("fade-out")
|
audioPlayerPlay.classList.add("fade-out")
|
||||||
audioPlayerPause.classList.remove("fade-out")
|
audioPlayerPause.classList.remove("fade-out")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add speed
|
||||||
|
export function addSpeed(arn: AnimeNotifier, speed: number) {
|
||||||
|
if(!audioNode || audioNode.playbackRate.value === 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
targetSpeed += speed
|
||||||
|
|
||||||
|
if(targetSpeed < 0.5) {
|
||||||
|
targetSpeed = 0.5
|
||||||
|
} else if(targetSpeed > 2) {
|
||||||
|
targetSpeed = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
audioNode.playbackRate.setValueAtTime(targetSpeed, 0)
|
||||||
|
arn.statusMessage.showInfo("Playback speed: " + Math.round(targetSpeed * 100) + "%")
|
||||||
|
}
|
@ -12,7 +12,8 @@ import { ServiceWorkerManager } from "./ServiceWorkerManager"
|
|||||||
import { displayAiringDate, displayDate, displayTime } from "./DateView"
|
import { displayAiringDate, displayDate, displayTime } from "./DateView"
|
||||||
import { findAll, delay, canUseWebP, swapElements } from "./Utils"
|
import { findAll, delay, canUseWebP, swapElements } from "./Utils"
|
||||||
import * as actions from "./Actions"
|
import * as actions from "./Actions"
|
||||||
import { darkTheme } from "./Actions";
|
import { darkTheme, addSpeed, playPreviousTrack } from "./Actions";
|
||||||
|
import { playPauseAudio, playNextTrack } from "./Actions/Audio"
|
||||||
|
|
||||||
export class AnimeNotifier {
|
export class AnimeNotifier {
|
||||||
app: Application
|
app: Application
|
||||||
@ -844,6 +845,51 @@ export class AnimeNotifier {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "+" = Audio speed up
|
||||||
|
if(e.keyCode == 107 && !e.ctrlKey) {
|
||||||
|
addSpeed(this, 0.05)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// "-" = Audio speed down
|
||||||
|
if(e.keyCode == 109 && !e.ctrlKey) {
|
||||||
|
addSpeed(this, -0.05)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// "J" = Previous track
|
||||||
|
if(e.keyCode == 74 && !e.ctrlKey) {
|
||||||
|
playPreviousTrack(this)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// "K" = Play/pause
|
||||||
|
if(e.keyCode == 75 && !e.ctrlKey) {
|
||||||
|
playPauseAudio(this)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// "L" = Next track
|
||||||
|
if(e.keyCode == 76 && !e.ctrlKey) {
|
||||||
|
playNextTrack(this)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// "Ctrl" + "," = Settings
|
// "Ctrl" + "," = Settings
|
||||||
if(e.ctrlKey && e.keyCode == 188) {
|
if(e.ctrlKey && e.keyCode == 188) {
|
||||||
this.app.load("/settings")
|
this.app.load("/settings")
|
||||||
|
Loading…
Reference in New Issue
Block a user