Remote audio player much simpler.
This commit is contained in:
+16
-39
@@ -39,22 +39,14 @@
|
||||
audio-parameterize!
|
||||
audio-param!
|
||||
audio-param
|
||||
audio-remote-path
|
||||
racket-sound-default-ssh-program
|
||||
racket-sound-default-ssh-options
|
||||
racket-sound-default-remote-racket
|
||||
racket-sound-default-remote-module
|
||||
racket-sound-default-remote-command
|
||||
current-racket-sound-ssh-program
|
||||
current-racket-sound-remote-racket
|
||||
current-racket-sound-remote-module
|
||||
replace-base-path
|
||||
)
|
||||
|
||||
(define-runtime-path placed-player-module "audio-placed-player.rkt")
|
||||
|
||||
|
||||
(define-struct audio-play
|
||||
(valid? cb-state cb-eof-stream rpc au-place evt-thread state remote-path-map)
|
||||
(valid? cb-state cb-eof-stream rpc au-place evt-thread state replace-base-paths)
|
||||
#:mutable
|
||||
#:transparent
|
||||
)
|
||||
@@ -104,21 +96,11 @@
|
||||
(define/contract (make-audio-player cb-state cb-eof-stream
|
||||
#:use-place [use-place (place-enabled?)]
|
||||
#:remote-host [remote-host #f]
|
||||
#:remote-path-map [remote-path-map '()]
|
||||
#:remote-racket [remote-racket (current-racket-sound-remote-racket)]
|
||||
#:remote-module [remote-module (current-racket-sound-remote-module)]
|
||||
#:remote-command [remote-command #f]
|
||||
#:ssh-program [ssh-program (current-racket-sound-ssh-program)]
|
||||
#:ssh-options [ssh-options #f])
|
||||
#:replace-base-paths [replace-base-paths '()])
|
||||
(->* (procedure? procedure?)
|
||||
(#:use-place boolean?
|
||||
#:remote-host (or/c #f string?)
|
||||
#:remote-path-map remote-path-map?
|
||||
#:remote-racket path-string?
|
||||
#:remote-module string?
|
||||
#:remote-command (or/c #f (listof string?))
|
||||
#:ssh-program path-string?
|
||||
#:ssh-options (or/c #f (listof string?)))
|
||||
#:replace-base-paths replace-base-paths?)
|
||||
audio-play?)
|
||||
(let ((cmd-ch #f)
|
||||
(ret-ch #f)
|
||||
@@ -133,21 +115,16 @@
|
||||
)
|
||||
(cond
|
||||
[remote-host
|
||||
;; Remote mode starts a worker over ssh. The remote worker uses
|
||||
;; placed-player/stdio, so the existing three logical channels map to
|
||||
;; ssh stdin, stdout and stderr. No init command is sent in this mode:
|
||||
;; the worker starts with all three channels already supplied.
|
||||
(let ((cmd (or remote-command (racket-sound-default-remote-command remote-racket remote-module))))
|
||||
(let-values (((cmd-ch* ret-ch* evt-ch* proc dead-guard*)
|
||||
(start-remote-placed-player remote-host
|
||||
#:ssh-program ssh-program
|
||||
#:ssh-options ssh-options
|
||||
#:remote-command cmd)))
|
||||
(set! cmd-ch cmd-ch*)
|
||||
(set! ret-ch ret-ch*)
|
||||
(set! evt-ch evt-ch*)
|
||||
(set! au-pl proc)
|
||||
(set! dead-guard dead-guard*)))]
|
||||
;; Remote mode is deliberately narrow: make-audio-player only needs
|
||||
;; a host and optional base-path replacements. SSH, Racket and module
|
||||
;; details are encapsulated in private/remote-utils.rkt and its config.
|
||||
(let-values (((cmd-ch* ret-ch* evt-ch* proc dead-guard*)
|
||||
(start-remote-placed-player remote-host)))
|
||||
(set! cmd-ch cmd-ch*)
|
||||
(set! ret-ch ret-ch*)
|
||||
(set! evt-ch evt-ch*)
|
||||
(set! au-pl proc)
|
||||
(set! dead-guard dead-guard*))]
|
||||
[use-place
|
||||
;; dynamic-place returns the command place-channel. The raw channel
|
||||
;; is kept for place-dead-evt, while normal traffic is sent through
|
||||
@@ -190,7 +167,7 @@
|
||||
(with-mutex rpc-mutex
|
||||
(define args*
|
||||
(if (and (eq? cmd 'open) (pair? args))
|
||||
(cons (audio-remote-path (car args) remote-path-map) (cdr args))
|
||||
(cons (replace-base-path (car args) replace-base-paths) (cdr args))
|
||||
args))
|
||||
(cmd-put (cons cmd args*))
|
||||
(ret-get))))
|
||||
@@ -204,7 +181,7 @@
|
||||
au-pl
|
||||
#f
|
||||
(make-hash)
|
||||
remote-path-map))
|
||||
replace-base-paths))
|
||||
(set-audio-play-evt-thread! handle
|
||||
(thread
|
||||
(λ ()
|
||||
|
||||
Reference in New Issue
Block a user