1

Тема: AHK: Запись с микрофона

Здравствуйте, ребят.
Интересуюсь, а есть ли у кого код, который при удерживании какую-либо кнопку, записывал голос пользователя с микрофона?
В гугле не нашел, как ни странно.
Заранее спасибо за помощь)

2

Re: AHK: Запись с микрофона

В Windows XP есть стандартная программа "Звукозапись" (sndrec32.exe). Пробел нажал - запись началась. Ещё раз нажал - прекратилась. Ещё раз нажал - продолжилась. Остаётся при помощи AutoHotkey прикрутить удержание. Там кнопки стандартные "button",  скорее всего командой ControlSend получится без труда реализовать.

3

Re: AHK: Запись с микрофона

ypppu, спасибо большое за ответ! Но ведь это в XP, и тут два вопроса:
1) А на других ОС также все работает?
2) Где сохраняется файл? И можно ли изменить параметры сохранения?

4

Re: AHK: Запись с микрофона

1) В других ОС не имею возможности посмотреть.
2) Та программка позволяет указывать место для сохранения.

5

Re: AHK: Запись с микрофона

ypppu, посмотрел в гугле, вроде бы на остальных ОС ее скачивать надо, а возможно ли как-то через COMObject сделать, или что-то подобное? Ну хотелось бы либо через DLL, либо через готовый класс, либо через подключение COM.

6

Re: AHK: Запись с микрофона

Если не устраивают сторонние программы, поищите на англоязычном форуме. У нас вроде не было ещё такой темы.

7

Re: AHK: Запись с микрофона

