SoundSet

사운드 장치의 다양한 설정을 변경합니다 (마스터 음소거, 마스터 볼륨 등등.)

SoundSet, NewSetting , ComponentType, ControlType, DeviceNumber

매개변수

NewSetting

백분률 숫자. 범위는 -100부터 100 까지 (부동 소수점 수 또는 표현식 가능). 숫자가 플러스 또는 마이너스 사인으로 시작하면, 현재 설정이 지정한 양만큼 위나 아래로 조절됩니다. 그렇지 않으면, 이 설정은 명시적으로 NewSetting에 지정한 값이 설정됩니다.

오직 두 개의 설정만 가능한 ControlTypes에 대하여 -- 즉 ONOFF, MUTE, MONO, LOUDNESS, STEREOENH, 그리고 BASSBOOST -- 양수는 설정을 켜고 0이면 설정을 끕니다. 그렇지만, 숫자가 플러스 또는 마이너스 사인으로 시작하면, 설정은 토글됩니다 (현재 상태를 반대로 설정합니다).

ComponentType

비어 있거냐 생략하면, 기본 값은 단어 MASTER입니다. 그렇지 않으면, 다음 단어 중 하나가 될 수 있습니다: MASTER (SPEAKERS와 동의어), DIGITAL, LINE, MICROPHONE, SYNTH, CD, TELEPHONE, PCSPEAKER, WAVE, AUX, ANALOG, HEADPHONES, 또는 N/A. 사운드 장치에 지정된 ComponentType이 없으면, ErrorLevel은 그 문제를 나타낼 것입니다.

어떤 믹서에서 라벨이 Auxiliary인 콤포넌트는 AUX가 아니라ANALOG로 접근할 수 있습니다.

사운드 장치에 ComponentType의 실체가 여럿이면 (예를 들어 두 종류의 LINE이 있으면), 보통 첫 번째에 연주 설정이 담기고 둘 째에 녹음 설정이 담깁니다. 첫 번째 말고 다른 실체에 접근하려면, 쌍점과 숫자를 이 매개변수에 추가하십시오. 예를 들어: Analog:2는 아날로그 컴포넌트의 두번째 실체라는 뜻입니다.

ControlType

비어 있거나 생략하면, 기본 값은 VOLUME입니다. 그렇지 않으면, 다음 단어 중 하나가 될 수 있습니다: VOLUME (또는 VOL), ONOFF, MUTE, MONO, LOUDNESS, STEREOENH, BASSBOOST, PAN, QSOUNDPAN, BASS, TREBLE, EQUALIZER, 또는 유효한 콘트롤 유형의 번호 (사운드카드 분석 스크립트 참조). 지정된 ComponentType에 지정된 ControlType이 없으면, ErrorLevel은 그 문제를 알려줄 것입니다.

주의: 사운드 장치는 보통 VOLUME (또는 VOL) 그리고 MUTE만 지원합니다. 물론 다른 것들도 윈도우즈 버전과 사운드 장치에 따라 사용할 수 있습니다.

DeviceNumber

1부터 지원되는 장치의 총 개수까지의 숫자. 이 매개변수를 생략하면, 기본 값은 1입니다 (첫 번째 사운드 장치), 아니면 Windows Vista 이상에서 연주를 위한 시스템의 기본 장치입니다. 이 매개변수는 표현식일 수 있습니다. 사운드카드 분석 스크립트가 어느 번호를 사용해야할지 결정하는 데 도움을 줄 것입니다.

에러 처리

[v1.1.04+]: 이 명령어는 실패하면 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.

ErrorLevel는 명령어가 성공하면 0이 설정됩니다. 그렇지 않으면 다음 문구 중 하나가 설정됩니다:

논평

[v1.1.10+]: This command supports Windows Vista and later.

오디오를 더 섬세하게 제어하려면, VA 라이브러리의 사용을 고려해 보십시오.

볼륨을 조절하는 또다른 방법은 스크립트에게 볼륨-제어 키눌림을 전송하게 해 전체 시스템에 대하여 마스터 볼룸을 변경하는 것입니다. 예를 들어 다음 예제와 같이 할 수 있습니다:

Send {Volume_Up}  ; 마스터 볼륨을 1 눈금 올립니다 (보통 5%).
Send {Volume_Down 3}  ; 마스터 볼륨을 3 눈금 내립니다.
Send {Volume_Mute}  ; 마스터 볼륨을 음소거 하거나 해제합니다.

시스템에 설치된 사운드 장치 (믹서)의 능력을 알아내려면 -- 예를 들어, 컴포턴트 유형과 콘트롤 유형 -- 다음 사운드카드 분석 스크립트를 실행하십시오.

Windows 2000/XP/2003: SoundSet이 한 컴포넌트의 볼륨을 변경할 때, 다른 모든 컴포넌트의 채널도 (예, 왼쪽 오른쪽) 같은 레벨로 설정됩니다. 다른 말로, 이전에 "평형"을 벗어난 값이 설정되었다면 모두 사라집니다. WAVE 컴포넌트에 대하여 이를 피하려면 대신에 SoundSetWaveVolume을 사용하면 됩니다. 이는 볼륨 레벨을 변경할 때 기존의 평형을 유지하려고 시도합니다.

[v1.1.10+]: On Windows Vista and later, SoundSet attempts to preserve the existing balance when changing the volume level.

설정의 현재 값을 열람하려면 SoundGet을 사용하십시오.

SoundGet, SoundGetWaveVolume, SoundSetWaveVolume, SoundPlay

예제

마스터 볼륨에 50%를 설정합니다.

SoundSet, 50

마스터 볼륨을 10% 올립니다.

SoundSet +10

마스터 볼륨을 10% 내립니다.

