WOW/- TIP

매크로 - 스피커, 헤드셋 설정 원버튼 변환

Quixote. 2024. 5. 29. 16:36

wago.io에 매크로도 공유하는 공간이 생겼다

 

아직까진 그렇게 자료가 많진 않지만 점점 고수들이 신기한 매크로를 많이 알려줄 것 같다

 

그 중에 하나를 소개해볼려고 한다

 

원본 매크로 바로가기

 

스피커와 헤드셋설정을 매크로 버튼으로 변환하는 것인데 

 

이 매크로는 기능상으론 문제가 없다 

 

다만 클릭 할때마다 lua오류가 계속 뜬다 


/run local c,v="Sound_OutputDriverIndex"v=(GetCVar(c)+1)%Sound_GameSystem_GetNumOutputDrivers() SetCVar(c,v)print("Driver:",Sound_GameSystem_GetOutputDriverNameByIndex(v))AudioOptionsFrame_AudioRestart()


매크로 내용을 보면 사운드 출력 드라이버의 인덱스 값을 +1씩 해서 바꾸고

 

현재 드라이버를 프린트 기능으로 출력해주는 심플한 매크로다

 

문제가 되는 부분은 마지막에 AudioOptionsFrame_AudioRestart() 이 api때문이다 

 

wow wiki에서 해당 api를 찾아봤지만 현재 안 쓰이는 것 같다

 

해당 매크로는 인덱스 값을 1씩 늘려서 오디오 출력 장치가 많다면 곤란한 부분이 생긴다 

 

나는 스피커와 헤드셋만 사용할 건데

 

스피커의 인덱스 번호는 0, 헤드셋의 인덱스 번호는 3 이라 여러번 클릭 해줘야 하는 번거로움이 존재한다

 

기능상으론 문제가 없지만 lua오류창도 거슬려서 조금 변경해서 사용해야 한다 

 

오디오 출력 장치 인덱스 값을 알아보자

 

/etrace 명령어를 사용해서 이벤트 기록으로 확인해본다

 

 

이런식으로 기존 매크로로 사운드 출력을 변환하면서

 

CVar 업데이트 이벤트를 확인하고 Sound_OutputDriverIndex 인덱스 번호를 알 수 있다

 

나 같은 경우는

 

시스템 기본설정 = "0" 

헤드셋 = "3" 으로 나온다

 

tonumber라는 함수를 알게 됐는데 이 함수는 문자열의 숫자를 다른 숫자로 바꿔주는 역할을 한다

 

tonumber라는 함수를 이용해서 인덱스 값의 숫자를 바꾸는 매크로를 짠다


/run local x = tonumber(GetCVar("Sound_OutputDriverIndex")) if x == 0 then SetCVar("Sound_OutputDriverIndex", "3") else SetCVar("Sound_OutputDriverIndex", "0") end AudioOptionsFrame_AudioRestart()


 

지금 출력하는 Sound_OutputDriverIndex 값에 따라 반대로 출력하게 만들었다

 

매크로를 실행하면 Sound_OutputDriverIndex 값이 0이면 3으로 바꾸고 3이면 0으로 바꿔라

라는 뜻이다

 

그리고 lua오류의 주범인 AudioOptionsFrame_AudioRestart()이 api를 대체할 api를 구글링 했는데

 

용군단 이후 부터는 Sound_GameSystem_RestartSoundSystem() 이 api로 대체 되었다고 한다


/run local x = tonumber(GetCVar("Sound_OutputDriverIndex")) if x == 0 then SetCVar("Sound_OutputDriverIndex", "3") else SetCVar("Sound_OutputDriverIndex", "0") end Sound_GameSystem_RestartSoundSystem()


작동은 잘 된다

 

근데 원본 매크로 처럼 print기능을 넣어서 확인 기능을 만들어주면 좋겠다


/run local x = tonumber(GetCVar("Sound_OutputDriverIndex")) if x == 0 then SetCVar("Sound_OutputDriverIndex", "3")print("Driver: 헤드셋") else SetCVar("Sound_OutputDriverIndex", "0")print("Driver: 스피커") end Sound_GameSystem_RestartSoundSystem()


 

잘 작동한다 

 

 

 

혹시 사용하시려는 분들은 헤드셋 부분의 인덱스 값이 저랑 다를 수 있으니

 

etrace 명령어를 사용하시거나 이게 불편하시다면 아마도 2,3,4 숫자를 바꿔 넣다 보면 될 겁니다