Repository navigation
Releases: PlutoKeating/Project.UltraPads
Release list
UltraPads v0.2.1
修复在设置里切换输出设备后无声、设置页白屏的问题。
修复
- 选定的输出设备打不开时(例如连着蓝牙时选择手机扬声器)应用整个无声、重启也无法恢复:现在自动回退到系统默认输出。
Android 始终以立体声打开输出流(部分机型拒绝单声道的低延迟轨道)。 - 音频未运行时设置页白屏(延迟计算得到 NaN)。
- 设置「输出设备」显示设备名称,选择未生效时注明「不可用,已使用系统默认输出」;新增「跟随系统」选项。
改进
- Android:默认使用设备原生输出采样率(不需要重采样才能拿到低延迟快速轨道),低延迟流打开后缓冲设为 2 个 burst。
关于延迟:连接蓝牙耳机时,系统报告的蓝牙链路延迟通常在 100–200 ms(vivo X200 Pro mini 实测约 140 ms),这是蓝牙 A2DP 的编码与传输缓冲,
应用无法绕过;演奏请使用手机扬声器、有线耳机或 USB-C 耳机(应用侧实测:快速轨道、48 kHz、512 帧缓冲约 10.7 ms)。
Linux:curl -fsSL https://ultrapads.plutokeating.beer/install | bash(再次运行即更新;应用内也会提示新版本)
Android:下载对应 ABI 的 APK(大多数手机选 arm64-v8a),或访问 https://ultrapads.plutokeating.beer
UltraPads v0.2.0
即刻出声、触摸滑动触发、一首歌多组音色,演奏页精简。
Linux 系统要求变化:0.2.0 起 Linux 版使用 PipeWire 原生音频通路,需要 PipeWire ≥ 0.3.65 与 glibc ≥ 2.36
(Debian 12+、Ubuntu 23.04+、Fedora 38+、Arch 等)。不再支持 Ubuntu 22.04。安装脚本会自动补装缺少的运行库。
改进
- 按下即刻出声(Linux):音频改走 PipeWire 原生通路(cpal
pipewire),不再经过 ALSA 兼容层的插件缓冲与线程交接;
流线程经 rtkit 提为实时优先级(cpalrealtime-dbus,SCHED_RR)。实测指令 → 发声约 3.8 ms(0.1.0 约 10–18 ms),
高负载下欠载由数百次降到 0。没有 PipeWire 时自动回退 ALSA。 - Android 独占音频通路:输出流请求 AAudio
EXCLUSIVE(MMAP)模式,支持的设备上绕过系统混音器、延迟最低;
不支持时自动回落到共享模式(cpal 补丁版,见third_party/cpal/ULTRAPADS_PATCH.md)。 - 触摸到即触发:按下或手指滑进 pad 都立即发声(每次触碰都重触发),滑出 / 抬起时松开;在空 pad 上按下再滑进有声音的 pad 同样触发。
- pad 按下当帧即全亮(不再等动画控制器下一帧起步)。
新增
- 一首歌多组音色:每首歌 1–7 组(A–G,每组 12 个 pad),演奏页功能行的切换条一键切换,已在播放的声音(包括 Loop)不中断;
键盘 Tab 依次切组。编辑器可新增、左右移动、删除音色组(实时生效,删除有声音的组需确认)。
Kit 格式layout.padCount支持 12 的倍数(最多 84)、banks支持 A–G;1–2 组的 Kit 读写逐字节不变。 - 引擎:pad 混音并入采样器节点,音频图端口数不再随 pad 数增长(音频线程仍零分配)。
变更
- 演奏页顶栏直接显示歌名(去掉「音色包 / KIT」前缀),右上角改为设置入口(原视频教程按钮);⋮ 展开行不再重复放设置。
- 移除「学习演奏」(教程模式、时间轴判定、速度框)与视频教程链接;引擎与 FFI 的教程能力保留。
- 发布版 Linux 包改在 Debian 12 容器中构建;安装脚本的依赖自动安装加入 PipeWire / D-Bus 运行库,
root 下不经 sudo、GTK 依赖链归入 GTK 包、装后复查、失败重试一次(Ubuntu 24.04 / Debian 12 / Fedora 41 / Arch 容器实测)。 - up-cli 容器镜像加入 PipeWire / D-Bus 运行库。
Linux:curl -fsSL https://ultrapads.plutokeating.beer/install | bash(再次运行即更新;应用内也会提示新版本)
Android:下载对应 ABI 的 APK(大多数手机选 arm64-v8a),或访问 https://ultrapads.plutokeating.beer
UltraPads v0.1.0
一键安装、应用内更新与正式签名,外加按键延迟优化。
从 0.0.1 升级 Android 版:0.1.0 起 APK 改用正式密钥签名(证书 SHA-256
bb7dd4d8…f8362816),与 0.0.1 的调试签名不同,需要先卸载旧版再安装(会清空本机曲库,
可先用「我的设备」同步到电脑)。之后的版本都能在应用内直接更新。Linux 不受影响。
新增
- Linux 一键安装 / 更新:
curl -fsSL https://ultrapads.plutokeating.beer/install | bash。
免 sudo,装到~/.local/opt/ultrapads/versions/<版本>(current原子切换、保留上一版可回滚),
写入~/.local/bin/ultrapads、桌面项与图标;再运行即升级;下载走 Cloudflare 边缘镜像(失败回退 GitHub)并核对 SHA-256;
缺少 GTK 3 / ALSA 时询问后用系统包管理器安装。选项--version、--prefix、--no-desktop、--no-modify-path、--uninstall、--yes。 - 官网与发布接口
ultrapads.plutokeating.beer(website/,Cloudflare Worker):下载落地页(中 / 英)、
/api/version(最新正式版清单,?format=sh供脚本读取)、/dl/<tag>/<文件>(按 GitHub 记录的 sha256 核对后边缘缓存的镜像)、
/dl/latest/<平台>。 - 应用内更新(新 crate
runtime/up-update+ FFIupdate_*):启动后静默检查一次(只发 GET,设置里可关),
有新版时提示一次;「设置 → 关于 → 软件更新」可下载、查看更新内容。Linux(脚本安装)就地装入新版本并重启;
Android 下载并校验 APK 后交给系统安装器;手动解压的副本只提示并打开下载页。 - Linux arm64 发布包(树莓派 / ARM 笔记本)。
- 发布流水线
.github/workflows/release.yml:推送 tag 即构建 Linux x64 / arm64、Android 三个 ABI,
核对 APK 签名证书,生成SHA256SUMS.txt并创建 Release;just bump/just release/just package-linux。 - 品牌标志定稿:UP 组合字(粉紫果冻 U + 青色 pad 竖笔 + PlutoKeating 琥珀 orb),源文件
design/brand/ultrapads-mark.svg。
just icons由它生成 Linux、Windows、macOS、iOS、Android(含 adaptive icon)、Web 与官网的全部图标;
Flutter Web 的 manifest / 页面标题改为 UltraPads 与品牌底色,替换模板默认值。 - Linux 桌面项(
dev.ultrapads.ultrapads.desktop,类别 Audio / Music);窗口标题与应用名统一为 UltraPads。
变更
- Android release 包使用正式签名(密钥不入库,见
docs/QUICK_START.md「发布」);新增REQUEST_INSTALL_PACKAGES权限(应用内更新)。 - 设置页「关于」的版本号改为运行时读取(
app_version),不再写死。
改进
- 按键响应延迟:
- Android:启用 cpal
realtimefeature,AAudio 流请求PERFORMANCE_MODE_LOW_LATENCY(之前为 NONE,走普通混音路径,
拿不到 FAST 轨道);缓冲始终交给 AAudio 按 burst 回调,不再接受固定缓冲请求。设置页在 Android 上不再显示缓冲档位。 - 桌面默认缓冲 256 → 128 帧(本机 PipeWire 实测:命令 → DAC 估计由约 18 ms 降到约 10 ms,无 xrun)。
- UI:演奏页不再随走带位置(播放时约 60 Hz)整页重建;FFI 客户端不再为每个 Transport 事件同步调用一次
snapshot()。
- Android:启用 cpal
Linux:curl -fsSL https://ultrapads.plutokeating.beer/install | bash(再次运行即更新;应用内也会提示新版本)
Android:下载对应 ABI 的 APK(大多数手机选 arm64-v8a),或访问 https://ultrapads.plutokeating.beer
UltraPads v0.0.1
Note
此版本的安装包已下线,请安装最新版本(0.1.0 起改用正式签名,从 0.0.1 升级需先卸载)。
UltraPads 的首个可用版本:Flutter 界面 + Rust 实时音频引擎,包含演奏、教程、曲库、编辑 Kit、录音、皮肤、设置,以及个人多设备协同(局域网 Hub)。
下载
| 平台 | 文件 |
|---|---|
| Linux x64 | ultrapads-0.0.1-linux-x64.tar.gz:解压后运行 ./ultrapads,需要 GTK 3 和 ALSA |
| Android 8.0+(大多数手机) | ultrapads-0.0.1-android-arm64-v8a.apk |
| Android 旧 32 位设备 | ultrapads-0.0.1-android-armeabi-v7a.apk |
| Android 模拟器 / x86 设备 | ultrapads-0.0.1-android-x86_64.apk |
| 无头 CLI | docker pull ghcr.io/plutokeating/ultrapads-cli:0.0.1 |
校验和见 SHA256SUMS.txt。
亮点
- 演奏:24 pad(A/B 两组),One-shot / Loop / Gate,choke 组,按小节量化启动,实时变速(1.0 / 0.7 / 0.5),单 pad 变调 ±12 半音。音频线程零分配零锁。
- 教程:时间轴判定 PERFECT / TOO FAST / TOO SLOW / MISS,随变速同比缩放。
- 曲库:开放的
.upkit格式(SFZ + JSON 旁挂,BLAKE3 内容寻址),支持导入 SFZ / WAV 文件夹,可导出 DAWproject。首次启动自带 2 个 CC0 示例 Kit。 - 编辑 Kit、录音与作品、皮肤:换音色、裁剪试听;录音生成带波形的作品卡,可循环、导出 WAV;3 主题 + 16 预设 + 自定义皮肤。
- 个人 Hub:mDNS 发现、6 位配对码(SPAKE2)+ 双向 TLS、曲库增量同步、手机作为电脑的实时打击垫控制器。无公共服务器。
- 中英双语,设计 token 全局复用,应用内设计画廊。
验证范围
本版只在 Linux x64 与 Android 模拟器(x86_64) 上验证:just check 全部通过(Rust 206 个测试、Dart 131 个测试、硬编码 lint 0 违规),真实音频设备发声、Linux ↔ Android Hub 端到端联调均已跑通。详见 docs/research/v0.0.1-verification.md。
注意
- Android 包暂用调试密钥签名。以后换正式密钥时,需要先卸载旧版再安装。
- arm 包已构建但未在真机验证;同一 Wi-Fi 下的真机自动发现未验证。
- 仓库与安装包不包含任何第三方私有素材,界面使用开源占位资源。
完整变更见 CHANGELOG.md。