xh Tool osu! 本地预览

replayviewer-js 1.0.0 · MIT · © daladal 及贡献者
源码提交 13f14ae065a505634cf0176db8d75ea2d4a235fd
https://github.com/daladal/replayviewer-js/tree/13f14ae065a505634cf0176db8d75ea2d4a235fd
基于 npm 发布引擎；xh Tool S108增加AudioSync.setUserPlaybackBuffer，S109局部优化mania判定 / 长条灯光事件范围、皮肤帧缓存及离屏长条绘制。stretch-worker.js的FifoSampleBuffer由S109改用兼容的Float32Array扩容；时间伸缩DSP算法不改。原始与派生哈希均保留。

引擎打包包含 fflate 0.8.3、lzma 2.3.2（MIT），以及 @soundtouchjs/core 2.1.0 的部分模块（MPL-2.0）。
适配层另使用 fflate 0.8.2（MIT）。完整许可分别随应用提供。
SoundTouch MPL 源码可从以下地址免费获取，所用模块为 AbstractSamplePipe.ts、FifoSampleBuffer.ts、Stretch.ts：
https://github.com/cutterbl/SoundTouchJS/tree/906a76c860e575ca2df555708db01eb11915949c/packages/core/src
原始来源也保存在工程 tools/third-party/soundtouch-core-2.1.0/bundled-source 中。S109修改的FifoSampleBuffer可编辑源码随APK assets/licenses/osu/FifoSampleBuffer-S109.ts.txt提供，MPL-2.0与原作者版权保留；保留的Worker代码在assets/preview/stretch-worker.js。其余SoundTouch模块与DSP未改。

未随包分发引擎上游示例谱面、音乐或回放。基础简洁皮肤由本应用生成几何图形。
mania 默认内置 Rurudo 5.1 - xh Tool Mania Lite，原皮肤 Rurudo 5.1，作者 LN_Yonya，来源为用户提供的.osk。仅精简配置和文件范围，保留Tap、长条及左侧人物的原PNG像素；原作者保留素材权利，应用MIT不覆盖这些图像。详细来源与原包摘要随preview/rurudo-mania.osk内NOTICE.txt保留。

房间 logo、四模式图标和25枚Mods图标（DT / HT / NC / DC / HD / HR等）取自 ppy/osu-resources 原始 PNG：
https://github.com/ppy/osu-resources/tree/2dd67f9ba7db3c968aee12a7a965255b023d3554
© ppy Pty Ltd 及各资源作者 · CC BY-NC 4.0。原始 PNG 文件未修改；logo 显示时使用粉色、模式与Mods图标随主题单色着色。
品牌使用遵循 https://osu.ppy.sh/wiki/en/Brand_identity_guidelines 。
资源许可独立于本应用自有代码的 MIT License；非官方应用，无 ppy 背书关系。

S109-R2 / S110：Android音乐改用系统MediaPlayer流式解码 / 保调，WebView不再解码整首音乐PCM或启动保调Worker；保留上述上游模块、Worker及MPL修改源码 / 归属，不移除许可。MIT引擎仅局部增加nativeMusic音频解码跳过选项及mania Tap / 长条 / 灯光区间树、列素材缓存、可见身体裁剪 / repeat纹理；原规则集、判定和素材像素保持。

S115 / Android 0.2.4: The temporary S111 frame callback and performance overlay were removed. Existing nativeMusic support, mania optimizations and MPL source / notices are retained. No ruleset or SoundTouch DSP changes.