ypppu, поискал, не нашел(

8

Re: AHK: Запись с микрофона

В Win7 sndrec32 заменили на soundrecorder.

9

Re: AHK: Запись с микрофона

Может, Audacity для этой цели подойдет.

10

Re: AHK: Запись с микрофона

svoboden, не хотелось бы ничего качать для программы, чтобы пользователи могли запустить только мою программу и все(

11

Re: AHK: Запись с микрофона

Если уж очень хочется через АПИ, то:

name := "sample"
waitsec := 5
Tooltip Recording %name%.wav
MCI_SendString("close all wait")
MCI_SendString("open new type waveaudio alias " . name)
MCI_SendString("set " . name . " time format ms wait")
;MCI_SendString("set " . name . " bitspersample 16 wait")
;MCI_SendString("set " . name . " channels 1 wait")
;MCI_SendString("set " . name . " samplespersec 16000 wait")
;MCI_SendString("set " . name . " alignment 1 wait")
;MCI_SendString("set " . name . " bytespersec 8000 wait")
MCI_SendString("record " . name)
Sleep waitsec*1000
MCI_SendString("stop " . name . " wait")
MCI_SendString("save " . name . " """ . name . ".wav""")
Tooltip Finished ... Playing
MCI_SendString("delete " . name)
MCI_SendString("close " . name . " wait")
MCI_SendString("open """ . name . ".wav"" type waveaudio alias " . name)
MCI_SendString("play " . name . " wait")
MCI_SendString("close " . name . " wait")
Tooltip
Return
 
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

https://msdn.microsoft.com/ru-ru/librar … s.85).aspx

12

Re: AHK: Запись с микрофона

Такой еще есть вариант:

;*********************
;  SRW7.AHK Library  
;     vers 0.0.1     
;     by FredInGA    
;      Forum #53673
;*********************

;SoundRecorder Docs:	http://

SRW7_Open(View) {
	global

	IfNotExist, %A_WinDir%\system32\soundrecorder.exe
	{
		Msgbox,4096,Whoops!, Cannot find Microsoft Sound Recorder!`n`nPlease make sure soundrecorder.exe is located in:`n`n*Drive*:\WINDOWS\System32
		ExitApp
	}

	Run, %A_WinDir%\system32\soundrecorder,,%View%,SRW7pid
	return SRW7pid
}

SRW7_Record() {
	ControlClick, ToolbarWindow324, ahk_class AudioRecorderMainFrameTraits
	return 1
}

SRW7_Stop() {
	ControlClick, ToolbarWindow323, ahk_class AudioRecorderMainFrameTraits
	return 0
}

SRW7_Exit() {
	WinClose, ahk_class AudioRecorderMainFrameTraits
	return 0
}

; recorderSRW7 by fredinga
; Forum # 53673
#Persistent
#SingleInstance FORCE
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance, ignore
DetectHiddenWindows, On
SetTitleMatchMode, 2


;open with "MIN", "MAX", "HIDE" or "" (normal size)
SRW7_Open("HIDE")
SetTimer showRecording,350
SetTimer showRecording,Off
Recording = 0
Step = 0

gui Margin,0,0
gui -MinimizeBox
gui Add,Button, w220   gRecord, Record
gui Add,Button, wp h25  gExit, Exit (Save as .WMA)
Gui, Add, StatusBar,,   Ready
gui, Show,,Sound Recorder Windows 7
Return

Record:
	if (Recording = 0) {
		status := SRW7_Record()
		SetTimer showRecording,On
		gosub, showRecording
		Recording = 1
	}
return

showRecording:
	Step ++
	if (Step = 1)
		SB_SetText("Recording")
	else if (Step = 2)
		SB_SetText("                         Recording")
	else {
		SB_SetText("                                                   Recording")
		Step = 0
	}
return

ESC::
Exit:
GUIClose:
	status := SRW7_Stop()
	SB_SetText("  Saving")
	SRW7_Exit()
	ExitApp
return

, в общем, тут еще посмотри.

13

Re: AHK: Запись с микрофона

У меня вот как-то попроще вышло:

pathToSaveRec := A_Desktop . "\record.wav"  ; путь для сохранения записи

CapsLock::
   Record()
   KeyWait, CapsLock
   Record("stop", pathToSaveRec)
   Return

Record(mode := "start", filePath := "")  {
   commands := { start: ["open new type waveaudio alias recsound", "record recsound"]
               , stop:  ["save recsound " . filePath, "close recsound"] }
   for k, v in commands[mode]
      DllCall("Winmm\mciSendString", Str, v, Str, "", UInt, 0, Ptr, 0)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

14

Re: AHK: Запись с микрофона

Ребят, всем огромное спасибо за помощь! Очень приятно, что многие откликнулись на помощь!
Всем поставлю плюсики, особенная благодарность teadrinker'у!

15

Re: AHK: Запись с микрофона

А кто знает как начинать запись при появлении звуков, и заканчивать при тишине (выставлять какие то определённые уровни и задержки), при этом опционально записывать в один файл.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

16

Re: AHK: Запись с микрофона

http://forum.script-coding.com/viewtopic.php?id=8061

17 (изменено: svoboden, 2017-06-10 00:17:30)

Re: AHK: Запись с микрофона

Так можно отключать/включать микрофон:


1::
SoundSet, +1, Master, Mute, 3
tooltip off
return

18

Re: AHK: Запись с микрофона

Malcev спасибо. Но вот как записывать в один файл?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

19 (изменено: Malcev, 2017-06-13 02:23:18)

Re: AHK: Запись с микрофона

Если хочется записывать уже в существующий файл, то надо перед записью переходить на конец:

path := "C:\test.wav"
MCI_SendString("open " path " type waveaudio alias wav")
MCI_SendString("seek wav to end wait")
MCI_SendString("record wav")
Sleep 5000
MCI_SendString("save wav " path)
Return
 
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
}

Добавил wait.

20

Re: AHK: Запись с микрофона

Спасибо, молодца!

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

21 (изменено: inseption86, 2019-10-05 12:13:28)

Re: AHK: Запись с микрофона

teadrinker

pathToSaveRec := A_Desktop . "\record.wav"  ; путь для сохранения записи

CapsLock::
   Record()
   KeyWait, CapsLock
   Record("stop", pathToSaveRec)
   Return

Record(mode := "start", filePath := "")  {
   commands := { start: ["open new type waveaudio alias recsound", "record recsound"]
               , stop:  ["save recsound " . filePath, "close recsound"] }
   for k, v in commands[mode]
      DllCall("Winmm\mciSendString", Str, v, Str, "", UInt, 0, Ptr, 0)
}

Добр день! Подскажите пож-та, не хочет сохраняться, если брать переменную "var" из GUI. Заранее спасибо!

GuiControlGet, var,, % A_GuiControl

 



msgbox % pathToSaveRec   ; (D:\audio\~Смирнов А.А._05.10.2019.wav)
pathToSaveRec := fold "\~" var "._" timestring ".wav"

22

Re: AHK: Запись с микрофона

Проверяйте, что находится в переменной pathToSaveRec непосредственно перед сохранением в MsgBox.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

23 (изменено: inseption86, 2019-10-05 13:41:10)

Re: AHK: Запись с микрофона

teadrinker

переменная "pathToSaveRec" пустая перед сохранением, если без переменной "var", которая берется из GUi то всё ОК -


pathToSaveRec := fold "\~._" timestring ".wav"

И почему то на одном ПК рабоатет нормально,а на другом "Не удаётся найти микрофон", хотя микрофоны стоят одинаковые, через run, C:\Windows\system32\SoundRecorder.exe также

24

Re: AHK: Запись с микрофона

inseption86 пишет:

переменная "pathToSaveRec" пустая перед сохранением

Перед сохранением в ней должен быть путь к файлу, если пустая — не сохранится.

inseption86 пишет:

на другом "Не удаётся найти микрофон"

Не могу сказать, у меня на разных работает без проблем.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

25

Re: AHK: Запись с микрофона

teadrinker



msgbox % pathToSaveRec  ; ( вот что выдаёт msgbox перед сохранением  - D:\audio\~Смирнов А.А._05.10.2019.wav)

pathToSaveRec := fold "\~" var "._" timestring ".wav"

если убрать переменную var, то всё сохраняет!

26

Re: AHK: Запись с микрофона

Нет, «перед сохранением» означает «непосредственно перед сохранением», а у вас после MsgBox её содержание меняется, в такой проверке смысла нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg