Compare commits
3 Commits
9890f6d0f3
...
146c9ea227
Author | SHA1 | Date | |
---|---|---|---|
146c9ea227 | |||
998ca396cb | |||
d81907be16 |
10
pw-access.el
10
pw-access.el
@ -172,9 +172,13 @@ Note this interface may not work with all PipeWire versions.")
|
||||
(pw-cli--parse-properties)))
|
||||
|
||||
(defun pw-cli--format-property-value (value)
|
||||
(if (consp value)
|
||||
(concat "[ " (mapconcat #'pw-cli--format-property-value value ", ") " ]")
|
||||
value))
|
||||
(cond
|
||||
((consp value)
|
||||
(concat "[ " (mapconcat #'pw-cli--format-property-value value ", ") " ]"))
|
||||
((numberp value)
|
||||
(number-to-string value))
|
||||
(t
|
||||
value)))
|
||||
|
||||
(defun pw-cli--format-property (property)
|
||||
(format "%s: %s" (car property) (pw-cli--format-property-value (cdr property))))
|
||||
|
12
pw-lib.el
12
pw-lib.el
@ -198,9 +198,11 @@ rather than using cached data to obtain the result."
|
||||
(cdr (assoc "volume" parameters))
|
||||
(nth port-id (cdr (assoc (if monitor-p "monitorVolumes" "channelVolumes") parameters)))))))
|
||||
|
||||
(defun pw-lib-set-volume (volume object)
|
||||
(defun pw-lib-set-volume (volume object &optional single-p)
|
||||
"Set the volume of PipeWire OBJECT to VOLUME.
|
||||
VOLUME must be an integer in the range 0-100."
|
||||
VOLUME must be an integer in the range 0-100.
|
||||
If SINGLE-P is non-nil, set the volume only for a single channel,
|
||||
otherwise set the volume to the same value for all the related channels."
|
||||
(cl-destructuring-bind (node-p parameters monitor-p node-id port-id)
|
||||
(pw-lib--object-parameters object)
|
||||
(let* ((property (cond
|
||||
@ -211,8 +213,10 @@ VOLUME must be an integer in the range 0-100."
|
||||
(value (if node-p
|
||||
float-volume
|
||||
(let ((orig-value (cdr (assoc property parameters))))
|
||||
(cl-substitute float-volume nil orig-value
|
||||
:test #'always :start port-id :count 1)))))
|
||||
(if single-p
|
||||
(cl-substitute float-volume nil orig-value
|
||||
:test #'always :start port-id :count 1)
|
||||
(make-list (length orig-value) float-volume))))))
|
||||
(pw-access-set-properties pw-lib--accessor node-id (list (cons property value))))))
|
||||
|
||||
(defun pw-lib-set-default (object stored-p)
|
||||
|
43
pw-ui.el
43
pw-ui.el
@ -150,7 +150,7 @@ object. Otherwise apply it on the default audio sink."
|
||||
(pw-ui--update (format "%s %s" (pw-ui--object-name object) (if muted-p "muted" "unmuted")))))
|
||||
|
||||
;;;###autoload
|
||||
(defun pipewire-set-volume (volume &optional object)
|
||||
(defun pipewire-set-volume (volume &optional object single-p)
|
||||
"Set volume of an audio output or input.
|
||||
VOLUME must be a number in the range 0-100.
|
||||
If OBJECT is given (only Nodes and Ports are allowed) or if on a Node
|
||||
@ -160,32 +160,52 @@ Otherwise apply it on the default audio sink."
|
||||
(setq volume (max 0 (min 100 volume)))
|
||||
(unless object
|
||||
(setq object (pw-ui--current-object t '("Node" "Port"))))
|
||||
(pw-lib-set-volume volume object)
|
||||
(pw-lib-set-volume volume object single-p)
|
||||
(pw-ui--update (format "Volume %s for %s" volume (pw-ui--object-name object))))
|
||||
|
||||
(defun pw-ui--change-volume (step)
|
||||
(defun pw-ui--change-volume (step &optional single-p)
|
||||
(let* ((object (pw-ui--current-object t '("Node" "Port")))
|
||||
(volume (pw-lib-volume object))
|
||||
(new-volume (max 0 (min 100 (+ volume step)))))
|
||||
(pipewire-set-volume new-volume object)))
|
||||
|
||||
(pipewire-set-volume new-volume object single-p)))
|
||||
|
||||
;;;###autoload
|
||||
(defun pipewire-increase-volume ()
|
||||
(defun pipewire-increase-volume (&optional single-p)
|
||||
"Increase volume of an audio output or input.
|
||||
The volume is increased by `pipewire-volume-step'.
|
||||
If on a Node or Port in a PipeWire buffer, apply it on all the
|
||||
channels of the given object. Otherwise apply it on the default audio
|
||||
sink."
|
||||
(interactive)
|
||||
(pw-ui--change-volume pipewire-volume-step single-p))
|
||||
|
||||
;;;###autoload
|
||||
(defun pipewire-increase-volume-single ()
|
||||
"Increase volume of an audio output or input.
|
||||
The volume is increased by `pipewire-volume-step'.
|
||||
If on a Node or Port in a PipeWire buffer, apply it on the given
|
||||
object. Otherwise apply it on the default audio sink."
|
||||
(interactive)
|
||||
(pw-ui--change-volume pipewire-volume-step))
|
||||
(pipewire-increase-volume t))
|
||||
|
||||
;;;###autoload
|
||||
(defun pipewire-decrease-volume ()
|
||||
(defun pipewire-decrease-volume (&optional single-p)
|
||||
"Decrease volume of an audio output or input.
|
||||
The volume is Decreased by `pipewire-volume-step'.
|
||||
The volume is decreased by `pipewire-volume-step'.
|
||||
If on a Node or Port in a PipeWire buffer, apply it on all the
|
||||
channels of the given object. Otherwise apply it on the default audio
|
||||
sink."
|
||||
(interactive)
|
||||
(pw-ui--change-volume (- pipewire-volume-step) single-p))
|
||||
|
||||
;;;###autoload
|
||||
(defun pipewire-decrease-volume-single ()
|
||||
"Decrease volume of an audio output or input.
|
||||
The volume is decreased by `pipewire-volume-step'.
|
||||
If on a Node or Port in a PipeWire buffer, apply it on the given
|
||||
object. Otherwise apply it on the default audio sink."
|
||||
(interactive)
|
||||
(pw-ui--change-volume (- pipewire-volume-step)))
|
||||
(pipewire-decrease-volume t))
|
||||
|
||||
;;;###autoload
|
||||
(defun pipewire-set-default ()
|
||||
@ -212,9 +232,10 @@ Otherwise ask for the Node to set as the default Node."
|
||||
(define-key map "d" 'pipewire-set-default)
|
||||
(define-key map "m" 'pipewire-toggle-muted)
|
||||
(define-key map "v" 'pipewire-set-volume)
|
||||
(define-key map "+" 'pipewire-increase-volume)
|
||||
(define-key map "=" 'pipewire-increase-volume)
|
||||
(define-key map "-" 'pipewire-decrease-volume)
|
||||
(define-key map "+" 'pipewire-increase-volume-single)
|
||||
(define-key map "_" 'pipewire-decrease-volume-single)
|
||||
map))
|
||||
|
||||
(define-derived-mode pipewire-mode special-mode "PW"
|
||||
|
Loading…
Reference in New Issue
Block a user