1 (изменено: Arigato, 2025-09-06 15:50:51)

Тема: CMD/BAT: звуки (3 разных + бонус: азбука Морзе)

Два примера, как вывести звук из батника:

@ echo off
setlocal enabledelayedexpansion

pause
echo Звуковой сигнал №1
call :beep1

pause
echo Звуковой сигнал №2
call :beep2

exit /b

:: Звуковой сигнал через символ с кодом 7 (Alt + 07)
:beep1
setlocal
0<nul set /p =[BEL]
endlocal & exit /b

:: Звуковой сигнал через choice
:beep2
echo 0y | choice /c y /n>nul
exit /b

[BEL] - это непечатный символ с кодом 7. В форум его вставить нельзя, так что работающий пример качайте из вложения.

Подпрограмма beep1 выводит звук через символ с кодом 7.
Подпрограмма beep2 выводит звук через команду choice.

Не факт что везде будет работать, не проверял, но у меня оба метода работают и звуки разные.


Произвольный звуковой сигнал

Еще один вариант воспроизвести звук, причем произвольный:

powershell -c "[console]::beep(800,200)"

800 - частота в Гц (от 37 до 32767).
200 - продолжительность в мс (от 1).


Сигнал SOS

А вот и пример реализации сигнала SOS через звуки и мигание экраном:

@ echo off
setlocal enabledelayedexpansion

cls
title Сигнал SOS

:sos
call :M_S
call :M_O
call :M_S
call :pause 2
echo.
goto sos

exit /b

:: O: ---
:M_O
call :dash
call :dash
call :dash
exit /b

:: S: ...
:M_S
call :dot
call :dot
call :dot
exit /b

:: Точка (Морзе)
:dot
setlocal
0<nul set /p =.
color f0
call :beep2
color 07
endlocal & exit /b

:: Тире (Морзе)
:dash
setlocal
0<nul set /p =-
color f0
call :beep2
call :pause
color 07
endlocal & exit /b

:: Звуковой сигнал через choice
:beep2
echo 01 | choice /c 1 /n>nul
exit /b

:: Задержка в сек (0 - короткая задержка)
:pause
setlocal
set t=%1
if "%t%"=="" set t=0
timeout /t %t% >nul
endlocal & exit /b

Так как звук подается вызовом подпрограммы beep2, которая работает через choice, то и непечатных символов тут нет. Можно копировать код прямо с форума.

Обсуждение тут - CMD/BAT: звуки (2 разных + бонус: сигнал SOS)

Post's attachments

beep.cmd 320 b, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: CMD/BAT: звуки (3 разных + бонус: азбука Морзе)

Имитация сообщения азбукой Морзе:

@ echo off
setlocal enabledelayedexpansion

cls
title Morse

call :morse_init

:sos
call :morse "SOS ALEX"
call :morse "POSITION 34N 75S"
goto sos

:: Азбука Морзе
:morse
setlocal
set "str=%~1"
if not defined str endlocal & exit /b
set "str=%str: =_%"
set "i=0"
:morse_1
set "c=!str:~%i%,1!"
if not defined c (
	call :pause 2
	echo.
	endlocal & exit /b
)
0<nul set /p "=%c%"
if "%c%"=="_" (
	call :pause 1
) else (
	call :morse_echo "%c%"
	call :pause
	call :pause
)
set /a "i+=1"
goto morse_1

:: Вывод заданного символа
:morse_echo
setlocal
set "m=!M_%~1!"
if not defined m endlocal & exit /b
set "i=0"
:morse_echo_1
set "c=!m:~%i%,1!"
if not defined c endlocal & exit /b
if "%c%"=="." call :morse_dot
if "%c%"=="-" call :morse_dash
set /a "i+=1"
goto morse_echo_1

:: Таблица азбуки Морзе
:morse_init
set "M_A=.-"
set "M_B=-..."
set "M_C=-.-."
set "M_D=-.."
set "M_E=."
set "M_F=..-."
set "M_G=--."
set "M_H=...."
set "M_I=.."
set "M_J=.---"
set "M_K=-.-"
set "M_L=.-.."
set "M_M=--"
set "M_N=-."
set "M_O=---"
set "M_P=.--."
set "M_Q=--.-"
set "M_R=.-."
set "M_S=..."
set "M_T=-"
set "M_U=..-"
set "M_V=...-"
set "M_W=.--"
set "M_X=-..-"
set "M_Y=-.--"
set "M_Z=--.."
set "M_1=.----"
set "M_2=..---"
set "M_3=...--"
set "M_4=....-"
set "M_5=....."
set "M_6=-...."
set "M_7=--..."
set "M_8=---.."
set "M_9=----."
set "M_0=-----"
exit /b

:: Точка (Морзе)
:morse_dot
color f0
powershell -c "[console]::beep(700,100)"
color 07
exit /b

:: Тире (Морзе)
:morse_dash
color f0
powershell -c "[console]::beep(700,300)"
color 07
exit /b

:: Задержка в сек (0 - короткая задержка)
:pause
if "%~1"=="" (
	timeout /t 0 >nul
) else (
	timeout /t %~1 >nul
)
exit /b