【问题标题】:How to make music play in background of batch game如何在批处理游戏的背景下播放音乐
【发布时间】:2017-08-24 04:31:53
【问题描述】:

我正在用记事本制作批处理游戏,我想知道如何在后台播放文件音乐。

我有这个:

@echo off
start Music.mp3
Pause

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

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

【问题讨论】:

标签: batch-file


【解决方案1】:

您可以使用命令处理器的内部命令获得的最接近只能最小化窗口。如果你真的想“背景化”它,脚本会很长而且很混乱。

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>

【讨论】:

  • 谢谢!我唯一的问题是在你的代码中它说:设置“file = track12.mp3”。 file=track12 我用我的 MP3 文件替换它吗?
  • 正确。将其更改为您喜欢的任何内容。
  • 另请注意,这可能不适用于较新的 Windows(我尚未对此进行测试,但 Windows Media 播放器似乎已在 Wind 10 中消失)
  • 好的,我会这样做的
  • 一个hybrid vbs-batch会更好,以后不需要清理vbs文件
【解决方案2】:

Here's another 脚本基于WMPlayer.OCX。你可以像这样使用它:

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

没有任何脚本创建临时文件。

【讨论】:

    【解决方案3】:

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

    @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=https://stream.initialradio.fr:8443/djbuzz-192k.mp3"
    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%
    

    【讨论】:

    • 嘿,我在你的脚本中发现了另一个奇怪的东西。 /nologo 应该是 //nologo。但这两个都有效......
    【解决方案4】:

    我目前正在自己​​开发一个批处理游戏,并且已经制定了我自己的类似解决方案,它在音乐流、音效、音量等方面提供了很大的灵活性,而玩家不可见.

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

    我最终设计了一个 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
    

    实际上可以听到(和看到)here

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多