audio decoding

This commit is contained in:
2026-04-21 22:53:31 +02:00
parent c28357cfca
commit 1fdd7eb204
6 changed files with 145 additions and 13 deletions
+51 -3
View File
@@ -36,6 +36,7 @@
(define rktplayer%
(class wv-window%
(init-field [log-file #f])
(inherit-field settings icon)
(super-new
@@ -48,6 +49,8 @@
(define closed #f)
(define el-seeker #f)
(define el-volume #f)
(define el-vol-perc #f)
(define el-library #f)
(define el-playlist #f)
(define el-at #f)
@@ -71,6 +74,12 @@
(define current-at-seconds 0)
(define current-length-seconds 0)
(define/public (update-volume)
(let ((el (send this element 'volume-percentage)))
(let ((percentage (send player get-volume)))
(send el set-innerHTML! (sprintf "%s %d%" (tr "Volume:") percentage)))
)
)
(define (update-time at-seconds length-seconds)
(let ((as (inexact->exact (round at-seconds)))
@@ -98,6 +107,7 @@
(send el-seeker set! (format "~a" seeker)))
)
)
(send this update-volume)
)
)
)
@@ -232,6 +242,9 @@
)
)
(define/public (log-file! file)
(set log-file file))
(define/public (drop-tab! tab-id tab-idx)
(when (= current-tab tab-idx)
(send this stop))
@@ -312,21 +325,42 @@
(define/override (page-loaded oke)
(semaphore-wait initialized)
(semaphore-post initialized)
(super page-loaded oke)
(let ((el (send this element 'log-file)))
(send el set-innerHTML! (format "~a" log-file)))
(ww-connect 'play play-or-pause)
(ww-connect 'stop stop)
(ww-connect 'prev previous-track)
(ww-connect 'next next-track)
(ww-connect 'repeat repeat)
(ww-connect 'volume volume)
(ww-connect 'devtools devtools)
(set! el-seeker (send this element 'seek))
(dbg-rktplayer "el-seeker: ~a" (send el-seeker get))
(let ((seek-reactor (make-delayed-reactor 0.3 (λ (percentage) (send this seek-to percentage)))))
(let ((seek-reactor (webview-delayed-reactor 0.3
(λ (percentage)
;(displayln (format "el-seeker: ~a" percentage))
(send this seek-to percentage)))))
(send el-seeker on-change! seek-reactor))
(set! el-volume (send this element 'volume-range))
(set! el-vol-perc (send this element 'volume-perc))
(dbg-rktplayer "el-volume: ~a" (send el-volume get))
(let ((volume-reactor (webview-delayed-reactor 1.0
(λ (volume-range)
(let ((percentage (* volume-range volume-range)))
(send this set-volume! percentage)))
#:update (λ (val)
(let ((p (* val val)))
(send el-vol-perc set-innerHTML! (sprintf "%d%" p))
)))))
(send el-volume on-change! volume-reactor))
(set! el-library (send this element 'library))
(set! el-playlist (send this element 'tracks))
@@ -365,6 +399,7 @@
)
(update-track-nr current-track-nr)
)
(send this update-volume)
)
(define/public (scroll-top id)
@@ -524,7 +559,20 @@
)
(define/public (volume)
(dbg-rktplayer "Volume")
(let* ((volume-meter (send this element 'volume-meter))
(volume-display (send volume-meter display))
)
(if (eq? volume-display 'block)
(send volume-meter display 'none)
(send volume-meter display 'block))
(send el-vol-perc set-innerHTML!
(sprintf "%d%" (send player get-volume)))
)
)
(define/public (set-volume! percentage)
(send player set-volume! percentage)
(send this update-volume)
)
(define/public (seek-to percentage)