<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SBLZD Blog</title><description>私的各种杂记</description><link>https://2x.nz/</link><language>zh_CN</language><item><title>栀子树下的创作谈</title><link>https://2x.nz/posts/zhizishu/</link><guid isPermaLink="true">https://2x.nz/posts/zhizishu/</guid><description>栀子树下的创作谈</description><pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note[手机垃圾太多怎么办]
都说了 1800 遍了，为什么就是不听，打开这个开关自动清理手机垃圾，，，
:::
:::note[削除]
原作由于人气过高已遭削除，请自行寻找补档。
:::
:::note[素材配布]
https://pan.baidu.com/s/1b66P5h05NG0KvPeLXgIJFg?pwd=zzs2
:::&lt;/p&gt;
&lt;h1&gt;序&lt;/h1&gt;
&lt;p&gt;在第一次听到栀子树的时候&lt;/p&gt;
&lt;p&gt;是在 2024 年多，当时就觉得这首曲很好听，而且莫名的比较靠近音骂。&lt;/p&gt;
&lt;p&gt;当时创作的第一个想法是像类似于多邻国日语拼字那样，把栀子树的歌词拼出来，也算是致敬 PV 了。&lt;/p&gt;
&lt;p&gt;结果和 fl 大战了 9961 回合之后发现完全听不了（我太菜了）遂放弃&lt;/p&gt;
&lt;h1&gt;起&lt;/h1&gt;
&lt;p&gt;到了栀子树热潮刚开始的时候&lt;/p&gt;
&lt;p&gt;总之感觉有点后悔的，因为本来自己是有些想法的但是没做（其实很多项目都是这样趋势的&lt;/p&gt;
&lt;p&gt;回想了下之前的想法，感觉也不是很可行，毕竟我根本没学日语。&lt;/p&gt;
&lt;p&gt;那，中文呢？&lt;/p&gt;
&lt;p&gt;抱着这样的心思，我打开 figma 画出了栀子树中文 PV 的最初版：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/prototype.png&quot; alt=&quot;虽然很粗糙，但也算是pv prototype了&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;词&lt;/h1&gt;
&lt;p&gt;但是由于我垃圾的中文水平，一开始我完全找不到满意的填词&lt;/p&gt;
&lt;p&gt;那么有没有语文比（世）较（界）好（第）的（一）人呢？&lt;/p&gt;
&lt;p&gt;有的兄弟，有的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/chat.png&quot; alt=&quot;语文世界第一&quot; /&gt;&lt;/p&gt;
&lt;p&gt;以上，一场长达 4（3）天的双人合作开始了（吗？）&lt;/p&gt;
&lt;p&gt;填词有水平的。&lt;/p&gt;
&lt;p&gt;但由于我急着想还原 PV，结果题目没有商量好就做出来了，导致题目不可逆的有点口语化&lt;/p&gt;
&lt;p&gt;（但我又懒得改，只能这样了（悲））&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/chat2holiday.png&quot; alt=&quot;PV封面初版&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在 那 栀 子 花 树 还 未 干 枯 的 时 候&lt;/p&gt;
&lt;p&gt;我 至 少 能 把 P V 做 出 来&lt;/p&gt;
&lt;h1&gt;视&lt;/h1&gt;
&lt;p&gt;制作 PV 的过程还是蛮有意思的。&lt;/p&gt;
&lt;p&gt;第一件事情是，我为了图方便（主要是菜），所有的灯管都是复制两种圆柱体做出来的（一个是盖子，一个是管体）&lt;/p&gt;
&lt;p&gt;拐角处单独做了一个拐弯模型，剩下的全靠拼，类似于拼好饭。（具体见封面）&lt;/p&gt;
&lt;p&gt;其次，把外壳做出来之后我才发现原来发光的是里面那层，而为了避免做小一圈会导致的各种模型问题，我直接放弃再建一层管，
而是用 fresnel 大法在表面做了一个反描边（描边用玻璃材质，内部直接用 emission）。实际上这种方法视觉上看不出来什么问题。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/fresnel.png&quot; alt=&quot;Fresnel大法&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后在手 k 前面的动画时，我才意识到一点点给所有模型的材质 k 亮度完全不可取。于是我又多搞了一个专门用来传递亮度参数和开关的几何节点，
然后就可以多选要改变的模型按住 alt 开关几何节点的布尔值了。&lt;s&gt;顺便学到了很多 blender 小技巧&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/geonodes.png&quot; alt=&quot;几何节点&quot; /&gt;&lt;/p&gt;
&lt;p&gt;后处理这方面我调了半天，因为原作的炫光确实很帅，color bleeding 的效果也偏高饱和度。&lt;/p&gt;
&lt;p&gt;最后叠了一大堆 glare 和 blur 之后终于感觉差不多了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/post.png&quot; alt=&quot;后处理&quot; /&gt;&lt;/p&gt;
&lt;p&gt;最后那段密文动画是直接脚本生成的，我还顺便学了一下 bpy（然后修了半天 bug 终于能用了）
&lt;img src=&quot;./Pictures/rnc.png&quot; alt=&quot;密文&quot; /&gt;&lt;/p&gt;
&lt;p&gt;至于这个密文为啥那么生草，因为我没想法，然后打算直接来电搞笑的。（我不是 puzzle 专家！）&lt;/p&gt;
&lt;p&gt;p2 ytpmv 确实很水，但我懒（第一次用 OM Midi 爽飞了）&lt;/p&gt;
&lt;h1&gt;音&lt;/h1&gt;
&lt;p&gt;我感觉本次音频反而有点偷懒，其一是一开始是直接对着原曲还原的，导致音 mad 成分有点少，素材也用的比较少。（fake 有点多.?）&lt;/p&gt;
&lt;p&gt;其二是我和 SDXD 一开始打算用饼人力的，结果发现似乎对中文不是那么友好（其实我懒），再加上我急着发，于是就直接用经典葛平了（话说还撞时间线了）&lt;/p&gt;
&lt;p&gt;当然这也是第一次我尝试在主轨上面挂 OTT（一 键 母 带）&lt;/p&gt;
&lt;p&gt;那我还能说啥呢，直接拆拆臂&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/ccb.png&quot; alt=&quot;拆拆臂&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;结&lt;/h1&gt;
&lt;p&gt;在那栀子花树还未干枯的时候&lt;/p&gt;
&lt;p&gt;我们或许还会再次碰面吧......&lt;/p&gt;
</content:encoded></item><item><title>SDXDのDuolingo UTAU音源 企划</title><link>https://2x.nz/posts/duolingo-utau/</link><guid isPermaLink="true">https://2x.nz/posts/duolingo-utau/</guid><description>本文为实现记录。实际作者应该归于提出这个想法的人，但我也不知道SO2是否在继续挖这个坑。故署名于此。</description><pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note[2025-05-28 更新]
已断坑。期待未来 100 年内回坑。
（忘本！！）
:::&lt;/p&gt;
&lt;p&gt;:::note[2025-05-28 更新]
多邻国官方疑似对数据页面做了 BasicAuth 认证，导致无法通过直接网络请求获取数据。
:::&lt;/p&gt;
&lt;p&gt;本文为实现记录。实际作者应该归于提出这个想法的人，但我也不知道&lt;a href=&quot;https://sulphurdxd.online&quot;&gt;SO2&lt;/a&gt;是否在继续挖这个坑。故署名于此。&lt;/p&gt;
&lt;h1&gt;0. 开端&lt;/h1&gt;
&lt;p&gt;某日 SO2 [aka.SulphurDXD] 跟我解释他用多邻国的日语单子学习界面的音频做人力的想法。至于想做的是什么我忘了，或许是热异常也或许是致被涂黑世界的书信。&lt;/p&gt;
&lt;p&gt;然后当时我好像又显得很冷漠（经典剧情&lt;/p&gt;
&lt;p&gt;然后后面不知怎的就又想起来了&lt;/p&gt;
&lt;p&gt;总之想法都有了，那就做把&lt;/p&gt;
&lt;h1&gt;1. 音源获取&lt;/h1&gt;
&lt;p&gt;录屏然后截音频是我首先想到的直接方法，但是需要手动裁剪，而且需要录屏，录屏需要手动操作，手动操作需要时间，时间就是金钱，金钱就是生命，生命就是上帝，上帝就是 SO2。所以录屏音源需要 SO2。但是我没有 SO2。&lt;/p&gt;
&lt;p&gt;所以这个方法行不通。（？）&lt;/p&gt;
&lt;p&gt;换一个方法，是否可以干回老本行去解包？&lt;/p&gt;
&lt;p&gt;从 APP 中初步判定，多邻国平假语音的学习页在英语学日语模式（系统语言还得是英语）的第二页，并且点击单个单词会延迟一会。可以推测出每个片假名的音频是通过网络请求的，而非本地文件。&lt;/p&gt;
&lt;p&gt;根据多邻国官网博客的&lt;a href=&quot;https://blog.duolingo.com/server-driven-ui/&quot;&gt;这篇 SDUI 介绍文章&lt;/a&gt;也可以印证，APP 内所有的 UI 都是后端服务器传输过来的，因此都会通过网络更新（沟槽的 Web 还在追我）。也就是说，所有多邻国用户疑似额外装了一个浏览器到自己手机上 🤣🤣🤣【你别笑】【私人笑声 x114514】&lt;/p&gt;
&lt;p&gt;多邻国安卓解包也相同印证了这一点。&lt;code&gt;assets/&lt;/code&gt;文件里面甚至有 CSS 文件定义&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/jiebao1.png&quot; alt=&quot;jiebao1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;那怎么办？开个 HttpCanary 抓网络包？&lt;/p&gt;
&lt;p&gt;别急，多邻国还有网页版。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/pac1.png&quot; alt=&quot;pac1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;总之在游客模式下经过一番 &lt;code&gt;すし&lt;/code&gt; &lt;code&gt;おちゃ&lt;/code&gt; &lt;code&gt;ごはん&lt;/code&gt;的洗礼过后（大号找不到密码），飞舞也是成功在 F12 开发工具的网络面板中找到了片假名页（中文系统语言没有这一页）。多邻国开发者人也怪好的，直接就把所有日语平片假和汉字的 JSON 丢回来了&lt;/p&gt;
&lt;p&gt;日文字母页面数据 URL: &lt;code&gt;https://www-prod.duolingo.com/2017-06-30/alphabets/courses/ja/en（选填?alphabetsPathProgressKey=......）&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;（是 2017 的老东西了，而且填了&lt;code&gt;alphabetsPathProgressKey&lt;/code&gt;之后后面还有一堆汉字，超级大）&lt;/p&gt;
&lt;p&gt;单个片假名数据结构如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/pac2.png&quot; alt=&quot;pac2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以看见 character 是对应的片假名，ttsUrl 就是音频 URL&lt;/p&gt;
&lt;p&gt;那剩下的就很简单了，写一个 requests 爬虫把所有文件下下来然后重命名成片假名：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import os
import json
import requests

