Batch file 如何在批量游戏的背景下播放音乐

Batch file 如何在批量游戏的背景下播放音乐,batch-file,Batch File,我正在用记事本做一个批量游戏,我想知道如何在后台播放文件音乐 我有这个: @echo off start Music.mp3 Pause 它的作用是启动名为music.mp3的音乐,但它在弹出的单独窗口中启动。我想要的是它开始播放,但不要弹出窗口。我还想让它在我玩游戏时在后台启动和播放 有什么方法可以做到这一点吗?使用命令处理器的内部命令所能得到的最接近的结果只能最小化窗口。如果你真的想“背景”它,脚本将是漫长和混乱的 start /min /c "" Music.mp3 或者: @echo

我正在用记事本做一个批量游戏,我想知道如何在后台播放文件音乐

我有这个:

@echo off
start Music.mp3
Pause
它的作用是启动名为music.mp3的音乐,但它在弹出的单独窗口中启动。我想要的是它开始播放,但不要弹出窗口。我还想让它在我玩游戏时在后台启动和播放


有什么方法可以做到这一点吗?

使用命令处理器的内部命令所能得到的最接近的结果只能最小化窗口。如果你真的想“背景”它,脚本将是漫长和混乱的

start /min /c "" Music.mp3
或者:

@echo off
set "file=track12.mp3"
( 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
cscript.exe //nologo sound.vbs
这将创建一个
vbs
,在没有新窗口的情况下启动音乐


用户Lưu Vĩnh Phúc建议,使用混合脚本可以防止清理问题

@echo off

rem ----START OF BATCH CODE---
rem You can paste your entire batch code down here, and use
rem the cscript command whenever you want to play the sound.

cscript //nologo "%~f0?.wsf" //job:VBS

rem ----END OF BATCH CODE---

<package>
  <job id="JS"> 
    <script language="VBScript">

       Set Sound = CreateObject("WMPlayer.OCX.7")
       Sound.URL = "%file%"
       Sound.Controls.play
       do while Sound.currentmedia.duration = 0
       wscript.sleep 100
       loop
       wscript.sleep (int(Sound.currentmedia.duration)+1)*1000)

  </script>
</job>
@echo关闭
rem----批处理代码的开始---
rem您可以将整个批处理代码粘贴到这里,并使用
每当您想要播放声音时,rem cscript命令。
cscript//nologo“%~f0?.wsf”//job:VBS
rem----批处理结束代码---
设置声音=CreateObject(“WMPlayer.OCX.7”)
Sound.URL=“%file%”
声音、控制、播放
当Sound.currentmedia.duration=0时执行此操作
wscript.sleep 100
环
wscript.sleep(int(Sound.currentmedia.duration)+1)*1000)
基于
WMPlayer.OCX
的脚本。您可以像这样使用它:

mediarunner.bat Music.mp3
基于internet explorer中的
bgsound
标记。它还允许您将音量设置为参数。与WMPlayer.OCX方法不同,不需要安装媒体播放器:

soundPlayer.bat Music.mp3 -50
不幸的是,它只能播放wav文件:

spplayer.bat file.wav

所有脚本都不会创建临时文件。

您也可以像以下脚本一样播放在线音乐:

@echo关闭
标题使用批处理和vbscript收听音乐
模式con cols=60行=3和颜色9E
回声。
要停止音乐,请关闭此窗口
设置“文件”=http://www.chocradios.ch/djbuzzradio_windows.mp3.asx"
设置“vbsfile=%tmp%\%~n0.vbs”
( 
echo Set Sound=CreateObject(“WMPlayer.OCX.7”^)
echo Sound.URL=“%file%”
回声声音。控制。播放
Sound.currentmedia.duration=0时回显do
echo wscript.sleep 100
回音环
echo wscript.sleep(int(Sound.currentmedia.duration^)+1^)*1000
)>%vbsfile%
cscript/nologo%vbsfile%

目前,我自己正在开发一款批量游戏,并已开发出一种类似的解决方案,该解决方案允许在音乐流、音效、音量等方面有很大的灵活性,而不需要看到玩家

但最让我沮丧的是,如果用户退出游戏而没有使用退出选项调用任务,那么设计一个系统来停止音乐播放器。该任务将用于结束vbs脚本及其子进程

最后,我设计了一个vbs脚本来监视cmd.exe,并在没有cmd.exe进程处于活动状态时调用cleanup/Taskkill程序

