<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Управление звуком в windows 7]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=7366</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7366&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Управление звуком в windows 7».]]></description>
		<lastBuildDate>Tue, 17 Feb 2015 08:46:21 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91625#p91625</link>
			<description><![CDATA[<p>Заметил такой факт - при Mute уровень звука меняется не скачкообразно, а плавно примерно за 500-600 мс. Для моих задач это весьма большая пауза &quot;на ровном месте&quot;. Причем такое поведение не только в используемом стороннем софте, а в любых приложениях, видимо это чисто виндовая тема. Подскажите как это побороть, или это никак не исправить?</p>]]></description>
			<author><![CDATA[null@example.com (emmetoya)]]></author>
			<pubDate>Tue, 17 Feb 2015 08:46:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91625#p91625</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87125#p87125</link>
			<description><![CDATA[<p>Я на пример использую бесплатное приложение &quot;Volume2 &quot; . Очень удобно и много функций.<br />Вот - кому интересно <a href="http://www.softportal.com/software-18603-volume2.html">http://www.softportal.com/software-18603-volume2.html</a></p>]]></description>
			<author><![CDATA[null@example.com (Zanoza)]]></author>
			<pubDate>Thu, 09 Oct 2014 17:56:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87125#p87125</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87072#p87072</link>
			<description><![CDATA[<div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p>Насколько я знаю VA.ahk не умеет контролировать уровни приложений - только уровни устройств.</p><div class="quotebox"><cite>emmetoya пишет:</cite><blockquote><p>Если не получится решить так, придется делать обработчик через анализ графики программы типа VU Meter, что ооочень бы не хотелось делать.</p></blockquote></div><p>Необязательно через графику можно найти другой путь. Например, если в названии (или в &quot;контролле&quot;) окна меняется время или вроде того.</p></blockquote></div><p>Пробовал через WinGetText, но подходящего графического с текстовым дублированием не встретил.<br />Вообще сегодня добил эту тему.. в итоге оказалось что сами значения снимаются правильно, неправильно отрабатывал mute. Но сколько это стоило сил и времени...</p>]]></description>
			<author><![CDATA[null@example.com (emmetoya)]]></author>
			<pubDate>Tue, 07 Oct 2014 12:49:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87072#p87072</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87071#p87071</link>
			<description><![CDATA[<p>Насколько я знаю VA.ahk не умеет контролировать уровни приложений - только уровни устройств.</p><div class="quotebox"><cite>emmetoya пишет:</cite><blockquote><p>Если не получится решить так, придется делать обработчик через анализ графики программы типа VU Meter, что ооочень бы не хотелось делать.</p></blockquote></div><p>Необязательно через графику можно найти другой путь. Например, если в названии (или в &quot;контролле&quot;) окна меняется время или вроде того.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Tue, 07 Oct 2014 11:02:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87071#p87071</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87069#p87069</link>
			<description><![CDATA[<p>У меня есть два источника звука в системе - два плеера (два instance одной программы). Мне необходимо определить из какого есть звук, из какого нет.</p><p>За исходный код взят</p><div class="codebox"><pre><code>#Persistent

audioMeter := VA_GetAudioMeter()
VA_IAudioMeterInformation_GetMeteringChannelCount(audioMeter, channelCount)
VarSetCapacity(peakValues, channelCount*4)
SetTimer, GetPeakValues, 100
return

GetPeakValues:
    VA_IAudioMeterInformation_GetChannelsPeakValues(audioMeter, channelCount, &amp;peakValues)
    loop %channelCount%
        ToolTip %v%
    until v := NumGet(peakValues, A_Index*4-4, &quot;float&quot;)
    return</code></pre></div><p>Аргумент A_Index*4-4 в строке может принимать значения 0,4,8,12 и т.д. для своей системы опытным путем выяснил, что аргумент равен 4.<br /></p><div class="codebox"><pre><code>v := NumGet(peakValues, A_Index*4-4, &quot;float&quot;)</code></pre></div><br /><br /><p>Поступаю следующим образом - измеряемый источник в нормальном состоянии, второй mute. Запускаю функцию, которая делает 5 замеров с интервалом в 150 мс и суммирует полученные значения, по результатам делаю вывод звук есть/нет.</p><p>Если выключить оба источника сразу, отрабатывает нормально<br />Если включить оба сразу, так же срабатывает адекватно.<br /><strong>НО если включить один, сделать mute (ползунком громкости или клавишей mute не важно) на второй</strong>.. все равно считываемое значение больше &quot;нуля&quot;, т.е. получается будто сигнал есть. Если закрыть одну из программ, то отрабатывает правильно, реагирует на громкость. Дополнительно контролировал по графическому отображению уровней сигналов в микшере записывающих устройств Windows - Алгоритмически все работает правильно, mute одного из источников действительно оставляет уровень другого.</p><p>Уже пробовал разные варианты - увеличивал интервалы между считыванием уровня громкости (например если mute у плеера происходит не мгновенно, а постепенно), запускал внутри функции проверки, или делал несколько вызовов функции, не получается ни в том ни в другом случае. </p><p>Я не силен в программинге под Win, но складывается такое ощущение, что либо я считываю не тот участок памяти, либо после mute одного из них, уровень на самом деле не изменяется, остается в памяти от второго приложения. Либо это заморочки с тем, что это две копии одного приложения ( хотя работают независимо друг от друга, проверено).</p><p>Поэтому вопросов два - первый по этой проблеме, второй можно ли каким-то образом узнать уровень звукового сигнала, генерируемого определенным окном?<br />Если не получится решить так, придется делать обработчик через анализ графики программы типа VU Meter, что ооочень бы не хотелось делать. </p><br /><div class="codebox"><pre><code>soundTestMux(MuxNumber)
    {
        audioMeter := VA_GetAudioMeter()
        VA_IAudioMeterInformation_GetMeteringChannelCount(audioMeter, channelCount)
        VarSetCapacity(peakValues, channelCount*4)
        VA_IAudioMeterInformation_GetChannelsPeakValues(audioMeter, channelCount, &amp;peakValues)
        
        if MuxNumber = 1
            {
                soundTestMuxVar:= false
                soundLevel := 0
                measureCount := 0
                if !Mux2isMuted
                    muteMux2()
                NumGet(peakValues, 4, &quot;float&quot;)
                while measureCount &lt;5
                    {
                        v := NumGet(peakValues, 4, &quot;float&quot;)
                        soundLevel := soundLevel + v
                        Sleep, 150
                        measureCount++
                    }
                ToolTip, Mux 1 %soundLevel%
                if (soundLevel &gt; 0.000153)
                    {
                        if Mux2isMuted
                            muteMux2()
                        soundTestMuxVar := true
                    }
                        else
                            {
                                                   soundTestMuxVar := false
                                    if Mux2isMuted
                                        muteMux2()
                            }

            Tooltip, RESULT MUX1 %soundTestMuxVar%
            }
        }
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (emmetoya)]]></author>
			<pubDate>Tue, 07 Oct 2014 08:13:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87069#p87069</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87037#p87037</link>
			<description><![CDATA[<div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p><a href="http://forum.script-coding.com/viewtopic.php?id=7654http://forum.script-coding.com/viewtopic.php?id=7654">Вот тема.</a></p></blockquote></div><p>Спасибо большое! Лаконично и по делу))</p>]]></description>
			<author><![CDATA[null@example.com (emmetoya)]]></author>
			<pubDate>Mon, 06 Oct 2014 04:05:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87037#p87037</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87035#p87035</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=7654http://forum.script-coding.com/viewtopic.php?id=7654">Вот тема.</a></p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Mon, 06 Oct 2014 02:12:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87035#p87035</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=87025#p87025</link>
			<description><![CDATA[<p>Кто-нибудь озадачивался вопросом снятия уровня (в условных единицах), например, стерео микшера? Не уровень регулировки, а именно уровень сигнала, по типу того что выдает в графическом виде VU meter и другие подобные программы?<br />Мне нужно запрограммировать наличие или отсутствие звука, но с VA пока не разобрался, т.к. достаточно объемная библиотека.<br />ОС Win 7 x64.</p>]]></description>
			<author><![CDATA[null@example.com (emmetoya)]]></author>
			<pubDate>Sun, 05 Oct 2014 17:32:10 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=87025#p87025</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=71637#p71637</link>
			<description><![CDATA[<p><span style="color: #FF0000">Регулировка баланса громкости в микшере для отдельных приложений <br /> (Функция VA_AppVolume)</span></p><br /><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Пример использования, для регулировки баланса громкости активного окна</div><div class="fancy_spoiler"><div class="codebox"><pre><code>

Step := 10 
CapsLock &amp; WheelDown:: AppVolume(&quot;Vol&quot;, -Step)
CapsLock &amp; WheelUp:: AppVolume(&quot;Vol&quot;, +Step)
CapsLock &amp; MButton:: AppVolume(&quot;Mute&quot;, 2)  

AppVolume(Key, Val) {
    WinGet, Pid, PID, A
    WinGet, Title, ProcessName, ahk_pid %Pid%
    if Title = explorer.exe
        Pid := 0 , Title := &quot;Системные звуки&quot; 
    Res := VA_AppVolume(Key, Val, Pid)
    if Res =
        Res := &quot;Отсутствует в микшере громкости&quot;, Key := &quot;&quot;
    Res := (Key = &quot;Mute&quot;) ? (Res = 0 ? &quot;Mute OFF&quot;: &quot;Mute ON&quot;) : Res
    TrayTip, % Title, % Res, 1, 1
}
</code></pre></div></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Пример включения\отключения остальных звуков, кроме активного окна</div><div class="fancy_spoiler"><div class="codebox"><pre><code>

Launch_Mail:: ExclusiveAppVolume()

ExclusiveAppVolume() {
    Static T, PrPid
    WinGet, Pid, PID, A
    WinGet, ProcessName, ProcessName, ahk_pid %Pid%
    ProcessName := RTrim( ProcessName, &quot;\.exe&quot;)
    StringUpper, ProcessName, ProcessName
    if ProcessName = explorer 
        Pid := 0 , ProcessName := &quot;Системные звуки&quot; 
    ListPid := 0 &quot;|&quot; VA_AppVolume(&quot;ListPid&quot;)
    ListPid := RTrim( RegExReplace( ListPid, &quot;S)(^|\|)&quot; Pid &quot;($|\|)&quot;, &quot;$1&quot;, Count, 1), &quot;|&quot;) 
    If !Count
        Return
    T := PrPid = Pid ? !T : 1
    PrPid := Pid
    Loop, parse, ListPid, | 
        VA_AppVolume(&quot;Mute&quot;, T, A_LoopField) 
    VA_AppVolume(&quot;Mute&quot;, 0, Pid)    
    TrayTip, Exclusive app sound , % &quot;`n&quot; (T ? &quot;Только &quot;&quot;&quot; ProcessName &quot;&quot;&quot;&quot; : &quot;Все звуки включены&quot;) , 1, % T ? 3 : 2
}
</code></pre></div></div></div><p>------------------------------</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Функция VA_AppVolume:</div><div class="fancy_spoiler"><div class="codebox"><pre><code>

    ;   Requirements:
    ;   VA 2.1 - http://www.autohotkey.com/forum/topic23792.html
    ;   https://dl.dropbox.com/u/20532918/Lib/VA-2.2.zip    DownLoad - VA-2.2.zip
    ;   Windows 7
    ;   AutoHotkey_L
    ;
    ;   Currently not included in VA.ahk
    ;
    ;   Post Lexikos - http://www.autohotkey.com/board/topic/78224-possible-to-monitor-and-pseudo-lock-per-app-volume/#entry497079
    ;
    ;   VA_AppVolume

VA_AppVolume(Key, Val = &quot;&quot;, Pid = &quot;!&quot;)
{
    dev := VA_GetDevice()
    if !dev
        Return
    if VA_IMMDevice_Activate(dev, &quot;{77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F}&quot;, 7, 0, mgr) != 0 ; IID_IAudioSessionManager2
        Return ObjRelease(dev)
    ObjRelease(dev)
    if VA_IAudioSessionManager2_GetSessionEnumerator(mgr, enm) != 0
        Return ObjRelease(mgr)
    ObjRelease(mgr)
    VA_IAudioSessionEnumerator_GetCount(enm, count)
    Loop % count
    {
        VA_IAudioSessionEnumerator_GetSession(enm, A_Index-1, ssn)
        VA_IAudioSessionControl2_GetProcessId(ssn, curpid)
        if (Pid = curpid)
        {
            sav := ComObjQuery(ssn, &quot;{87CE5498-68D6-44E5-9215-6DA47EF883D8}&quot;) ; IID_ISimpleAudioVolume
            ObjRelease(ssn)
            if !sav
                Return
            DllCall(NumGet(NumGet(sav+0)+6*A_PtrSize), &quot;uint&quot;, sav, &quot;int*&quot;, mute) ; GetMute
            if (Key = &quot;Vol&quot;)
            {
                DllCall(NumGet(NumGet(sav+0)+4*A_PtrSize), &quot;uint&quot;, sav, &quot;float*&quot;, volume) ; GetVolume
                if mute = 1
                    DllCall(NumGet(NumGet(sav+0)+5*A_PtrSize), &quot;uint&quot;, sav, &quot;int&quot;, 0) ; SetMute
                vol := (volume + Val / 100)
                vol := (vol &gt; 1) ? 1 : (vol &lt; 0) ? 0 : vol
                DllCall(NumGet(NumGet(sav+0)+3*A_PtrSize), &quot;uint&quot;, sav, &quot;float&quot;, vol) ; SetVolume
                Return Round(vol*100), ObjRelease(sav), ObjRelease(enm)
            }
            if (Key = &quot;Mute&quot;)
            {
                if (Val = &quot;Get&quot;)
                    Return mute, ObjRelease(sav), ObjRelease(enm)
                DllCall(NumGet(NumGet(sav+0)+5*A_PtrSize), &quot;uint&quot;, sav, &quot;int&quot;, mute := (Val = 2) ? !mute : Val) ; SetMute
                Return mute, ObjRelease(sav), ObjRelease(enm)
            }
            if (Key = &quot;SetVol&quot;)
            {
                if mute = 1
                    DllCall(NumGet(NumGet(sav+0)+5*A_PtrSize), &quot;uint&quot;, sav, &quot;int&quot;, 0) ; SetMute
                DllCall(NumGet(NumGet(sav+0)+3*A_PtrSize), &quot;uint&quot;, sav, &quot;float&quot;, Val / 100) ; SetVolume
                Return Val, ObjRelease(sav), ObjRelease(enm)
            }
            if (Key = &quot;GetVol&quot;)
            {
                DllCall(NumGet(NumGet(sav+0)+4*A_PtrSize), &quot;uint&quot;, sav, &quot;float*&quot;, volume) ; GetVolume
                Return Round(volume*100), ObjRelease(sav), ObjRelease(enm)
            }
        }
        ObjRelease(ssn)
        ListPid .= curpid &quot;|&quot;
    }
    ObjRelease(enm)

    if (Key = &quot;ListPid&quot;)
    {
        Loop, parse, ListPid, |
            List .= (WinExist(&quot;ahk_pid &quot; A_LoopField) ? A_LoopField &quot;|&quot; : &quot;&quot;)
        Return RTrim( List, &quot;|&quot;)
    }
}
</code></pre></div></div></div><p>Функцию &quot;VA_AppVolume&quot; можно просто добавить в библиотеку &quot;VA&quot;.</p><p>------------------------------</p><p>Приложенный файл - библиотека VA-2.2 с добавленной функцией&nbsp; VA_AppVolume.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 23 Apr 2013 17:23:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=71637#p71637</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62180#p62180</link>
			<description><![CDATA[<div class="quotebox"><cite>Grey пишет:</cite><blockquote><p>По Вашему я делаю, что-либо необдуманно?, там и изменения сохраняются, и окна на Escape закрываются...</p></blockquote></div><p>Извините, я спросил чтобы знать.</p>]]></description>
			<author><![CDATA[null@example.com (1st)]]></author>
			<pubDate>Mon, 30 Jul 2012 20:21:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62180#p62180</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62172#p62172</link>
			<description><![CDATA[<p>По Вашему я делаю, что-либо необдуманно?, там и изменения сохраняются, и окна на Escape закрываются...</p>]]></description>
			<author><![CDATA[null@example.com (Grey)]]></author>
			<pubDate>Mon, 30 Jul 2012 18:05:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62172#p62172</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62170#p62170</link>
			<description><![CDATA[<div class="quotebox"><cite>Grey пишет:</cite><blockquote><p>Process, Close, % PID</p></blockquote></div><p>А изменения сохраняются? Надо наверно чтобы ОК нажимался.</p>]]></description>
			<author><![CDATA[null@example.com (1st)]]></author>
			<pubDate>Mon, 30 Jul 2012 16:14:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62170#p62170</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62167#p62167</link>
			<description><![CDATA[<p>Спасибо огромное!</p>]]></description>
			<author><![CDATA[null@example.com (1st)]]></author>
			<pubDate>Mon, 30 Jul 2012 14:07:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62167#p62167</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62162#p62162</link>
			<description><![CDATA[<div class="codebox"><pre><code>; отладка

SetKeyDelay, 250

Space::
   Run, % &quot;rundll32.exe Shell32.dll,&quot;
      . &quot;Control_RunDLL mmsys.cpl,,recording&quot;,,, PID
   WinWait, % &quot;ahk_pid&quot; PID,, 1
   If !ErrorLevel
   {
      Send, {Down}
      Sleep, 500
      ControlClick, Button3, ahk_class #32770,,, 2
      Sleep, 500
      Send, {CtrlDown}{Tab 2}{CtrlUp}
      Sleep, 500
      ControlSend, msctls_trackbar322
                 , {Left}{Right}
                 , ahk_class #32770
      Sleep, 500
      Process, Close, % PID
      KeyWait, % A_ThisHotkey
      Return
   }
   MsgBox, 262192, % &quot; &quot;, % &quot;Epic fail&quot;, 1
   KeyWait, % A_ThisHotkey
   Return</code></pre></div><div class="codebox"><pre><code>; итоговый

SetKeyDelay, 25

Space::
   Run, % &quot;rundll32.exe Shell32.dll,&quot;
      . &quot;Control_RunDLL mmsys.cpl,,recording&quot;,,, PID
   WinWait, % &quot;ahk_pid&quot; PID,, 1
   If !ErrorLevel
   {
      Send, {Down}
      ControlClick, Button3, ahk_class #32770,,, 2
      Send, {CtrlDown}{Tab 2}{CtrlUp}
      ControlSend, msctls_trackbar322
                 , {Left}{Right}
                 , ahk_class #32770
      Process, Close, % PID
      KeyWait, % A_ThisHotkey
      Return
   }
   MsgBox, 262192, % &quot; &quot;, % &quot;Epic fail&quot;, 1
   KeyWait, % A_ThisHotkey
   Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Grey)]]></author>
			<pubDate>Mon, 30 Jul 2012 13:11:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62162#p62162</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Управление звуком в windows 7]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62159#p62159</link>
			<description><![CDATA[<p>может кто то еще подскажет</p>]]></description>
			<author><![CDATA[null@example.com (1st)]]></author>
			<pubDate>Mon, 30 Jul 2012 13:03:16 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62159#p62159</guid>
		</item>
	</channel>
</rss>
