本帖最后由 20230713G001133 于 2024-8-8 17:22 编辑
代码如下
<?php
// 获取页面参数中的LRC文件地址
$lrc_file_url = isset($_GET['lrc_File']) ? $_GET['lrc_File'] : '';
// 检查是否传递了有效的LRC文件地址
if (empty($lrc_file_url)) {
die('请提供有效的LRC文件地址!');
}
// 使用 cURL 打开远程文件(也可以使用 file_get_contents,但需要确保 allow_url_fopen 已启用)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $lrc_file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$lrc_content = curl_exec($ch);
curl_close($ch);
// 检查是否成功读取内容
if ($lrc_content === false) {
die('无法读取LRC文件内容!');
}
// 解析LRC文件内容为数组
$lrc_lines = explode("\n", $lrc_content);
// 准备将时间戳转换为秒的数组
$time_stamps = [];
$lyrics = [];
foreach ($lrc_lines as $line) {
// 使用正则表达式匹配时间戳和歌词
$pattern = '/\[(\d+):(\d+\.\d+)\](.*)/';
preg_match($pattern, $line, $matches);
if (!empty($matches)) {
// 提取时间信息
$minutes = intval($matches[1]);
$seconds = floatval($matches[2]);
$time_in_seconds = $minutes * 60 + $seconds;
// 提取歌词内容
$lyric_text = isset($matches[3]) ? trim($matches[3]) : '';
// 添加到数组
$time_stamps[] = $time_in_seconds;
$lyrics[] = $lyric_text;
}
}
// 输出JavaScript脚本和初始歌词内容
echo '<script>';
echo 'var timeStamps = ' . json_encode($time_stamps) . ';'; // 时间戳数组
echo 'var lyrics = ' . json_encode($lyrics) . ';'; // 歌词数组
echo '</script>';
// 输出初始歌词容器
echo '<div id="lyric-container"></div>';
?>
<style>
body {
font-family: Arial, sans-serif;
background-color: rgb(180, 190, 255);
color: rgb(0, 0, 128);
text-align: center;
}
</style>
<script>
var index = 0;
var lyricContainer = document.getElementById('lyric-container');
var startTime = new Date().getTime() / 1000; // 当前时间戳,以秒为单位
function displayLyric() {
var currentTime = new Date().getTime() / 1000; // 当前时间戳,以秒为单位
var elapsed = currentTime - startTime;
// 寻找当前时间对应的歌词行
while (index < timeStamps.length && timeStamps[index] <= elapsed) {
index++;
}
// 显示当前歌词内容
if (index > 0) {
var currentLyric = lyrics[index - 1];
lyricContainer.innerHTML = currentLyric;
}
}
// 每100毫秒更新一次歌词显示
setInterval(displayLyric, 100);
</script>
用它加载某些歌词会出现什么都不显示的情况
这可能是什么原因
|