From c7a2f05dad82e6f5ed55fa2e47551a38798c7894 Mon Sep 17 00:00:00 2001
From: David Botton
Date: Sun, 24 Jan 2021 19:26:30 -0500
Subject: [PATCH] Multimedia bindings
---
clog-multimedia.lisp | 562 +++++++++++++++++++++++++++++++++++++++++++
clog.lisp | 41 ++++
doc/clog-manual.html | 418 ++++++++++++++++++++++++++++++--
3 files changed, 1007 insertions(+), 14 deletions(-)
diff --git a/clog-multimedia.lisp b/clog-multimedia.lisp
index ccadf46..1a0dbbe 100644
--- a/clog-multimedia.lisp
+++ b/clog-multimedia.lisp
@@ -16,6 +16,568 @@
(defclass clog-multimedia (clog-element)()
(:documentation "CLOG Multimedia base class."))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Properties - clog-multimedia
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;
+;; loop-mediap ;;
+;;;;;;;;;;;;;;;;;
+
+(defgeneric loop-mediap (clog-multimedia)
+ (:documentation "Get/Setf loop media property."))
+
+(defmethod loop-mediap ((obj clog-multimedia))
+ (js-true-p (property obj "loop")))
+
+(defgeneric set-loop-mediap (clog-multimedia value)
+ (:documentation "Set loop-media VALUE for CLOG-MULTIMEDIA"))
+
+(defmethod set-loop-mediap ((obj clog-multimedia) value)
+ (setf (property obj "loop") (p-true-js value)))
+(defsetf loop-mediap set-loop-mediap)
+
+;;;;;;;;;;;;;;;;;;;;
+;; media-duration ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric media-duration (clog-multimedia)
+ (:documentation "Get/Setf media in seconds property."))
+
+(defmethod media-duration ((obj clog-multimedia))
+ (parse-integer (property obj "loop")))
+
+;;;;;;;;;;;;;;;;;;
+;; media-source ;;
+;;;;;;;;;;;;;;;;;;
+
+(defgeneric media-source (clog-multimedia)
+ (:documentation "Get/Setf media source/url."))
+
+(defmethod media-source ((obj clog-multimedia))
+ (property obj "src"))
+
+(defgeneric set-media-source (clog-multimedia value)
+ (:documentation "Set media source VALUE for CLOG-MULTIMEDIA"))
+
+(defmethod set-media-source ((obj clog-multimedia) value)
+ (setf (property obj "src") value))
+(defsetf media-source set-media-source)
+
+;;;;;;;;;;;;;;;;;;;;
+;; media-position ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric media-position (clog-multimedia)
+ (:documentation "Get/Setf postion of media in seconds."))
+
+(defmethod media-position ((obj clog-multimedia))
+ (parse-integer (property obj "currentTime")))
+
+(defgeneric set-media-position (clog-multimedia value)
+ (:documentation "Set media source VALUE for CLOG-MULTIMEDIA"))
+
+(defmethod set-media-position ((obj clog-multimedia) value)
+ (setf (property obj "currentTime") value))
+(defsetf media-position set-media-position)
+
+;;;;;;;;;;;;
+;; mutedp ;;
+;;;;;;;;;;;;
+
+(defgeneric mutedp (clog-multimedia)
+ (:documentation "Get/Setf muted property."))
+
+(defmethod mutedp ((obj clog-multimedia))
+ (js-true-p (property obj "muted")))
+
+(defgeneric set-mutedp (clog-multimedia value)
+ (:documentation "Set muted VALUE for CLOG-MULTIMEDIA"))
+
+(defmethod set-mutedp ((obj clog-multimedia) value)
+ (setf (property obj "muted") (p-true-js value)))
+(defsetf mutedp set-mutedp)
+
+;;;;;;;;;;;;;
+;; pausedp ;;
+;;;;;;;;;;;;;
+
+(defgeneric pausedp (clog-multimedia)
+ (:documentation "Get/Setf paused property."))
+
+(defmethod pausedp ((obj clog-multimedia))
+ (js-true-p (property obj "paused")))
+
+;;;;;;;;;;;;;;
+;; seekingp ;;
+;;;;;;;;;;;;;;
+
+(defgeneric seekingp (clog-multimedia)
+ (:documentation "Get/Setf seeking property."))
+
+(defmethod seekingp ((obj clog-multimedia))
+ (js-true-p (property obj "seeking")))
+
+;;;;;;;;;;;;;;;;;;;;;;
+;; playback-ended-p ;;
+;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric playback-ended-p (clog-multimedia)
+ (:documentation "Get/Setf true of Media position has reached end of its duration."))
+
+(defmethod playback-ended-p ((obj clog-multimedia))
+ (js-true-p (property obj "ended")))
+
+;;;;;;;;;;;;;;;;;;;
+;; playback-rate ;;
+;;;;;;;;;;;;;;;;;;;
+
+(defgeneric playback-rate (clog-multimedia)
+ (:documentation "Get/Setf playback rate.
+Common values - 1.0 normal, 0.5 half speed, -1.0 reverse"))
+
+(defmethod playback-rate ((obj clog-multimedia))
+ (property obj "playbackRate"))
+
+(defgeneric set-playback-rate (clog-multimedia value)
+ (:documentation "Set media source VALUE for CLOG-MULTIMEDIA"))
+
+(defmethod set-playback-rate ((obj clog-multimedia) value)
+ (setf (property obj "playbackRate") value))
+(defsetf playback-rate set-playback-rate)
+
+;;;;;;;;;;;;;;;;;;;;;
+;; ready-to-play-p ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric ready-to-play-p (clog-multimedia)
+ (:documentation "Get/Setf true of Media position has reached end of its duration."))
+
+(defmethod ready-to-play-p ((obj clog-multimedia))
+ (js-true-p (property obj "readyState")))
+
+;;;;;;;;;;;;;;;;;;
+;; media-volume ;;
+;;;;;;;;;;;;;;;;;;
+
+(defgeneric media-volume (clog-multimedia)
+ (:documentation "Get/Setf media volume, not system volume. 0.0 .. 1.0"))
+
+(defmethod media-volume ((obj clog-multimedia))
+ (parse-integer (property obj "volume")))
+
+(defgeneric set-media-volume (clog-multimedia value)
+ (:documentation "Set media source VALUE for CLOG-MULTIMEDIA"))
+
+(defmethod set-media-volume ((obj clog-multimedia) value)
+ (setf (property obj "volume") value))
+(defsetf media-volume set-media-volume)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Methods - clog-multimedia
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;
+;; play-media ;;
+;;;;;;;;;;;;;;;;
+
+(defgeneric play-media (clog-multimedia)
+ (:documentation "Play media."))
+
+(defmethod play-media ((obj clog-multimedia))
+ (execute obj "play()"))
+
+;;;;;;;;;;;;;;;;;
+;; pause-media ;;
+;;;;;;;;;;;;;;;;;
+
+(defgeneric pause-media (clog-multimedia)
+ (:documentation "Pause media."))
+
+(defmethod pause-media ((obj clog-multimedia))
+ (execute obj "pause()"))
+
+;;;;;;;;;;;;;;;;
+;; load-media ;;
+;;;;;;;;;;;;;;;;
+
+(defgeneric load-media (clog-multimedia)
+ (:documentation "Load/Reload media."))
+
+(defmethod load-media ((obj clog-multimedia))
+ (execute obj "load()"))
+
+;;;;;;;;;;;;;;;;;;;;;
+;; can-play-type-p ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric can-play-type-p (clog-multimedia media-type)
+ (:documentation "Returns true if browser claims support of a media type.
+Browsers report possibility but not guarantees of being able to support a
+media type.
+ Common values:
+ video/ogg
+ video/mp4
+ video/webm
+ audio/mpeg
+ audio/ogg
+ audio/mp4
+ audio/mp3
+
+ Common values, including codecs:
+ video/ogg; codecs=\"theora, vorbis\"
+ video/mp4; codecs=\"avc1.4D401E, mp4a.40.2\"
+ video/webm; codecs=\"vp8.0, vorbis\"
+ audio/ogg; codecs=\"vorbis\"
+ audio/mp4; codecs=\"mp4a.40.5\""))
+
+(defmethod can-play-type-p ((obj clog-multimedia) media-type)
+ (js-true-p (query obj (format nil "canPlayType('~A')" media-type))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Events - clog-multimedia
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; The standard event order for a normal file load is:
+;; On_Load_Start
+;; On_Duration_Change
+;; On_Loaded_Meta_Data
+;; On_Loaded_Data
+;; On_Progress
+;; On_Can_Play
+;; On_Can_Play_Though
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-media-abort ;;
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-media-abort (clog-multimedia handler)
+ (:documentation "Set the ON-MEDIA-ABORT-HANDLER for CLOG-MULTIMEDIA. HANDLER
+is nil unbind the event."))
+
+(defmethod set-on-media-abort ((obj clog-multimedia) handler)
+ (set-event obj "abort"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-media-error ;;
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-media-error (clog-multimedia handler)
+ (:documentation "Set the ON-MEDIA-ERROR-HANDLER for CLOG-MULTIMEDIA. HANDLER
+is nil unbind the event."))
+
+(defmethod set-on-media-error ((obj clog-multimedia) handler)
+ (set-event obj "error"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;
+;; set-on-can-play ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-can-play (clog-multimedia handler)
+ (:documentation "Set the ON-CAN-PLAY-HANDLER for CLOG-MULTIMEDIA. HANDLER
+is nil unbind the event."))
+
+(defmethod set-on-can-play ((obj clog-multimedia) handler)
+ (set-event obj "canplay"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-can-play-through ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-can-play-through (clog-multimedia handler)
+ (:documentation "Set the ON-CAN-PLAY-THROUGH-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-can-play-through ((obj clog-multimedia) handler)
+ (set-event obj "canplaythrough"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-duration-change ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-duration-change (clog-multimedia handler)
+ (:documentation "Set the ON-DURATION-CHANGE-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-duration-change ((obj clog-multimedia) handler)
+ (set-event obj "durationchange"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;
+;; set-on-emptied ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-emptied (clog-multimedia handler)
+ (:documentation "Set the ON-EMPTIED-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-emptied ((obj clog-multimedia) handler)
+ (set-event obj "emptied"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;
+;; set-on-ended ;;
+;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-ended (clog-multimedia handler)
+ (:documentation "Set the ON-ENDED-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-ended ((obj clog-multimedia) handler)
+ (set-event obj "ended"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-loaded-data ;;
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-loaded-data (clog-multimedia handler)
+ (:documentation "Set the ON-LOADED-DATA-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-loaded-data ((obj clog-multimedia) handler)
+ (set-event obj "loadeddata"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-loaded-meta-data ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-loaded-meta-data (clog-multimedia handler)
+ (:documentation "Set the ON-LOADED-META-DATA-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-loaded-meta-data ((obj clog-multimedia) handler)
+ (set-event obj "loadedmetadata"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-load-start ;;
+;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-load-start (clog-multimedia handler)
+ (:documentation "Set the ON-LOAD-START-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-load-start ((obj clog-multimedia) handler)
+ (set-event obj "loadstart"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;
+;; set-on-play ;;
+;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-play (clog-multimedia handler)
+ (:documentation "Set the ON-PLAY-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-play ((obj clog-multimedia) handler)
+ (set-event obj "play"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;
+;; set-on-pause ;;
+;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-pause (clog-multimedia handler)
+ (:documentation "Set the ON-PAUSE-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-pause ((obj clog-multimedia) handler)
+ (set-event obj "pause"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;
+;; set-on-playing ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-playing (clog-multimedia handler)
+ (:documentation "Set the ON-PLAYING-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-playing ((obj clog-multimedia) handler)
+ (set-event obj "playing"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;
+;; set-on-progress ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-progress (clog-multimedia handler)
+ (:documentation "Set the ON-PROGRESS-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-progress ((obj clog-multimedia) handler)
+ (set-event obj "progress"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-rate-change ;;
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-rate-change (clog-multimedia handler)
+ (:documentation "Set the ON-RATE-CHANGE-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-rate-change ((obj clog-multimedia) handler)
+ (set-event obj "ratechange"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;
+;; set-on-seeked ;;
+;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-seeked (clog-multimedia handler)
+ (:documentation "Set the ON-SEEKED-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-seeked ((obj clog-multimedia) handler)
+ (set-event obj "seeked"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;
+;; set-on-seeking ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-seeking (clog-multimedia handler)
+ (:documentation "Set the ON-SEEKING-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-seeking ((obj clog-multimedia) handler)
+ (set-event obj "seeking"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;
+;; set-on-stalled ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-stalled (clog-multimedia handler)
+ (:documentation "Set the ON-STALLED-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-stalled ((obj clog-multimedia) handler)
+ (set-event obj "stalled"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;
+;; set-on-suspend ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-suspend (clog-multimedia handler)
+ (:documentation "Set the ON-SUSPEND-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-suspend ((obj clog-multimedia) handler)
+ (set-event obj "suspend"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-time-update ;;
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-time-update (clog-multimedia handler)
+ (:documentation "Set the ON-TIME-UPDATE-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-time-update ((obj clog-multimedia) handler)
+ (set-event obj "timeupdate"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; set-on-volume-change ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-volume-change (clog-multimedia handler)
+ (:documentation "Set the ON-VOLUME-CHANGE-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-volume-change ((obj clog-multimedia) handler)
+ (set-event obj "volumechange"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
+;;;;;;;;;;;;;;;;;;;;
+;; set-on-waiting ;;
+;;;;;;;;;;;;;;;;;;;;
+
+(defgeneric set-on-waiting (clog-multimedia handler)
+ (:documentation "Set the ON-WAITING-HANDLER for CLOG-MULTIMEDIA.
+HANDLER is nil unbind the event."))
+
+(defmethod set-on-waiting ((obj clog-multimedia) handler)
+ (set-event obj "waiting"
+ (when handler
+ (lambda (data)
+ (declare (ignore data))
+ (funcall handler obj)))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-audio
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/clog.lisp b/clog.lisp
index 9f3d0ff..c1bc195 100644
--- a/clog.lisp
+++ b/clog.lisp
@@ -435,9 +435,50 @@ embedded in a native template application.)"
"CLOG-Multimedia - Base Class for CLOG multimedia objects"
(clog-multimedia class)
+ (loop-mediap generic-function)
+ (media-duration generic-function)
+ (media-source generic-function)
+ (media-position generic-function)
+ (mutedp generic-function)
+ (pausedp generic-function)
+ (seekingp generic-function)
+ (playback-ended-p generic-function)
+ (playback-rate generic-function)
+ (ready-to-play-p generic-function)
+ (media-volume generic-function)
+ (play-media generic-function)
+ (pause-media generic-function)
+ (load-media generic-function)
+ (can-play-type-p generic-function)
+
+ (set-on-media-abort generic-function)
+ (set-on-media-error generic-function)
+ (set-on-can-play generic-function)
+ (set-on-can-play-through generic-function)
+ (set-on-duration-change generic-function)
+ (set-on-emptied generic-function)
+ (set-on-ended generic-function)
+ (set-on-loaded-data generic-function)
+ (set-on-loaded-meta-data generic-function)
+ (set-on-load-start generic-function)
+ (set-on-play generic-function)
+ (set-on-pause generic-function)
+ (set-on-playing generic-function)
+ (set-on-progress generic-function)
+ (set-on-rate-change generic-function)
+ (set-on-seeked generic-function)
+ (set-on-seeking generic-function)
+ (set-on-stalled generic-function)
+ (set-on-suspend generic-function)
+ (set-on-time-update generic-function)
+ (set-on-volume-change generic-function)
+ (set-on-waiting generic-function)
+
+ "Clog-Audio - Class for CLOG Audio Control"
(clog-audio class)
(create-audio generic-function)
+ "Clog-Video - Class for CLOG Video Control"
(clog-video class)
(create-video generic-function))
diff --git a/doc/clog-manual.html b/doc/clog-manual.html
index 3c6d2ff..ab438fb 100644
--- a/doc/clog-manual.html
+++ b/doc/clog-manual.html
@@ -44,12 +44,13 @@
8 Common CLOG Elements
9 CLOG Form Objects
10 CLOG Canvas Objects
-11 CLOG Body Objects
-12 CLOG Window Objects
-13 CLOG Document Objects
-14 CLOG Location Objects
-15 CLOG Navigator Objects
-16 CLOG Framework internals and extensions
+11 CLOG Multimedia Objects
+12 CLOG Body Objects
+13 CLOG Window Objects
+14 CLOG Document Objects
+15 CLOG Location Objects
+16 CLOG Navigator Objects
+17 CLOG Framework internals and extensions
[in package CLOG]
@@ -2700,7 +2701,7 @@ optionally fill in with contents of data-list.
- ← ↑ → ↺
+ ← ↑ → ↺
@@ -3046,11 +3047,400 @@ https://developer.mozilla.org/en-US/docs/Web/CSS/font
Restore canvas from stack
+
+
+ ← ↑ → ↺
+
+
+
+CLOG-Multimedia - Base Class for CLOG multimedia objects
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[generic-function] PLAYBACK-RATE CLOG-MULTIMEDIA
+
+Get/Setf playback rate.
+Common values - 1.0 normal, 0.5 half speed, -1.0 reverse
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[generic-function] CAN-PLAY-TYPE-P CLOG-MULTIMEDIA MEDIA-TYPE
+
+Returns true if browser claims support of a media type.
+Browsers report possibility but not guarantees of being able to support a
+media type.
+ Common values:
+ video/ogg
+ video/mp4
+ video/webm
+ audio/mpeg
+ audio/ogg
+ audio/mp4
+ audio/mp3
+
+ Common values, including codecs:
+ video/ogg; codecs="theora, vorbis"
+ video/mp4; codecs="avc1.4D401E, mp4a.40.2"
+ video/webm; codecs="vp8.0, vorbis"
+ audio/ogg; codecs="vorbis"
+ audio/mp4; codecs="mp4a.40.5"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clog-Audio - Class for CLOG Audio Control
+
+
+
+
+
+
+
+
+
+Clog-Video - Class for CLOG Video Control
+
+
+
+
+
+
+
+
+
- ← ↑ → ↺
+ ← ↑ → ↺
-
+
CLOG-Body - CLOG Body Objects
@@ -3110,7 +3500,7 @@ or global objects.
← ↑ → ↺
-
+
CLOG-Window - CLOG Window Objects
@@ -3461,7 +3851,7 @@ on-storage event is fired for changes to :local storage keys.
← ↑ → ↺
-
+
CLOG-Document - CLOG Document Objects
@@ -3595,7 +3985,7 @@ on-storage event is fired for changes to :local storage keys.
← ↑ → ↺
-
+
CLOG-Location - CLOG Location Objects
@@ -3711,7 +4101,7 @@ on-storage event is fired for changes to :local storage keys.
← ↑ → ↺
-
+
CLOG-Navigator - CLOG Navigator Objects
@@ -3761,7 +4151,7 @@ on-storage event is fired for changes to :local storage keys.
← ↑ ↺
-
+
Responding to new java script DOM events