<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>无损音乐相关文章列表 | 皇家元林</title>
	<atom:link href="https://hjyl.org/tags/%E6%97%A0%E6%8D%9F%E9%9F%B3%E4%B9%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://hjyl.org</link>
	<description>刘元林的个人博客</description>
	<lastBuildDate>Tue, 13 Aug 2024 12:42:24 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://img.hjyl.org/uploads/2019/10/cropped-about-me-32x32.png</url>
	<title>无损音乐相关文章列表 | 皇家元林</title>
	<link>https://hjyl.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PHP实现音乐列表json配置文件</title>
		<link>https://hjyl.org/php-json-list-music/</link>
					<comments>https://hjyl.org/php-json-list-music/#comments</comments>
		
		<dc:creator><![CDATA[皇家元林]]></dc:creator>
		<pubDate>Sun, 28 Apr 2024 11:37:01 +0000</pubDate>
				<category><![CDATA[元林手札]]></category>
		<category><![CDATA[getid3()]]></category>
		<category><![CDATA[GPT3.5]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[无损音乐]]></category>
		<guid isPermaLink="false">https://hjyl.org/?p=5053</guid>

					<description><![CDATA[之前改了个静态网页播放器播放本地音乐的网站，当时就是用json配置文件收集音乐信息，只是收集上千首音乐信息比较 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>之前改了个<a href="https://hjyl.org/javascript-html5-music-aplayer/">静态网页播放器</a>播放本地音乐的网站，当时就是用json配置文件收集音乐信息，只是收集上千首音乐信息比较复杂，是将数据输出到Excel表格，通过Excel公式实现的。最近感觉太麻烦了，想实现更简单的方法，最后从GPT3.5上得到了通过PHP实现这样的功能。</p>



<h3 class="wp-block-heading">json数据格式</h3>



<p>和之前是一样的。</p>



<pre class="wp-block-code"><code lang="" class=" line-numbers">[<br>    {<br>        "url":"URL地址",<br>        "name":"歌曲名",<br>        "artist":"歌手",<br>        "lrc":"歌词地址URL"<br>    },<br>    {<br>        "url":"URL地址",<br>        "name":"歌曲名",<br>        "artist":"歌手",<br>        "lrc":"歌词地址URL"<br>    },<br>    {<br>        "url":"URL地址",<br>        "name":"歌曲名",<br>        "artist":"歌手",<br>        "lrc":"歌词地址URL"<br>    }<br>]</code></pre>



<h3 class="wp-block-heading">功能代码PHP</h3>



<pre class="wp-block-code"><code lang="" class="">//音乐文件所在的目录
$musicDirectory = 'Music';

function scanMusicDirectory($dir)
{
    $files = array_diff(scandir($dir), array('..', '.'));

    //初始化数组
    $musicFiles = array();

    //统计文件夹下音乐数量，因为一个音乐+一个歌词文件，所以得除以2
    $i = (count(scandir($dir)))/2;

    foreach ($files as $file) {

        $filePath = $dir . '/' . $file;

        //自定义歌曲网络路径
        $musicHttp = "https://alist.hjyl.org/";

        if (is_dir($filePath)) {
            //如果是目录，则递归扫描目录下的音乐文件
            $musicFiles = array_merge($musicFiles, scanMusicDirectory($filePath));
        } else if (pathinfo($filePath, PATHINFO_EXTENSION) == 'mp3' || pathinfo($filePath, PATHINFO_EXTENSION) == 'flac') {
            //如果是音乐文件，则将文件路径添加到数组中
            //通过分隔符获取音乐文件名
            $fileName = explode(".".pathinfo($filePath, PATHINFO_EXTENSION), $filePath);
            //通过分隔符获取演唱者
            $artist = explode(" - ", $fileName[0]);
            //通过分隔符获取歌曲名
            $name = explode("/", $artist[0]);
         
            $musicFiles[] = array('id' => $i--, 'url' => $musicHttp . $filePath, 'name' => $name[1], 'artist' => trim($artist[1], " "), 'lrc' => $musicHttp . $fileName[0].".lrc");

        }
        
    }

    return $musicFiles;
}

$musicFiles = scanMusicDirectory($musicDirectory);

//JSON_UNESCAPED_UNICODE解决中文乱码，JSON_UNESCAPED_SLASHES解决输出内容有反斜杠
$jsonData = json_encode($musicFiles, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

//将生成的JSON数据写入到文件中
file_put_contents('music.json', $jsonData); 

echo 'JSON文件生成成功！';</code></pre>



<p>将上面代码保存为music.php，设置音乐文件夹路径，既可以在浏览器中执行，又可以在SSH终端里执行。最后同目录下music.json文件就是所需要的配置文件了。只是这个歌曲顺序不太清楚是按什么顺序来的，前面字符、数字和英文是正常的升序，但是后面的中文就有点乱来了，不过不一样，比我手动编辑快多了。</p>



<h3 class="wp-block-heading">关于getid3</h3>



<p>PHP有一个脚本可以提取文件标签信息，包括音频、视频，它叫<a href="https://hjyl.org/go/aHR0cHM6Ly93d3cuZ2V0aWQzLm9yZy8=" rel="nofollow" target="_blank">getID3()</a>。所以如果用这个脚本，功能代码是这样的。当然前提是你将getid3脚本文件拷到当前文件夹下，然后才能调用。</p>



<pre class="wp-block-code"><code lang="" class="">//音乐文件所在的目录<br>$musicDirectory = 'Music';<br><br>require_once "./getid3/getid3.php";<br>require_once "./getid3/getid3.lib.php";<br>function scanMusicDirectory($dir)<br>{<br>    $files = array_diff(scandir($dir), array('..', '.'));<br><br>    //初始化数组<br>    $musicFiles = array();<br><br>    //统计文件夹下音乐数量，因为一个音乐+一个歌词文件，所以得除以2<br>    $i = (count(scandir($dir)))/2;<br><br>    foreach ($files as $file) {<br><br>        $filePath = $dir . '/' . $file;<br><br>        //自定义歌曲网络路径<br>        $musicHttp = "https://alist.hjyl.org/";<br><br>        if (is_dir($filePath)) {<br>            //如果是目录，则递归扫描目录下的音乐文件<br>            $musicFiles = array_merge($musicFiles, scanMusicDirectory($filePath));<br>        } else if (pathinfo($filePath, PATHINFO_EXTENSION) == 'mp3' || pathinfo($filePath, PATHINFO_EXTENSION) == 'flac') {<br>            //如果是音乐文件，则将文件路径添加到数组中<br>            //通过分隔符获取音乐文件名<br>            $fileName = explode(".".pathinfo($filePath, PATHINFO_EXTENSION), $filePath);<br><br>            //调用getid3方法<br>            $getID3 = new getID3;<br>            $music = $getID3-&gt;analyze($filePath);<br>            $musicFiles[] = array('id' =&gt; $i--, 'url' =&gt; $musicHttp . $filePath, 'name' =&gt; $music["comments"]["title"][0], 'artist' =&gt; $music["comments"]["artist"][0], 'lrc' =&gt; $musicHttp . $fileName[0].".lrc");<br>        }<br>        <br>    }<br><br>    return $musicFiles;<br>}<br><br>$musicFiles = scanMusicDirectory($musicDirectory);<br><br>$jsonData = json_encode($musicFiles, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);<br><br>//将生成的JSON数据写入到文件中<br>file_put_contents('music.json', $jsonData); <br><br>echo 'JSON文件生成成功！';</code></pre>



<p>不过可惜的是，无论是在浏览器还是终端中执行，两种方法都不是很完美。如果是在浏览器中执行，音乐文件和PHP需要处在同一级别目录，或者音乐文件处在PHP下一级目录都可以，但是我的音乐文件是在另一个磁盘里，浏览器获取不到路径权限，而这个在终端里执行却是可以的。但是终端又只能运行单PHP文件，而获取不到getid3脚本功能。所以最后我还是放弃了这个脚本。</p>



<p>其实用这个脚本，主要还是获取音乐封面，我收集的都是无损音乐，主要是flac格式，还有一小部分mp3格式，但是都内置有封面信息。如果可以直接提取，我就不用再通过js提取了。不过二者结果是一样的。而且js可以将base64图片地址转换为blob地址，PHP却不行，后来了解到blob链接只是浏览器内部生成的临时链接，不能被保存到文件，更不能被永久读取，所以就更不需要getid3脚本了。只是base64编码地址太长了，整套下来，终端都崩溃了。于是封面还是保留了之前的处理方式。</p>



<p>上面的代码仅供参考吧！</p>
<div id="content-copyright"><span style="font-weight:bold;text-shadow:0 1px 0 #ddd;font-size: 13px;">版权声明: </span><span style="font-size: 13px;">本文采用 <a href="https://hjyl.org/go/aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzMuMC8=" rel="nofollow" target="_blank">BY-NC-SA</a> 协议进行授权，如无注明均为原创，转载请注明转自 <a href="https://hjyl.org">皇家元林</a><br>本文链接: <a rel="bookmark" title="PHP实现音乐列表json配置文件" href="https://hjyl.org/php-json-list-music/">PHP实现音乐列表json配置文件</a></span></div>]]></content:encoded>
					
					<wfw:commentRss>https://hjyl.org/php-json-list-music/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>收集好听的无损音乐</title>
		<link>https://hjyl.org/flac-music/</link>
					<comments>https://hjyl.org/flac-music/#comments</comments>
		
		<dc:creator><![CDATA[皇家元林]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 14:28:45 +0000</pubDate>
				<category><![CDATA[生活点滴]]></category>
		<category><![CDATA[dock]]></category>
		<category><![CDATA[flac]]></category>
		<category><![CDATA[刀郎]]></category>
		<category><![CDATA[无损音乐]]></category>
		<category><![CDATA[罗刹海市]]></category>
		<category><![CDATA[群晖]]></category>
		<category><![CDATA[落雪音乐]]></category>
		<category><![CDATA[阿里云盘]]></category>
		<guid isPermaLink="false">https://hjyl.org/?p=4549</guid>

					<description><![CDATA[最近网络上轩起了一阵好大的风——刀郎的新歌《罗刹海市》，那热度简直了，据说可以打破吉尼斯世界纪录了。可以这么说 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近网络上轩起了一阵好大的风——刀郎的新歌《罗刹海市》，那热度简直了，据说可以打破吉尼斯世界纪录了。可以这么说吧，但凡有这首歌的短视频，都至少有上万的点击率，相当的恐怖！</p>



<p>前几天，想升级下黑群晖系统（版本号7.2），导致在加入旧硬盘数据的时候，把整个盘子数据割掉了，奇了怪了，之前从版本6换到版本7.1的时候都没有问题，那个心疼的啊，你懂的吧，所有的音乐、电影、照片（从开始拍照的时候留下的照片数据）、文档全没有了，大概有400多G的数据。</p>



<p>其他数据就算了，肯定找不回来了，但音乐还是很好找的，当时为了方便在车上听音乐，已经拷贝到U盘上了。以前不注重音质，收集了近700首mp3音乐，也才3、4G的容量。这次在刀郎的新歌感染下，加上了对音乐音质的了解，我开始喜欢收集无损音乐了。毕竟高质量的音频和视频都是数码时代发展的趋势，而相对超清视频，无损音乐就小的很多了，像我这700首无损音乐，才占用19G的容量，小的20多M，大的100多M。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>先来科普一下什么是无损音乐？此知识来自于网络。</p>
<cite>简而言之就是，没有刻意通过压缩的音乐，客观意义上更属于原汁原味的声音，但是现在很多舆论直接把无损音乐媲美CD音质，也就是说用CD音质做标杆。最常用的无损音乐格式有wav、flac、ape，其中wav是用EAC这类抓轨软件从CD上直接抓取，所以基本和CD保持一致的声频文件，这格式的音乐文件非常大，而其他两个格式是属于无损压缩的格式，相对小了很多，网络上现在流行的无损压缩音乐格式是flac。<br>另外MP3、RM、WMA，这几个压缩格式就是对某些片段进行取样而成的格式，客观定义属于有损压缩，但是对MP3而言，如果你有320K的MP3那么音质还行，建议保留，因为它音质有接近CD的感觉，但是这种320K的MP3仅限耳机，音箱或扬声器都不行。</cite></blockquote>



<p>好在很久以前我有收藏歌单的习惯，相对很多音乐平台，网易云音乐做的还算不错，不过如今都差不多了，因为版权的问题，所有音乐平台都有下载不了的音乐。所以要想在一个平台听到自己想听的音乐，最好的方式就是下载到本地。</p>



<p>我用到的工具是<a href="https://hjyl.org/go/aHR0cHM6Ly9naXRodWIuY29tL2x5c3dodXQvbHgtbXVzaWMtZGVza3RvcCNyZWFkbWU=" rel="nofollow" target="_blank">落雪音乐</a>，这是一款Electron + Vue 开发的开源软件，它含有很多音源，基本上可以实现听所有你想听的音乐。然后它还能导入现在流行的各大音乐平台的歌单，而且你收藏的音乐列表还可以同步到自己搭建的服务器上。譬如我之前在网易云收藏的歌单，就可以导入到落雪音乐，然后在群晖docker搭建数据同步服务，同步落雪的数据，用落雪工具免费下载音乐，不需要任何费用。嗯嗯，非常香。</p>



<p>然后用官方的话说就是音乐平台不易，请尊重版权，支持正版，本项目仅用于对技术可行性的探索及研究。现在版权的意识相当重，搞不好哪天这么好的开源项目无奈被迫停止。大家且用且珍惜。网上分享无损音乐的网站，要么收费，要么保存在那种下载龟速的网盘里，无论哪一种，都很难受！</p>



<p>当然，用落雪听音乐是没问题的，但下载不了无损音乐，可能是因为其他平台会员的问题吧。然而这问题作者也考虑到了，所以它可以添加音源。这时又有大神做到了，分享了音源，我们用到的音源来自于<a href="https://hjyl.org/go/aHR0cHM6Ly9zaXh5aW4uY29tLzg0OTguaHRtbA==" rel="nofollow" target="_blank">六音</a>。有了它我们就可以正常下载flac格式的无损音乐了。</p>



<p>经过三四天的努力，我的本地音乐数据恢复了，而且还提高了音质。老样子，还是保存在群晖里，但这次我学聪明了，利用群晖数据同步工具cloud sync+阿里云webdav套件，备份群晖的数据到阿里云盘里。可这个同步工具有个问题，它只会上传、下载和删除。群晖自带的音乐播放器除了可以播放群晖共享文件夹music之外，还可以播放home/music文件夹（它称之为个人音乐库）里的文件，但是文件夹名必须小写，不支持大写，而我习惯首写字母大写。所以我今天试了下，将Music改成music，结果同步工具就一个劲的删阿里云盘里的备份音乐。后来我在播放器里导歌单的时候才发现音乐少了，这才恍然大悟，好在阿里云盘里有个回收站，被删的文件都在，点击恢复，就又回来了。搞清楚这个原理，我也给群晖加个回收站，这样就更保险了。</p>



<p>顶部上有个音乐菜单，就是现在我收集的无损音乐，数据服务在阿里云盘，通过alist生成链接，最终体现在我这个音乐播放器上。这款音乐播放器来自于<a href="https://hjyl.org/go/aHR0cHM6Ly9naXRodWIuY29tL3poaGVvL0hlb011c2lj" rel="nofollow" target="_blank">HeoMusic</a>，它可以绑定各大流行音乐平台的歌单，我就简单修改了一下，用来播放本地音乐文件。但alist搭建服务感觉不太稳定，有时候会播放失败，可以尝试狠狠刷新一下（CTRL+F5）。可惜我的服务器带宽太小，播放大文件会卡。所以我一直在找能直接访问我本地数据的办法。据说IPv6都是公网的ip，但移动的客服和宽带师傅都是废物，装不懂，就是不给你弄！</p>



<p>罢了！慢慢来吧！如果有好听的音乐，欢迎推荐给我，在此先谢过了！</p>
<div id="content-copyright"><span style="font-weight:bold;text-shadow:0 1px 0 #ddd;font-size: 13px;">版权声明: </span><span style="font-size: 13px;">本文采用 <a href="https://hjyl.org/go/aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzMuMC8=" rel="nofollow" target="_blank">BY-NC-SA</a> 协议进行授权，如无注明均为原创，转载请注明转自 <a href="https://hjyl.org">皇家元林</a><br>本文链接: <a rel="bookmark" title="收集好听的无损音乐" href="https://hjyl.org/flac-music/">收集好听的无损音乐</a></span></div>]]></content:encoded>
					
					<wfw:commentRss>https://hjyl.org/flac-music/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
	</channel>
</rss>
