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
Telegram jollycoder

14

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

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

15

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (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 v20H2, AutoHotkey_L v1.1.33.09 (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 v20H2, AutoHotkey_L v1.1.33.09 (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
Telegram jollycoder

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
Telegram jollycoder

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
Telegram jollycoder

27

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)
}

Добрый день! Перестал работать, создаётся файл в 1кб, win8.1x64, микро разные подключал.

28

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

Ну и бросьте, с микрофона лучше записывать специальным софтом, там обычно сразу фоновый шум убирается.

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

29 (изменено: __Михаил__, 2022-01-22 02:48:48)

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

Тоже качество крайне низкое делает.

+ открыть спойлер

Format                      : Wave
File size                   : 412 KiB
Duration                    : 38s 277ms
Overall bit rate mode       : Constant
Overall bit rate            : 88.2 Kbps

Audio
Format                      : PCM
Format settings, Endianness : Little
Format settings, Sign       : Unsigned
Codec ID                    : 1
Duration                    : 38s 277ms
Bit rate mode               : Constant
Bit rate                    : 88.2 Kbps
Channel(s)                  : 1 channel
Sampling rate               : 11.025 KHz
Bit depth                   : 8 bits
Stream size                 : 412 KiB (100%)

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

30 (изменено: svoboden, 2022-01-22 13:27:44)

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

У меня нормальное качество выдает, если настроить вот этот пример: http://rosettacode.org/wiki/Record_sound#AutoHotkey.

31

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

svoboden, в смысле, качество лучше, чем с этой функцией? Тогда расскажите, как именно вы настраивали свой пример, чтобы повысить качество.

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

32 (изменено: svoboden, 2022-01-22 14:31:51)

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

teadrinker пишет:

чем с этой функцией

Не то, чтобы лучше. Я тоже поначалу использовал эту функцию, но никому не удалось запустить пример. Хотя никто не жаловался, что пример плохой. А настраивал так эту функцию http://rosettacode.org/wiki/Record_sound#AutoHotkey.

MCI_SendString("set " . name . " time format ms wait")
MCI_SendString("set " . name . " bitspersample 44000 wait")
MCI_SendString("set " . name . " channels 2 wait")
MCI_SendString("set " . name . " samplespersec 22000 wait")
MCI_SendString("set " . name . " alignment 1 wait")
MCI_SendString("set " . name . " bytespersec 22000 wait")

Немного не правильно, но качество улучшилось с 88 до 176 кбит сек.

33

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

Я не очень понял, как закомментированные строки могут что-то настроить?

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

34 (изменено: svoboden, 2022-01-22 14:31:12)

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

Их раскомментировать нужно. Поправил.

35

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

Немного улучшилось, но не принципиально.
Вот данные файла без этих настроек:

Bit rate      : 88.2 kb/s
Channel(s)    : 1 channel
Sampling rate : 11.025 kHz
Bit depth     : 8 bits

Вот с настройками:

Bit rate      : 88.2 kb/s
Channel(s)    : 1 channel
Sampling rate : 16.0 kHz
Bit depth     : 8 bits

Как видно, битрейт не изменился, изменился только Sampling rate. Но главная проблема — фоновый шум — осталась.

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

36 (изменено: svoboden, 2022-01-22 15:21:15)

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

А где определили эти данные? У меня в проводнике определяется как 176 кбит. И просто на слух лучше качество. У меня формат wav. Mediainfo:

176.4 kb/s, 22.0 kHz, 8 bits, 1 channel

37 (изменено: inseption86, 2022-01-22 15:29:48)

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)
}

Оказывается всё работает вне рабочего компьютера. Стоит Kapersky Security и Secret Net, но почему то софт, в котором используется микрофон, работает.   Fmedia через cmd тоже блочит.

38

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

teadrinker пишет:

с микрофона лучше записывать специальным софтом, там обычно сразу фоновый шум убирается.

Можно и без специального софта шум убрать.

DeepNoiseSuppression 19
A noise suppression effect. This type differs from NoiseSuppression in that it is a more advanced AI / machine learning based noise suppression effect.

https://docs.microsoft.com/en-us/uwp/ap … inrt-22000

39

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

Спасибо, понятно, что есть какие-то api. Наверно, не только через UWP можно. Но к данному способу это не прикрутить.

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

40

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

svoboden пишет:

А где определили эти данные?

Тоже через Mediainfo. Но я на семёрке пробовал, может на десятке как-то битрейт повыше выходит.

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

41 (изменено: svoboden, 2022-01-23 01:49:28)

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

Я тоже на семерке пробовал, у меня высокий битрейд получается.

42

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

teadrinker пишет:

понятно, что есть какие-то api. Наверно, не только через UWP можно

Можно через Microsoft Media Foundation, но там не используется machine learning, как я понимаю.
https://docs.microsoft.com/en-us/window … capturedmo

43 (изменено: svoboden, 2022-01-22 18:12:48)

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

Да, через Microsoft Media Foundation звук чистый получается. Но и вариант через MCI тоже подошел по качеству.

44

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

А вы уже код успели написать?

45

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

Нет, проверить только.

46

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

А в чем проверяли?

47

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

Так уже был на форуме скрипт, который через Microsoft Media Foundation записывает звук.

48

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

Если вы имеете в виду мой скрипт, то я в нем не использовал Voice Capture DSP, а только Audio Resampler DSP.
Так что неудивительно, что вы не заметили разницы. ))))))))))

49 (изменено: svoboden, 2022-01-22 18:47:37)

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

Так я ничего не замечал, мне просто сказали, что звук чистый .

50

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

Может условия для записи и микрофон хорошие, а может "Кому и кобыла невеста" (c).

51

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

Может, точно не знаю.

52

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)
}

Добрый день! подскажите пожалуйста, как сделать так чтобы файл не перезаписывался, а создавался новый? Желательно чтобы имел время создания в названии.

53

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

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

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

54

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

teadrinker Я пробовал менять путь и название, но у меня создаеться один файл с именем указынным в переменной pathToSaveRec, а как сделать так чтобы создавася каждый раз новый файл, например: record1.wav, record2.wav ...?

55

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

Попробуйте так:

num := 1
while FileExist(pathToSaveRec := A_Desktop . "\record" . num . ".wav")
   num++
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

56

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

teadrinker Почти получилось! создаються файлы, но надо перезагружать скрипт, чтобы файлы создавались, иначе последний перезаписываеться.

57

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

CapsLock::
   num := 1
   while FileExist(pathToSaveRec := A_Desktop . "\record" . num . ".wav")
      num++
   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
Telegram jollycoder

58

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

teadrinker Спасибо огромное, за помощь!