output_dir = &apos;HiraganaFetch/output&apos;
os.makedirs(output_dir, exist_ok=True)

# 把上面请求返回写进这个json文件，并且简化了
with open(&apos;HiraganaFetch/metadata.json&apos;, &apos;r&apos;, encoding=&apos;utf-8&apos;) as f:
    metadata = json.load(f)

# 只下载片假名
for group in metadata[&apos;alphabets&apos;][0][&apos;groups&apos;]:
    # 每行有5个片假名
    for row in group[&apos;characters&apos;]:
        for character in row:
            if character is None:
                continue
            name = character[&apos;character&apos;]
            tts_url = character[&apos;ttsUrl&apos;]
            if tts_url:
                output_file = os.path.join(output_dir, f&quot;{name}.mp3&quot;)

            # 下载
            response = requests.get(tts_url)
            if response.status_code == 200:
                with open(output_file, &apos;wb&apos;) as audio_file:
                    audio_file.write(response.content)
                print(f&quot;Downloaded: {output_file}&quot;)
            else:
                print(f&quot;Failed to download: {tts_url}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;output/&lt;/code&gt; 文件夹下就是所有片假名音频。&lt;/p&gt;
&lt;h1&gt;2. 别样的 UTAU 音源处理大战&lt;/h1&gt;
&lt;p&gt;并非别样，是真无聊&lt;/p&gt;
&lt;p&gt;由于我不是很相信 UTAU 的 sampler（主要是不会调），所以就全丢进 melodyne 提前拉平了&lt;/p&gt;
&lt;p&gt;总之过程十分的枯燥&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Pictures/ty1.png&quot; alt=&quot;ty1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;别忘了 24 位深转 16 位深单声道音频，不然 UTAU/OPENUTAU 可能会不支持格式而导致调参不保存之类的问题。（惨痛教训&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import os
import soundfile


def convert_wav_to_16bit(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.endswith(&apos;.wav&apos;):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)


            data, samplerate = soundfile.read(input_path)
            soundfile.write(output_path, data, samplerate, subtype=&apos;PCM_16&apos;)

convert_wav_to_16bit(&apos;Tuned/&apos;, &apos;Final/&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样就处理的差不多了，接着丢进 UTAU&lt;/p&gt;
&lt;h1&gt;3. UTAU 调参&lt;/h1&gt;
&lt;p&gt;好像没什么可以写的，&lt;/p&gt;
&lt;h1&gt;4. 后记&lt;/h1&gt;
&lt;p&gt;知道做出来之后我才想到其实用这个人力调 Litmus*的《学习时间到》会是一个天才想法。&lt;/p&gt;
&lt;p&gt;毕竟很多素材可以直接从 app 里面截图（不知道怎么拿），主题也会很契合。&lt;/p&gt;
&lt;p&gt;但有没有时间做就是另一回事了。（悲&lt;/p&gt;
</content:encoded></item></channel></rss>