所有音乐控制都作为后台进程进行,因此只有一个cmd.exe实例在运行游戏操作

创建vbs脚本来控制批处理中的设置是有好处的,因为您可以使用参数来传递关于哪个曲目、什么音量以及是否循环声音/音乐的信息。由于音量是在播放音乐或声音时作为参数发送的,因此这会为播放器打开音量和声音选项,例如有效地静音音效和将音乐音量设置为口味,或者禁用其中一个或两个选项

我的解决方案的代码记录如下:

音乐播放器脚本的摘录:

(
echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
echo Sound.URL = "%~1"
echo Sound.settings.volume = %~2
echo Sound.settings.setMode "loop", %~3
echo Sound.Controls.play
echo While Sound.playState ^<^> 1
echo      WScript.Sleep 100
echo Wend
)>PlayMusic.vbs

start /min PlayMusic.vbs
(
echo Set Sound=CreateObject(“WMPlayer.OCX.7”^)
echo Sound.URL=“%1”
echo Sound.settings.volume=%~2
echo Sound.settings.setMode“loop”,%~3
回声声音。控制。播放
声音时回显。播放状态^1
echo WScript.Sleep 100
回音温德
)>PlayMusic.vbs
开始/分钟播放音乐.vbs

我正在开发自己的游戏,它使用一系列不同的音频类型,包括语音、音乐和音效

<!-- : Begin batch script
@echo off
mode con COLS=55 LINES=40
SETLOCAL ENABLEDELAYEDEXPANSION
color f0
title Flame Eternal
set drive=%~dp0%
CALL :MACROS
%music:t s=Music (entersongname here, no extension)%
pause
call :TIP
::^^call :tip kills the process playing music, but not the batch script
:: When you close down the batch game, the music stops

::Here is how the Talking happens:
SET voice=START /B CSCRIPT //NOLOGO "%~f0?.wsf" //JOB:Voice "%talk%" Û
%voice:Û=0%
::^^^^^^^^YOu need the %voice:Û=0%underneath the command. Where it says %talk%, just put the sentence you want read.

::for sfx, use 
%music:t s=sound (entersongname here, no extension)%
::Do not put .mp3 at the end :-)


:TIP
TASKKILL /F /IM CSCRIPT.exe >NUL
GOTO :EOF

:MACROS
SET music=START /B CSCRIPT //NOLOGO "%~f0?.wsf" //JOB:t s.mp3
SET ^"LF=^

^" Above empty line is required - do not remove

GOTO :EOF
----- Begin wsf script --->
<package>
  <job id="Sound">
    <script language="VBScript">
      Set args = WScript.Arguments
      Set Sound = CreateObject("WMPlayer.OCX.7")
      Sound.URL = args.Item(0)
      Sound.Controls.play
      do while Sound.currentmedia.duration = 0
      Wscript.sleep 100
      loop
      Wscript.sleep (int(Sound.currentmedia.duration)+1)*1000
    </script>
  </job>
  <job id="Music">
    <script language="VBScript">
      Set args = WScript.Arguments
      Set Sound = CreateObject("WMPlayer.OCX.7")
      Sound.URL = args.Item(0)
      Sound.settings.volume = 100
      Sound.settings.setMode "loop", True
      Sound.Controls.play
      While Sound.playState <> 1
      WScript.Sleep 100
      Wend
    </script>
  </job>
  <job id="Voice">
    <script language="VBScript">
      Option Explicit
      Dim SpeakV, args
      Set args = WScript.Arguments
      Set SpeakV = CreateObject("SAPI.spVoice")
      Set SpeakV.Voice = SpeakV.GetVoices.Item (args.Item(1))
      SpeakV.Speak args.Item(0)
    </script>
  </job>
</package>

start/min
是纯批量中最接近的。您可以使用任何命令行mp3播放器,在需要时启动,然后通过TaskKill停止。谢谢!我唯一的问题是你的代码里写着:设置“file=track12.mp3”。file=track12我要用我的MP3文件替换它吗?正确。请注意,这在较新的Windows上可能不起作用(我还没有测试过,但Windows Media player似乎已经过时了10)好的,我会这样做A会更好,以后你不需要清理vbs文件嘿,我在你的脚本中发现了另一件奇怪的事情
/nologo
应该是
//nologo
。但这两种方法都有效。。。
set drive=%cd:~0,2%
cd %drive%\Dude\Desktop
 ::or if the file is in a subdirectory, like a music folder on your desktop:

cd "%~dp0%\Music"