Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d44af63511 | ||
|
9aea138a5c | ||
|
f85551ae02 | ||
|
2811d3f042 | ||
|
c73cf88081 | ||
4ac19e0dab |
@ -4,7 +4,7 @@ INSTALLDIR = ~/Library/Application\ Support/com.elgato.StreamDeck/Plugins/com.dl
|
||||
#SDPLUGINDIR = "./com.dlprows.macvolumecontrol.sdPlugin"
|
||||
|
||||
update:
|
||||
killall Stream\ Deck.app || true
|
||||
killall Stream\ Deck || true
|
||||
go build -o $(INSTALLDIR) .
|
||||
open -a Elgato\ Stream\ Deck
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.8 KiB |
22
src/main.go
22
src/main.go
@ -95,7 +95,7 @@ func setup(client *streamdeck.Client) {
|
||||
return err
|
||||
}
|
||||
|
||||
return setFeedbackIfNeeded(ctx, client, newSettings)
|
||||
return setFeedback(ctx, client, newSettings)
|
||||
})
|
||||
|
||||
action.RegisterHandler(streamdeck.WillDisappear, func(ctx context.Context, client *streamdeck.Client, event streamdeck.Event) error {
|
||||
@ -119,17 +119,14 @@ func setup(client *streamdeck.Client) {
|
||||
ctx := context.Background()
|
||||
ctx = sdcontext.WithContext(ctx, ctxStr)
|
||||
|
||||
setFeedbackIfNeeded(ctx, client, newSettings)
|
||||
setFeedback(ctx, client, newSettings)
|
||||
}
|
||||
_currentSettings = newSettings
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func setFeedbackIfNeeded(ctx context.Context, client *streamdeck.Client, newSettings *volume.VolumeSettings) error {
|
||||
|
||||
if _currentSettings.OutputVolume == newSettings.OutputVolume && _currentSettings.OutputMuted == newSettings.OutputMuted {
|
||||
return nil
|
||||
}
|
||||
func setFeedback(ctx context.Context, client *streamdeck.Client, newSettings *volume.VolumeSettings) error {
|
||||
|
||||
payload := FeedbackPayload{}
|
||||
|
||||
@ -151,10 +148,19 @@ func setFeedbackIfNeeded(ctx context.Context, client *streamdeck.Client, newSett
|
||||
|
||||
payload.Icon = ValueWithOpacity[any]{nil, opacity}
|
||||
|
||||
_currentSettings = newSettings
|
||||
return client.SetFeedback(ctx, payload)
|
||||
}
|
||||
|
||||
func setFeedbackIfNeeded(ctx context.Context, client *streamdeck.Client, newSettings *volume.VolumeSettings) error {
|
||||
|
||||
if _currentSettings.OutputVolume == newSettings.OutputVolume && _currentSettings.OutputMuted == newSettings.OutputMuted {
|
||||
return nil
|
||||
}
|
||||
|
||||
_currentSettings = newSettings
|
||||
return setFeedback(ctx, client, newSettings)
|
||||
}
|
||||
|
||||
type FeedbackPayload struct {
|
||||
Value ValueWithOpacity[string] `json:"value"`
|
||||
Indicator ValueWithOpacity[int] `json:"indicator"`
|
||||
|
@ -2,8 +2,9 @@ package volume
|
||||
|
||||
/*
|
||||
#cgo CFLAGS: -x objective-c
|
||||
#cgo LDFLAGS: -framework CoreAudio
|
||||
#cgo LDFLAGS: -framework CoreAudio -framework AudioToolbox
|
||||
#include <CoreAudio/CoreAudio.h>
|
||||
#include <AudioToolbox/AudioToolbox.h>
|
||||
*/
|
||||
import "C"
|
||||
import (
|
||||
@ -43,10 +44,17 @@ func GetDefaultOutputDevice() (AudioObjectID, OSStatus) {
|
||||
func GetVolume(objectID AudioObjectID) (float32, OSStatus) {
|
||||
|
||||
properties := C.AudioObjectPropertyAddress{
|
||||
C.kAudioDevicePropertyVolumeScalar,
|
||||
C.kAudioHardwareServiceDeviceProperty_VirtualMainVolume,
|
||||
C.kAudioDevicePropertyScopeOutput,
|
||||
0, //main channel
|
||||
C.kAudioObjectPropertyElementMain,
|
||||
}
|
||||
/*
|
||||
properties := C.AudioObjectPropertyAddress{
|
||||
C.kAudioDevicePropertyVolumeScalar,
|
||||
C.kAudioDevicePropertyScopeOutput,
|
||||
0, //main channel
|
||||
}
|
||||
*/
|
||||
|
||||
var data C.Float32
|
||||
dataSize := C.UInt32(unsafe.Sizeof(data))
|
||||
@ -66,10 +74,17 @@ func GetVolume(objectID AudioObjectID) (float32, OSStatus) {
|
||||
func SetVolume(objectID AudioObjectID, volume float32) OSStatus {
|
||||
|
||||
properties := C.AudioObjectPropertyAddress{
|
||||
C.kAudioDevicePropertyVolumeScalar,
|
||||
C.kAudioHardwareServiceDeviceProperty_VirtualMainVolume,
|
||||
C.kAudioDevicePropertyScopeOutput,
|
||||
0, //main channel
|
||||
C.kAudioObjectPropertyElementMain,
|
||||
}
|
||||
/*
|
||||
properties := C.AudioObjectPropertyAddress{
|
||||
C.kAudioDevicePropertyVolumeScalar,
|
||||
C.kAudioDevicePropertyScopeOutput,
|
||||
0, //main channel
|
||||
}
|
||||
*/
|
||||
|
||||
data := C.Float32(volume)
|
||||
|
||||
|
@ -49,9 +49,6 @@ type VolumeSettings struct {
|
||||
}
|
||||
|
||||
func GetVolumeSettings() (*VolumeSettings, error) {
|
||||
//osascript -e "get volume settings"
|
||||
//output volume:81, input volume:50, alert volume:100, output muted:false
|
||||
|
||||
device, result := GetDefaultOutputDevice()
|
||||
|
||||
if result != AudioHardwareNoError {
|
||||
@ -210,3 +207,6 @@ const (
|
||||
|
||||
//script := "set volume output muted (not output muted of (get volume settings))"
|
||||
//return exec.Command("osascript", "-e", "set volume output muted (not output muted of (get volume settings))").Run()
|
||||
|
||||
//osascript -e "get volume settings"
|
||||
//output volume:81, input volume:50, alert volume:100, output muted:false
|
||||
|
Loading…
x
Reference in New Issue
Block a user