Создание музыки c с выпуском - PullRequest
1 голос
/ 15 апреля 2020

Я хотел знать, есть ли какой-нибудь способ сделать musi c с помощью пакета, а не просто открыть mp3-файл из cmd, но команды для создания заметок или что-то в этом роде. Если действительно нет, как это сделать, я понимаю.

1 Ответ

0 голосов
/ 15 апреля 2020

batch может воспроизводить музыку c, создав и запустив скрипт vbs для использования внутреннего windows медиаплеера.

Примечание. Во всех приведенных ниже скриптах переменная% sounds% относится к папке. ваши звуковые сценарии находятся и должны быть определены.

Суть игры musi c заключается в следующем пакетном сценарии:

@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 можно использовать для контроля состояния партии и вызова скрипта партии, чтобы остановить воспроизведение c, когда партия закрыта:

@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, который выбирает количество экземпляров cmd.exe через objWMIService.ExecQuery. Это происходит в течение всего oop с условием прерывания 0 open cmd.exe windows. В l oop встроен спящий режим, чтобы уменьшить частоту обращений к службе WMI, так как они очень ресурсоемки. Когда происходит перерыв l oop, он запускает программу killmusi c .bat в скрытом состоянии.

Следующий скрипт «KillMusi c .bat» вызывается либо непосредственно в вашей метке выхода, либо монитором VBS, когда он определяет, что Cmd.exe больше не работает. DoMonitor - это переменная, которая изменяется в вашем основном скрипте до вызова killmusi c. 1 указывает на то, что монитор должен быть перезапущен, и используется, когда killmusi c .bat останавливает текущую воспроизводимую песню, чтобы начать новую песню. Monitor - это переменная, содержащая путь к Monitor.bat

@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

Эти три программы можно увидеть здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...