首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量制作音乐

批量制作音乐
EN

Stack Overflow用户
提问于 2020-04-15 08:56:59
回答 1查看 150关注 0票数 1

我想知道是否有一些方法可以用batch来做音乐,而不仅仅是从cmd打开一个mp3文件,而是命令来做笔记或类似的事情。如果真的不知道该怎么做,我理解。

EN

回答 1

Stack Overflow用户

发布于 2020-04-15 10:41:13

batch可以通过创建和启动vbs脚本来播放音乐,以利用内部的windows media player。

注意:在下面的所有脚本中,变量%sounds%表示您的声音脚本所在的文件夹,必须对其进行定义。

播放音乐的核心是以下批处理脚本:

代码语言:javascript
复制
@Echo off & REM MusicPlayer.bat

    Set "MusicPath=%~1" & REM Full Path for the music file
    Set "vol=%~2" & REM Volume as number between 0 and 100
    Set "LoopTF=%~3" & REM 'paramater 3 as 'true' or 'false' determines if the track is to be looped.

    (
    PUSHD %sounds%
    %= Change to the directory your sound files are located =%)

::: Ensure no Conflict with the Previous Script.

    IF exist PlayMusic.vbs (
    DEL PlayMusic.vbs
    )

::: Creates a vbs Script to launch the music (Occurs without any visual indication or prompting)

    (
    echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
    echo Sound.URL = "%MusicPath%"
    echo Sound.settings.volume = %vol%
    echo Sound.settings.setMode "loop", %LoopTF%
    echo Sound.Controls.play
    echo While Sound.playState ^<^> 1
    echo      WScript.Sleep 100
    echo Wend
    echo Sound objTS = Nothing 'Destroy the object.
    )>PlayMusic.vbs

    start /min PlayMusic.vbs

    (
    POPD
    %= Return to your Previous Directory =%)
::: Exit the Launcher and return to Previous batch program.

    GOTO :EOF

如上所述,使用3个参数调用上述脚本。

另一个Vbs可用于监控批次状态,并在批次关闭时调用批次脚本停止音乐:

代码语言:javascript
复制
@Echo off & REM Monitor.bat

(
ECHO Set objWMIService = GetObject ("winmgmts:"^)
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO DO while proc.count ^> 0
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO if proc.count ^< 1 then exit do
ECHO wscript.sleep 1500
ECHO loop
ECHO Set WshShell=createobject("wscript.shell"^)
ECHO WshShell.run "%sounds%\KillMusic.bat", 0, true
)>%sounds%\MusicMonitor.vbs

start %sounds%\MusicMonitor.vbs
Goto :EOF

上面的脚本创建了一个隐藏的vbs,它通过objWMIService.ExecQuery获取cmd.exe的实例数量。这在循环期间发生,中断条件为0打开cmd.exe窗口。休眠内置于循环中,以减少对WMI服务的调用频率,因为这些调用非常耗费资源。当发生循环中断时,它会以隐藏状态启动killmusic.bat程序。

当vbs监视器确定Cmd.exe不再运行时,可以直接在您的退出标签中调用下面的脚本"KillMusic.bat“。DoMonitor是一个在调用killmusic之前在主脚本中更改的变量。1表示应重新启动监视器,当killmusic.bat停止当前播放的歌曲以开始一首新歌时使用。Monitor是一个包含Monitor.bat路径的变量

代码语言:javascript
复制
@ECHO OFF & REM KillMusic.bat

    taskkill /pid WScript.exe /f /t >nul

    IF exist "%sounds%\PlayMusic.vbs" (
        DEL /Q "%sounds%\PlayMusic.vbs"
    )

    Timeout 1 > nul

    IF "%DoMonitor%"=="1" GOTO reset

GOTO :EOF

:reset

    CALL "%Monitor%"

GOTO :EOF

These three programs can be seen in effect here.

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

https://stackoverflow.com/questions/61219637

复制
相关文章

相似问题

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