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"
 | 
					#SDPLUGINDIR = "./com.dlprows.macvolumecontrol.sdPlugin"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
update:
 | 
					update:
 | 
				
			||||||
	killall Stream\ Deck.app || true
 | 
						killall Stream\ Deck || true
 | 
				
			||||||
	go build -o $(INSTALLDIR) .
 | 
						go build -o $(INSTALLDIR) .
 | 
				
			||||||
	open -a Elgato\ Stream\ Deck
 | 
						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 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 {
 | 
						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 := context.Background()
 | 
				
			||||||
				ctx = sdcontext.WithContext(ctx, ctxStr)
 | 
									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 {
 | 
					func setFeedback(ctx context.Context, client *streamdeck.Client, newSettings *volume.VolumeSettings) error {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if _currentSettings.OutputVolume == newSettings.OutputVolume && _currentSettings.OutputMuted == newSettings.OutputMuted {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	payload := FeedbackPayload{}
 | 
						payload := FeedbackPayload{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -151,10 +148,19 @@ func setFeedbackIfNeeded(ctx context.Context, client *streamdeck.Client, newSett
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	payload.Icon = ValueWithOpacity[any]{nil, opacity}
 | 
						payload.Icon = ValueWithOpacity[any]{nil, opacity}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_currentSettings = newSettings
 | 
					 | 
				
			||||||
	return client.SetFeedback(ctx, payload)
 | 
						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 {
 | 
					type FeedbackPayload struct {
 | 
				
			||||||
	Value     ValueWithOpacity[string] `json:"value"`
 | 
						Value     ValueWithOpacity[string] `json:"value"`
 | 
				
			||||||
	Indicator ValueWithOpacity[int]    `json:"indicator"`
 | 
						Indicator ValueWithOpacity[int]    `json:"indicator"`
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,9 @@ package volume
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 #cgo CFLAGS: -x objective-c
 | 
					 #cgo CFLAGS: -x objective-c
 | 
				
			||||||
 #cgo LDFLAGS: -framework CoreAudio
 | 
					 #cgo LDFLAGS: -framework CoreAudio -framework AudioToolbox
 | 
				
			||||||
 #include <CoreAudio/CoreAudio.h>
 | 
					 #include <CoreAudio/CoreAudio.h>
 | 
				
			||||||
 | 
					 #include <AudioToolbox/AudioToolbox.h>
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
import "C"
 | 
					import "C"
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
@ -43,10 +44,17 @@ func GetDefaultOutputDevice() (AudioObjectID, OSStatus) {
 | 
				
			|||||||
func GetVolume(objectID AudioObjectID) (float32, OSStatus) {
 | 
					func GetVolume(objectID AudioObjectID) (float32, OSStatus) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	properties := C.AudioObjectPropertyAddress{
 | 
						properties := C.AudioObjectPropertyAddress{
 | 
				
			||||||
		C.kAudioDevicePropertyVolumeScalar,
 | 
							C.kAudioHardwareServiceDeviceProperty_VirtualMainVolume,
 | 
				
			||||||
		C.kAudioDevicePropertyScopeOutput,
 | 
							C.kAudioDevicePropertyScopeOutput,
 | 
				
			||||||
		0, //main channel
 | 
							C.kAudioObjectPropertyElementMain,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
							properties := C.AudioObjectPropertyAddress{
 | 
				
			||||||
 | 
								C.kAudioDevicePropertyVolumeScalar,
 | 
				
			||||||
 | 
								C.kAudioDevicePropertyScopeOutput,
 | 
				
			||||||
 | 
								0, //main channel
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var data C.Float32
 | 
						var data C.Float32
 | 
				
			||||||
	dataSize := C.UInt32(unsafe.Sizeof(data))
 | 
						dataSize := C.UInt32(unsafe.Sizeof(data))
 | 
				
			||||||
@ -66,10 +74,17 @@ func GetVolume(objectID AudioObjectID) (float32, OSStatus) {
 | 
				
			|||||||
func SetVolume(objectID AudioObjectID, volume float32) OSStatus {
 | 
					func SetVolume(objectID AudioObjectID, volume float32) OSStatus {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	properties := C.AudioObjectPropertyAddress{
 | 
						properties := C.AudioObjectPropertyAddress{
 | 
				
			||||||
		C.kAudioDevicePropertyVolumeScalar,
 | 
							C.kAudioHardwareServiceDeviceProperty_VirtualMainVolume,
 | 
				
			||||||
		C.kAudioDevicePropertyScopeOutput,
 | 
							C.kAudioDevicePropertyScopeOutput,
 | 
				
			||||||
		0, //main channel
 | 
							C.kAudioObjectPropertyElementMain,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
							properties := C.AudioObjectPropertyAddress{
 | 
				
			||||||
 | 
								C.kAudioDevicePropertyVolumeScalar,
 | 
				
			||||||
 | 
								C.kAudioDevicePropertyScopeOutput,
 | 
				
			||||||
 | 
								0, //main channel
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data := C.Float32(volume)
 | 
						data := C.Float32(volume)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -49,9 +49,6 @@ type VolumeSettings struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetVolumeSettings() (*VolumeSettings, error) {
 | 
					func GetVolumeSettings() (*VolumeSettings, error) {
 | 
				
			||||||
	//osascript -e "get volume settings"
 | 
					 | 
				
			||||||
	//output volume:81, input volume:50, alert volume:100, output muted:false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	device, result := GetDefaultOutputDevice()
 | 
						device, result := GetDefaultOutputDevice()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if result != AudioHardwareNoError {
 | 
						if result != AudioHardwareNoError {
 | 
				
			||||||
@ -210,3 +207,6 @@ const (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//script := "set volume output muted (not output muted of (get volume settings))"
 | 
					//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()
 | 
					//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
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user