1

Тема: AHK: Скрипт, реагирующий на хлопки

Здравствуйте.
Подскажите пожалуйста.

Как скриптом AHK отреагировать на звук двух хлопков, идущих с коротким промежутком - через микрофон ?

2

Re: AHK: Скрипт, реагирующий на хлопки

Воспользоваться программой распознавания речи.

3

Re: AHK: Скрипт, реагирующий на хлопки

ypppu, а хлопки - это разве речь ?
Вы не могли бы хотя бы примерное название такой программы дать, которая может распознать хлопки ?

4

Re: AHK: Скрипт, реагирующий на хлопки

димитрий2, для програм не существует понятия "речь". Человеческая речь - это набор звуков с определенными свойствами.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5

Re: AHK: Скрипт, реагирующий на хлопки

Что хлопки, что речь - это только колебания воздуха, которые запоминает программа распознавания. Даже сам программа не знает, являются ли те или иные звуки речью. Просто человек задаёт соответствие между данным звуком и набором символов.
Программы есть разные. Одна из наиболее легковесных Dragon dictate (или русифицированная версия - "Горыныч"). Там есть обучение: записываете через микрофон слово (звук), затем заносите в текстовое поле действие (или текстовую строку), которое будет происходить по этому слову (звуку). Желательно одно и то же слово записывать несколько раз с вариациями, поскольку в реальности трудно повторить тот же звук один-в-один.

6

Re: AHK: Скрипт, реагирующий на хлопки

ypppu, нашел программу "Горыныч". В ее описании написано, что это программа распознавания русскоязычной речи и превращения ее в текст.

Подскажите пожалуйста, как звук хлопка - может быть превращен в речь ?
В смысле - каким текстом он может быть описан ?

7

Re: AHK: Скрипт, реагирующий на хлопки

Очень давно им не пользовался. Там есть что-то типа встроенного словаря, но слова можно добавлять вручную. Подключаете микрофон. Нужно найти там в программе запись нового слова. Записываете хлопок. Можете его добавить в словарь как слово "хлопок". Подробности уже не вспомню.

8

Re: AHK: Скрипт, реагирующий на хлопки

ypppu, установил программу "Горыныч v.5", проверил ее работу.

Данная программа не распознает хлопки.
Только речь, да и то еле-еле.

9 (изменено: inseption86, 2019-07-26 20:58:03)

Re: AHK: Скрипт, реагирующий на хлопки

димитрий2

Может это https://www.youtube.com/watch?v=47B3DOmOCeE

10

Re: AHK: Скрипт, реагирующий на хлопки

Вот так можно взять уровень с микрофона.
Источник.
Библиотека.


hMedia:=MCI_Open("new","","type waveaudio")
l_CmdString:="status " . hMedia . " level"

OnExit, ExitSub
Progress, R0-128 B  ,Press Escape to Exit, Microphone Audio Level, Microphone Audio Level,

loop
{
error := MCI_SendString(l_CmdString,l_lpszReturnString)
Progress, %l_lpszReturnString%
}

Esc::ExitApp
ExitSub:
MCI_Close(hMedia)
ExitApp

;#include MCI.ahk ; uncomment if MCI is not in your std-lib


MCI_SendString(p_lpszCommand,ByRef r_lpszReturnString="",p_hwndCallback=0) {
	VarSetCapacity(r_lpszReturnString,512,0)
	Return DllCall("winmm.dll\mciSendString" . (A_IsUnicode ? "W":"A")
		,"Str",p_lpszCommand						;-- lpszCommand
		,"Str",r_lpszReturnString					;-- lpszReturnString
		,"UInt",512									;-- cchReturn
		,A_PtrSize ? "Ptr":"UInt",p_hwndCallback	;-- hwndCallback
		,"Cdecl Int")								;-- Return type
}
; For more intuitive functions, see the MCI library by jballi.
; doc: http://www.autohotkey.net/~jballi/MCI/v1.1/MCI.html
; download: http://www.autohotkey.net/~jballi/MCI/v1.1/MCI.ahk
MCI_Open(p_MediaFile,p_Alias="",p_Flags="")
    {
    Static s_Seq=0

    ;[==============]
    ;[  Parameters  ]
    ;[==============]
    ;-- p_MediaFile
    if p_MediaFile<>new
        {
        ;-- Media file exist?
        IfNotExist %p_MediaFile%
            {
            outputdebug,
               (ltrim join`s
                End Func: %A_ThisFunc%: The media file can't be
                found.  Return=0
               )

            return false
            }


        ;-- "Type" flag not defined?
        if InStr(A_Space . p_Flags . A_Space," type ")=0
            {
            ;-- Registered file extension?
            SplitPath p_MediaFile,,,l_Extension


            ;-- Which OS type?
            if A_OSType=WIN32_NT  ;-- Windows NT4/2000/XP/2003/Vista
                RegRead
                    ,l_Dummy
                    ,HKEY_LOCAL_MACHINE
                    ,SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions
                    ,%l_Extension%
             else
                {
                ;-- Windows 95/98/ME
                iniRead
                    ,l_Value
                    ,%A_WinDir%\win.ini
                    ,MCI Extensions
                    ,%l_Extension%

                if l_Value=ERROR
                    ErrorLevel=1
                }


            ;-- Not found?
            if ErrorLevel
                {
                outputdebug,
                   (ltrim join`s
                    End Func: %A_ThisFunc%: The file extension for this media
                    file is not registered as a valid MCI extension.  Return=0
                   )

                return false
                }
            }


        ;-- Enclose in DQ
        p_MediaFile="%p_MediaFile%"
        }


    ;-- Alias
    if p_Alias is Space
       {
       s_Seq++
       p_Alias=MCIFile%s_Seq%
       }


    ;[===============]
    ;[  Open device  ]
    ;[===============]
    l_CmdString=open %p_MediaFile% alias %p_Alias% %p_Flags% wait
    l_Return:=MCI_SendString(l_CmdString,Dummy)
    if l_Return
        l_Return:=0
     else
        l_Return:=p_Alias


    ;-- Set time format to milliseconds
    if l_Return
        {
        l_CmdString=set %p_Alias% time format milliseconds wait
        MCI_SendString(l_CmdString,Dummy)
        }


    ;-- Return to sender
    return l_Return
    }