SoundSet -10

마이크로폰을 음소거합니다.

SoundSet, 1, Microphone, Mute

마스터 음소거를 토글합니다 (반대 상태로 설정합니다).

SoundSet, +1,, Mute

Increases the master bass level by 20% if possible, otherwise an error message is displayed.

SoundSet, +20, Master, Bass
if ErrorLevel
    MsgBox, MASTER에서 BASS 설정을 지원하지 않습니다.

사운드카드 분석. 다음 스크립트를 사용하면 사운드카드의 능력을 알아볼 수 있습니다 (컴포넌트 유형과 콘트롤 유형). 그 결과를 간단한 ListView에 보여줍니다. 다른 방법으로, Windows Vista 이후에 (예를 들어 장치의 화면 이름과 같은) 더 자세한 정보를 제공하는 스크립트를 다음 포럼의 주제에서 내려 받을 수 있습니다: https://www.autohotkey.com/board/topic/90877-/

SetBatchLines -1
SplashTextOn,,, Gathering Soundcard Info...

; 아래에서 순수한 숫자는 대부분 아마도 어느 믹서에도 존재하지 않겠지만, 완벽을 기하기 위해 질의합니다.
; 숫자들은 다음 항목에 (순서대로) 상응합니다: CUSTOM, BOOLEANMETER, SIGNEDMETER, PEAKMETER,
; UNSIGNEDMETER, BOOLEAN, BUTTON, DECIBELS, SIGNED, UNSIGNED, PERCENT, SLIDER, FADER, SINGLESELECT, MUX,
; MULTIPLESELECT, MIXER, MICROTIME, MILLITIME
ControlTypes := "VOLUME,ONOFF,MUTE,MONO,LOUDNESS,STEREOENH,BASSBOOST,PAN,QSOUNDPAN,BASS,TREBLE,EQUALIZER,0x00000000, 0x10010000,0x10020000,0x10020001,0x10030000,0x20010000,0x21010000,0x30040000,0x30020000,0x30030000,0x30050000,0x40020000,0x50030000,0x70010000,0x70010001,0x71010000,0x71010001,0x60030000,0x61030000"

ComponentTypes := "MASTER,HEADPHONES,DIGITAL,LINE,MICROPHONE,SYNTH,CD,TELEPHONE,PCSPEAKER,WAVE,AUX,ANALOG,N/A"

; ListView를 생성하고 메인 회돌이를 위해 준비를 합니다:
Gui, Add, ListView, w400 h400 vMyListView, Component Type|Control Type|Setting|Mixer
LV_ModifyCol(4, "Integer")
SetFormat, Float, 0.2  ; Limit number of decimal places in percentages to two.

Loop  ; 시스템에 존재하는 각 믹서 번호에 대하여, 그의 능력을 질의합니다.
{
    CurrMixer := A_Index
    SoundGet, Setting,,, %CurrMixer%
    if (ErrorLevel = "Can't Open Specified Mixer")  ; 이 에러만 아니면 믹서가 존재한다는 뜻입니다.
        break

    ; 이 믹서에 존재하는 각 컴포넌트 유형에 대하여, 그의 실체와 콘트롤 유형을 질의합니다:
    Loop, parse, ComponentTypes, `,
    {
        CurrComponent := A_LoopField
        ; 먼저 이 컴포넌트 유형이 믹서에 존재하는지 점검합니다:
        SoundGet, Setting, %CurrComponent%,, %CurrMixer%
        if (ErrorLevel = "Mixer Doesn't Support This Component Type")
            continue  ; 다음 콤포넌트 유형으로 나아가기 위해 새 반복을 시작합니다.
        Loop  ; 이 컴포넌트 유형의 각 실체에 대하여, 그의 콘트롤 유형을 질의합니다.
        {
            CurrInstance := A_Index
            ; 먼저 이 컴포넌트의 실체가 믹서에 존재하는지 점검합니다:
            SoundGet, Setting, %CurrComponent%:%CurrInstance%,, %CurrMixer%
            ; 다음의 에러 두 개를 모두 점검하면 이 스크립트를 예전 버전에서도 실행시킬 수 있습니다:
            if ErrorLevel in Mixer Doesn't Have That Many of That Component Type,Invalid Control Type or Component Type
                break  ; 이 콤포넌트 유형의 실체가 없습니다.
            ; 이 컴포넌트의 실체에 존재하는 각 콘트롤 유형의 현재 설정을 얻습니다:
            Loop, parse, ControlTypes, `,
            {
                CurrControl := A_LoopField
                SoundGet, Setting, %CurrComponent%:%CurrInstance%, %CurrControl%, %CurrMixer%
                ; 다음의 에러 두 개를 모두 점검하면 이 스크립트를 예전 버전에서도 실행시킬 수 있습니다:
                if ErrorLevel in Component Doesn't Support This Control Type,Invalid Control Type or Component Type
                    continue
                if ErrorLevel  ; 생각지 못한 에러입니다. 그래서 그 결과에 보여줍니다.
                    Setting := ErrorLevel
                ComponentString := CurrComponent
                if (CurrInstance > 1)
                    ComponentString := ComponentString ":" CurrInstance
                LV_Add("", ComponentString, CurrControl, Setting, CurrMixer)
            }  ; 각 콘트롤 유형에 대하여.
        }  ; 각 컴포넌트 실체에 대하여.
    }  ; 각 컴포넌트 유형에 대하여.
}  ; 각 믹서에 대하여.

Loop % LV_GetCount("Col")  ; 그의 내용에 맞게 각 열은 자동으로 크기가 조절됩니다.
    LV_ModifyCol(A_Index, "AutoHdr")

SplashTextOff
Gui, Show
return

GuiClose:
ExitApp