我写了一个歌词显示的.,支持暂停/继续,停止,上/下一首,拖拽到任意时间。
并且歌词是一个新的CMD窗口,不妨碍操作窗口。
但是,因为我这里MP问题,无法得到播放时间..
因此测试用的是系统时间相减..你可以更改部分代码,增加获取播放时间的代码。
以下代码不完全测试...
也还有不少问题,比如:
1, 没有支持毫秒,现在是精确到秒,抓系统时间然后计算毫秒增加不少负担,而且我使用的是findstr, 就算加上估计最多精确到0.3-0.5秒吧..
2, STOP,pause ,没有空闲CPU的指令,使用ping可能延迟有点高,所以一直在循环,造成CPU不小负担。
3, 毕竟CMD的,鼠标点击窗口 或者 非前台状态可能也会延迟。。。
控制命令如下:
@表示插入CMD语句,可用于退出,如@exit
$表示插入控制语句,
at 00:00 /next:1 @exit ;退出歌词秀
at 00:00 /next:1 @pause ;暂停歌词秀,输入健后才能继续
at 00:00 /next:1 $stop ;停止歌词秀
at 00:00 /next;1 $goto$02:03 ; 跟随播放进度,跳转到02:03秒
at 00:00 /next:1 $start$e:\aaa.lrc ; 直接开始播放aaa.mp3的时候加入,则加载新的歌词。如果是在暂停状态,则忽略参数开始继续暂停时间运行。
at 00:00 /next:1 $next$e:\aaa.lrc ;其实跟start差不多,用它是打算完善后用在播放列表功能上。- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- color 2b
-
- :main %1
- if "%1" == "" echo 歌词不存在! & goto :暂停
- for /f "tokens=1,2 delims=:[]" %%a in ('findstr "ti:" %1') do set _ti=%%b
- title=%_ti%
- for /f "tokens=1,2 delims=[]" %%a in ('findstr "[0-9][0-9]:[0-5][0-9]." %1') do set "#%%a=%%b"
- set 初始时间=%time%
- set /a 初始分=%初始时间:~3,2%
- set /a 初始秒=%初始时间:~6,2%
-
- :loop
- set 临时时间=%time%
- call :临时时间 %临时时间:~3,2% %临时时间:~6,2% %临时时间:~9,2%
- at |findstr "@" >nul && call :cmdd
- at |findstr "$" >nul && call :contrl
- for /f "tokens=1,2 delims==" %%a in ('set # ^|findstr "%ktime%"') do call :显示歌词 %%b
- goto :loop
- goto :eof
-
-
- :临时时间
- set varm=%1 & set vars=%2 & set varms=%3
- if %varm% LSS %初始分% (set /a varm=varm+60) 2>nul
- if %vars% LSS %初始秒% (set /a varm=varm-1 & set /a vars=vars+60) 2>nul
- set /a 临时分=varm-初始分 2>nul
- set /a 临时秒=vars-初始秒 2>nul
- IF %临时分% LEQ 9 set 临时分=0%临时分%
- IF %临时秒% LEQ 9 set 临时秒=0%临时秒%
- set ktime=%临时分%:%临时秒%
- goto :eof
-
- :显示歌词
- if NOT "%*" == "" cls
- echo.%*
- goto :eof
-
- :cmdd 插入命令行语句
- for /f "tokens=1* delims=@" %%a in ('at ^|findstr "[0-9]"') do at /del /y & %%b
- goto :eof
-
- :contrl 控制歌词,比如暂停,停止,下一首等。
- for /f "tokens=2,3 delims=$" %%a in ('at ^|findstr "[0-9]"') do (
- at /del /y
- echo %%b | findstr /i "pause" && goto :暂停
- echo %%b | findstr /i "next" && call :main %%c
- echo %%b | findstr /i "stop" && call :stop
- echo %%b | findstr /i "goto" && call :gt %%c
- )
- goto :eof
-
- :暂停
- title=%_ti% -- 暂停
- for /f "tokens=2,3 delims=$" %%a in ('at ^|findstr "[0-9]"') do (
- at /del /y
- echo %%b | findstr /i "pause" && call :暂停
- echo %%b | findstr /i "next" && call :main %%c
- echo %%b | findstr /i "stop" && call :stop
- echo %%b | findstr /i "goto" && call :gt %%c
- echo %%b | findstr /i "start" && goto :loop
- )
- goto :暂停
-
- :stop
- title=%_ti% -- 停止
- for /f "tokens=2,3 delims=$" %%a in ('at ^|findstr "[0-9]"') do (
- at /del /y
- echo %%b | findstr /i "pause" && call :暂停
- echo %%b | findstr /i "next" && call :main %%c
- echo %%b | findstr /i "stop" && goto :stop
- echo %%b | findstr /i "goto" && call :gt %%c
- echo %%b | findstr /i "start" && call :main %%c
- )
- goto :stop
-
-
- :gt mm:ss 参数为歌曲播放时间
- set ktime=%*
- goto :eof
复制代码
[ 本帖最后由 caruko 于 2010-10-22 18:11 编辑 ] |