写了个PHP用于显示歌词,但是无法正常加载某些LRC文件
本帖最后由 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);
$seconds = floatval($matches);
$time_in_seconds = $minutes * 60 + $seconds;
// 提取歌词内容
$lyric_text = isset($matches) ? trim($matches) : '';
// 添加到数组
$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 <= elapsed) {
index++;
}
// 显示当前歌词内容
if (index > 0) {
var currentLyric = lyrics;
lyricContainer.innerHTML = currentLyric;
}
}
// 每100毫秒更新一次歌词显示
setInterval(displayLyric, 100);
</script>
```
用它加载某些歌词会出现什么都不显示的情况
这可能是什么原因
凡是文本文件都应该考虑一下打开文件时所使用的编码是什么? zwb83925462 发表于 2024-8-8 19:27
凡是文本文件都应该考虑一下打开文件时所使用的编码是什么?
编码的话都统一是UTF8的 LRC 字幕很普通!楼主可以关注一下卡拉OK方式的字幕格式,例如:小灰熊、傻丫头 的格式,或Aegisub 3.2.2 软件。 chishingchan 发表于 2024-8-8 21:18
LRC 字幕很普通!楼主可以关注一下卡拉OK方式的字幕格式,例如:小灰熊、傻丫头 的格式,或Aegisub 3.2.2 ...
这些东西能不能嵌入HTML页面??? 试试在 curl_close 之前用 curl_error 查看错误信息
https://www.php.net/manual/zh/function.curl-error.php // 解析LRC文件内容为数组
$lrc_lines = explode("\n", $lrc_content);
这一步没有判断。。。lrc的换行符 爱飞的猫 发表于 2024-8-8 23:58
试试在 curl_close 之前用 curl_error 查看错误信息
https://www.php.net/manual/zh/function.curl-error. ...
你说的是不是这个
// 使用 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);
if(curl_exec($ch) === false)
{
echo 'Curl error: ' . curl_error($ch);
}
else
{
echo '操作完成没有任何错误';
}
curl_close($ch);
如果是这样那程序会提示操作完成没有任何错误 20230713G001133 发表于 2024-8-9 08:56
你说的是不是这个
那看来请求是成功了,lrc 歌词地址或文件方便发出来看看吗 本帖最后由 爱飞的猫 于 2024-8-9 09:52 编辑
爱飞的猫 发表于 2024-8-9 09:13
那看来请求是成功了,lrc 歌词地址或文件方便发出来看看吗
http://隐藏/E%3A/Music/She%20Made%20Toothpicks%20of%20the%20Timber%20of%20My%20Heart.lrc
http://隐藏/E%3A/Music/Laura%20Shigihara%20-%20Zombies%20On%20Your%20Lawn.exe.lrc
http://隐藏/E%3A/Music/dora%20the%20explorer%20-%20ABC%20(The%20Alphabet%20Song).lrc
http://隐藏/E%3 ... 0Girls%20Anthem.lrc
http://隐藏/E%3 ... uring%20Shakira.lrc
目前已经发现这些有问题