首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过批处理文件随机化声音?

如何通过批处理文件随机化声音?
EN

Stack Overflow用户
提问于 2018-12-09 20:21:51
回答 2查看 208关注 0票数 0

我正在批量编写这个无害的程序,但我在声音有效负载的中间遇到了一个问题。无论随机变量是什么,它都会永远播放相同的声音(我确实打算让它循环)。下面是我的代码:

代码语言:javascript
复制
SET /A RAND=%RANDOM% %%5
echo %RAND%
if %RAND%==0 set file="\Windows Exclamation.wav"
if %RAND%==1 set file="\tada.wav"
if %RAND%==2 set file="\Windows Critical Stop.wav"
if %RAND%==3 set file="\Windows Error.wav"
if %RAND%==4 set file="\Windows Background.wav"
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
  echo Sound.URL = %file%
  echo Sound.Controls.play
  echo do while Sound.currentmedia.duration = 0
  echo wscript.sleep 100
  echo loop
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs
attrib +h +s sound.vbs
start /min sound.vbs
ping localhost -n 1 >NUL
goto top
EN

回答 2

Stack Overflow用户

发布于 2018-12-17 01:46:10

只要稍作改动,vbs脚本就会接受一个参数,这样你就不必为每个声音重写sound.vbs

代码语言:javascript
复制
@echo off
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
  echo Sound.URL = WScript.Arguments(0^)
  echo Sound.Controls.play
  echo do while Sound.currentmedia.duration = 0
  echo wscript.sleep 100
  echo loop
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000
) >sound.vbs

:top
SET /A RAND=%RANDOM% %%5
if %RAND%==0 set "file=C:\Windows\media\Windows Exclamation.wav"
if %RAND%==1 set "file=C:\Windows\media\tada.wav"
if %RAND%==2 set "file=C:\Windows\media\Windows Critical Stop.wav"
if %RAND%==3 set "file=C:\Windows\media\Windows Error.wav"
if %RAND%==4 set "file=C:\Windows\media\Windows Background.wav"
echo %RAND% %file%    
start /min sound.vbs "%file%"
timeout 2 >nul
goto :top
票数 1
EN

Stack Overflow用户

发布于 2018-12-13 20:39:10

属性+r (attrib +r命令)使输入的文件为只读(然后不可能删除/刷新/重写),因此,是第一个文件,在所有时间选择第一个wav,然后执行,不会改变,因为不能通过设置命令attrib +r来“编辑”。

代码语言:javascript
复制
@echo on & setlocal EnableDelayedExpansion

:: This is for write a new .vbs with new sound selected on loop:
( <nul dir /a .\sound.vbs && attrib -h -s .\sound.vbs & del /q /f .\sound.vbs ) 2>nul >nul

:_loop

:: Option [1] autentic random variable limited by 0-4 range by using: Set /a _rand=%random% * 5 / 32768 
:: Option [2] take last unit from millisecons number in time by using: Set _rand=%time:~-1%

Set /a _rand=!time:~-1!

if ["!_rand!"] gtr ["4"] (

     goto :_loop

    ) else (

    :: I´m not sure the of "\" in file path, by I've change to ".\" for test the wav's files in my folder:
    if ["!_rand!"]==["0"] set _file=".\Windows Exclamation.wav"
    if ["!_rand!"]==["1"] set _file=".\tada.wav"
    if ["!_rand!"]==["2"] set _file=".\Windows Critical Stop.wav"
    if ["!_rand!"]==["3"] set _file=".\Windows Error.wav"
    if ["!_rand!"]==["4"] set _file=".\Windows Background.wav"

    )

(

( 
echo/Set Sound = CreateObject^("WMPlayer.OCX.7"^)
echo/Sound.URL = !_file!
echo/Sound.Controls.play
echo/do while Sound.currentmedia.duration = 0
echo/wscript.sleep 100
echo/loop
echo/wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000)  
)>.\sound.vbs 

) && ( 

start "" /min wscript /nologo .\sound.vbs

:: add attribute after wscript use the file, or file .vbs can be not will not founded by wscript:
attrib +h +s .\sound.vbs

ping localhost -n 1 >NUL

) || ( 

echo/ E R R O R :  File .vbs not genereted^^! 

)

goto :top 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53692243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档