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

时间:2017-08-24 04:31:53

标签: batch-file

我在记事本中进行批量游戏,我想知道如何在后台播放文件音乐。

我有这个:

@echo off
start Music.mp3
Pause

它的作用是启动我的名为Music.mp3的音乐,但它会在弹出的单独窗口中启动。我想要的是它开始播放,但不会弹出窗口。我也希望它在我玩游戏时在后台开始播放。

我能以任何方式做到这一点吗?

5 个答案:

答案 0 :(得分:1)

使用命令处理器的内部命令最接近的只能最小化窗口。如果你真的想要“背景”它,脚本将会很长并且令人困惑。

@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

这会创建一个@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> ,无需新窗口即可启动音乐。

用户LưuVĩnhPhúc建议,使用混合脚本可以防止清理问题。

status.emit('newCompletion')

答案 1 :(得分:1)

基于WMPlayer.OCX

Here's another脚本。您可以像以下一样使用它:

mediarunner.bat Music.mp3

Here's one基于Internet Explorer中的bgsound标记。它还允许您将声音音量设置为参数。与WMPlayer.OCX方法不同,不需要安装媒体播放器:

soundPlayer.bat Music.mp3 -50

One based on SP objects但不幸的是它只能播放wav文件:

spplayer.bat file.wav

没有脚本创建临时文件。

答案 2 :(得分:0)

你也可以像这个剧本一样播放在线音乐:

@echo off
Title Listen to the music with batch and vbscript
mode con cols=60 lines=3 & color 9E
echo.
Echo           To stop the music just close this window 
set "file=http://www.chocradios.ch/djbuzzradio_windows.mp3.asx"
set "vbsfile=%tmp%\%~n0.vbs"
( 
    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
)>%vbsfile%
cscript /nologo %vbsfile%

答案 3 :(得分:0)

我现在正在自己开发一个批处理游戏,并且已经制定出了自己的类似解决方案,该解决方案在音乐流,声音效果,音量等方面具有很大的灵活性,而玩家却从未见过

最让我沮丧的一件事是设计了一种系统,如果用户退出游戏而没有使用退出选项来调用用于终止vbs脚本的taskill及其子进程,则该系统可以停止音乐播放器。

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

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

创建vbs脚本以控制批次中的设置是有优势的,因为您可以使用参数传递有关哪个音轨,什么音量以及是否循环播放声音/音乐的信息。由于音量是在播放音乐或声音时作为参数发送的,因此这会为播放器打开“音量”和“声音”选项,例如有效地使声音效果静音并将音乐的音量设置为具有品味-或禁用其中之一或同时禁用两者。

我的解决方案的代码已在此处记录和描述:     https://pastebin.com/nm01MzhM

音乐播放器脚本的摘录:

(
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

实际上可以在这里听到(看到):     https://www.youtube.com/watch?v=qK5IG3oX5mI

答案 4 :(得分:0)

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

<!-- : 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>

如果音乐文件在任何驱动器中,C:、D:\ 等,请执行以下操作:

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"