我这里《两只老虎》运行效果也是整体音调偏低
感觉不像是系统的问题
倒像是set /a音阶转换频率t计算的有些问题
《生日歌》频率计算用了不同的方法
音调倒是正常一些
楼主再请核实一下
ps的beep()调用延迟较大
导致乐曲演奏很不连贯
感觉明显慢一拍
估计还得换其它的beep方法
比如nircmdc的beep
其它代码可优化的部分还有一些
比如变量L加前缀或者后缀空格的意义不明确
频率和节拍变量分开处理逻辑不清晰
timeout做延迟只有秒级精度不满足乐曲演奏要求
简单修改了一下看下效果- @echo off&setlocal enabledelayedexpansion
- :: 音符频率(单位:Hz,C大调音阶) -- 频率和节拍合用一个变量,更方便处理,也更符合直觉
- 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
- :: 节拍时长(单位:1/4音符=400ms)
- 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
- rem set "L=!L! "
- for %%C in (%S%) do (
- for /f "tokens=1,2 delims=:" %%A in ("%%C") do (
- rem set "L=%%C"
- set /a "t=%%A*2, d=%%B*100"
- if !t! gtr 0 (
- rem powershell "[Console]::Beep(!t!, !d!)" >nul
- nircmdc beep !t! !d!
- ) else (
- ping -n 1 -w !d! 111.111 >nul
- )
- )
- )
- pause
复制代码 另外,两只老虎的曲谱数据好像有问题
感觉最后缺了一个八拍
不通乐理,不懂勿拍 |