找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 10521|回复: 3

[特效代码] 批处理两只老虎跑的快

[复制链接]
发表于 2025-3-11 02:32:41 | 显示全部楼层 |阅读模式
  1. @echo off&setlocal enabledelayedexpansion
  2. (set S=212 212 190 212 159 169 212 212 190 212 142 159 212 212 106 126 159 169 190 119 119 126 159 142 159)&(set L=9 3 12 12 12 24 9 3 12 12 12 24 9 3 12 12 12 12 12 9 3 12 12 12 24)
  3. set "L= !L!"&for %%A in (%S%)do @for /f "tokens=1*" %%B in ("!L!")do @(set "L=%%C"&set/at=450000/%%A,d=%%B*20 2>nul&&powershell "[Console]::Beep(!t!,!d!)" 2>nul)
  4. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. :: 音符频率(单位:Hz,C大调音阶)
  3. set S=262 294 330 262 262 294 330 262 330 349 392 330 349 392 392 440 392 349 330 262 392 440 392 349 330 262 262 392 262
  4. :: 节拍时长(单位:1/4音符=400ms)
  5. set L=4 4 4 4 4 4 4 4 4 4 8 4 4 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8
  6. set "L=!L! "
  7. for %%A in (%S%) do (
  8.     for /f "tokens=1*" %%B in ("!L!") do (
  9.         set "L=%%C"
  10.         set /a "t=%%A, d=%%B*150"
  11.         if !t! gtr 0 (
  12.             powershell "[Console]::Beep(!t!, !d!)" >nul
  13.         ) else (
  14.             timeout /t !d!/1000 >nul
  15.         )
  16.     )
  17. )
  18. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
523066680 + 1 感谢分享

查看全部评分

发表于 2025-3-11 10:24:03 | 显示全部楼层
感谢分享 ,win7系统 ,耍了下 ,声音非常小 ,而且有的没声音
发表于 2025-3-11 23:07:22 | 显示全部楼层
我这里《两只老虎》运行效果也是整体音调偏低
感觉不像是系统的问题
倒像是set /a音阶转换频率t计算的有些问题
《生日歌》频率计算用了不同的方法
音调倒是正常一些
楼主再请核实一下

ps的beep()调用延迟较大
导致乐曲演奏很不连贯
感觉明显慢一拍
估计还得换其它的beep方法
比如nircmdc的beep

其它代码可优化的部分还有一些
比如变量L加前缀或者后缀空格的意义不明确
频率和节拍变量分开处理逻辑不清晰
timeout做延迟只有秒级精度不满足乐曲演奏要求
简单修改了一下看下效果

  1. @echo off&setlocal enabledelayedexpansion
  2. :: 音符频率(单位:Hz,C大调音阶) -- 频率和节拍合用一个变量,更方便处理,也更符合直觉
  3. set S=262:4 294:4 330:4 262:4 262:4 294:4 330:4 262:4 330:4 349:4 392:8 330:4 349:4 392:8 392:4 440:4 392:4 349:4 330:4 262:4 392:4 440:4 392:4 349:4 330:4 262:4 262:4 392:4 262:8
  4. :: 节拍时长(单位:1/4音符=400ms)
  5. rem set L=4 4 4 4 4 4 4 4 4 4 8 4 4 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8
  6. rem set "L=!L! "
  7. for %%C in (%S%) do (
  8.     for /f "tokens=1,2 delims=:" %%A in ("%%C") do (
  9.         rem set "L=%%C"
  10.         set /a "t=%%A*2, d=%%B*100"
  11.         if !t! gtr 0 (
  12.             rem powershell "[Console]::Beep(!t!, !d!)" >nul
  13.                         nircmdc beep !t! !d!
  14.         ) else (
  15.             ping -n 1 -w !d! 111.111 >nul
  16.         )
  17.     )
  18. )
  19. pause
复制代码
另外,两只老虎的曲谱数据好像有问题
感觉最后缺了一个八拍
不通乐理,不懂勿拍
发表于 2025-3-14 04:17:08 | 显示全部楼层
试了下,不错!挺有趣的,就声音小了点,速度也慢了点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.019687 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表