1

Тема: AHK: Определение звука

Приветствую всех.
Помогите с написанием скрипта который будет срабатывать на звук. Посмотрев чутка форум нашёл очень похожий по смыслу работы, но он срабатывает на любой звук в диапазоне от 1 до 100. А нужен который будет срабатывать на более высокий диапазон (пример от 50 до 100).

#Include VA.ahk
#Persistent
audioMeter := VA_GetAudioMeter()
VA_IAudioMeterInformation_GetMeteringChannelCount(audioMeter, channelCount)
VarSetCapacity(peakValues, channelCount*4)
SetTimer, GetPeakValues, 100
return

GetPeakValues:
    VA_IAudioMeterInformation_GetChannelsPeakValues(audioMeter, channelCount, &peakValues)
    loop %channelCount%
        if NumGet(peakValues, A_Index*4-4, "float") {
            MsgBox раздался звук
            break
        }
    return

Задумка такая.
1. Происходит запуск скрипта
2. Начинается прокликивание ЛКМ с определённой частотой (20мс)
3. При скачке выходного звука в диапазоне от 50 до 100 происходит нажатие на Enter

2

Re: AHK: Определение звука

[out] afPeakValues
Pointer to an array of peak sample values. The method writes the peak values for the channels into the array. The array contains one element for each channel in the stream. The peak values are numbers in the normalized range from 0.0 to 1.0.

https://learn.microsoft.com/en-us/windo … peakvalues

3

Re: AHK: Определение звука

Malcev
Я настолько камень что не знаю как это использовать

4

Re: AHK: Определение звука

NumGet(peakValues, A_Index*4-4, "float")

Тут вы получаете значение от 0 до 1.

5 (изменено: __Михаил__, 2023-02-03 20:26:28)

Re: AHK: Определение звука

baraban, Надеюсь этот код поможет понять что к чему:

Wait := 500	; Таймер обновления звука.
Rou := 3	; Округление после точки.
VolMax := 0.5	; Макс. громкость.
Return


F2::	; Запуск / Остановка.
KeyWait, % A_ThisHotkey, U
If !AudioMeter{
 AudioMeter := VA_GetAudioMeter(), VA_IAudioMeterInformation_GetMeteringChannelCount(AudioMeter, ChannelCount)
 VarSetCapacity(PeakValues, ChannelCount*4)
}
SetTimer, GetPeakValues, % ((SW := !SW) = 1 ? Wait : "Off")
ToolTip
ToolTip,,,,2
Return


GetPeakValues:
 SoundGet, Vol
 Vol := Round(Vol), VA_IAudioMeterInformation_GetChannelsPeakValues(AudioMeter, ChannelCount, &PeakValues)
 Loop % ChannelCount{
  If ((V := Round(NumGet(PeakValues, A_Index*4-4, "float"), Rou)) >= VolMax){
   ToolTip % "Канал: " A_Index ", Громкость: " V, 100, 0, 2
   Break
  }
  Else
   ToolTip,,,,2
 }
 ToolTip % "Left:`t" Round(NumGet(PeakValues, 1*4-4, "float"), Rou) "`nRight:`t" Round(NumGet(PeakValues, 2*4-4, "float"), Rou), 0, 0
Return
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6 (изменено: baraban, 2023-02-04 03:13:52)

Re: AHK: Определение звука

__Михаил__
https://i.imgur.com/MmDeQXz.jpg

7 (изменено: __Михаил__, 2023-02-04 06:44:04)

Re: AHK: Определение звука

baraban Импорт библиотеки 'VA.ahk' в код добавить нужно. У меня она в папке 'Lib', поэтому проблем нет.

#Include VA.ahk
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

8

Re: AHK: Определение звука

__Михаил__
Спасибо.