MCI_Close(p_lpszDeviceID)
    {
    Static MM_MCINOTIFY:=0x03B9


    ;-- Close device
    l_Return:=MCI_SendString("close " . p_lpszDeviceID . " wait",Dummy)


    ;-- Turn off monitoring of MM_MCINOTIFY message?
    if OnMessage(MM_MCINOTIFY)="MCI_Notify"
        {
        ;-- Don't proceed unless all MCI devices are closed
        MCI_SendString("sysinfo all quantity open",l_OpenMCIDevices)
        if l_OpenMCIDevices=0
            {
            ;-- Disable monitoring
            OnMessage(MM_MCINOTIFY,"")
            }
        }

    return l_Return
    }

Остается только определить два хлопка по уровню, но есть шанс что будут случайные срабатывания (смотря как алгоритм построить, конечно).

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

11

Re: AHK: Скрипт, реагирующий на хлопки

димитрий2, по второму кругу решили?
http://forum.script-coding.com/viewtopic.php?id=14705

12

Re: AHK: Скрипт, реагирующий на хлопки

inseption86 пишет:

Может это https://www.youtube.com/watch?v=47B3DOmOCeE

Близко к этому, но это же не скрипт.
Он как я понял - распознает два резких звуковых всплеска.
Но не отличает хлопок - от других резких звуков.

Здесь вопрос не о громкости двух звуковых возмущений, а об анализе амплитуды звучания.

13

Re: AHK: Скрипт, реагирующий на хлопки

Malcev пишет:

по второму кругу решили?

Ну, научно-технический прогресс - не стоит на месте.
Кто знает, может уже появились какие-нибудь интересные решения, новый свежий взгляд.

14

Re: AHK: Скрипт, реагирующий на хлопки

Датчик хлопка можешь подключить к клавиатуре, например на клавишу Scroll Lock. А на AutoHotkey назначить действие на эту клавишу.

15

Re: AHK: Скрипт, реагирующий на хлопки

Alectric, подскажите - можно ли как-нибудь перехватить звуковой поток в режиме реального времени, чтобы лучше анализировать звуковой спектр исходящий из микрофона ?
Чтобы скрипт среагировал на определенный звуковой спектр, длинной в 2 секунды.

Как это сделано вот в этой программе (сейчас это спектр в виде прямой горизонтальной линии с двумя резкими всплесками):

16

Re: AHK: Скрипт, реагирующий на хлопки

Если вам нужно отличать звуки хлопка от других звуков, например цоканья, то дело опять кончится советом нанимать фрилансера.

17 (изменено: Alectric, 2019-07-26 23:45:53)

Re: AHK: Скрипт, реагирующий на хлопки

димитрий2
Этот скрипт дает только амплитудные значения сигнала, а не частотные. Спектр получить из него не получится. Можно попытаться использовать какую-нибудь DLL от WinAmp'а, к примеру, в которой есть анализатор спектра, но тут я ничего не подскажу.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

18

Re: AHK: Скрипт, реагирующий на хлопки

Alectric пишет:

Можно попытаться использовать какую-нибудь DLL

http://www.un4seen.com/doc/#bass/BASS_C … tData.html

19

Re: AHK: Скрипт, реагирующий на хлопки

Malcev, понятно.
А что это за язык такой ?
И как его использовать в скрипте autoit ?

20

Re: AHK: Скрипт, реагирующий на хлопки

Апи для С.
О вызовах функций в dll написано в справке и по автохотки и по автоит.