Skip to content

Simple Player v0.0.8

Latest

Choose a tag to compare

@TATboy210 TATboy210 released this 23 Sep 15:09
· 9 commits to master since this release

Simple Player v0.0.8


🇨🇳 中文

v0.0.8 · 播放列表进化 · 设置面板重构 · 音频与性能全面打磨

这一版不是简单增加几个按钮,而是对播放列表、设置面板、音频系统、玻璃 UI、Windows 原生交互和性能进行了系统性打磨。

播放列表

  • 新增批量删除与多选模式。
  • 支持全选、反选。
  • 删除操作增加确认条,明确提示不会删除本地文件。
  • 单条移除同样需要确认。
  • 删除正在播放的条目时自动处理播放队列。
  • 删除条目后同步清理对应播放断点与缩略图缓存。
  • 批量选中使用危险色边框,与播放中的蓝色高亮区分。
  • 固定边框占位,避免选中状态导致列表跳动。
  • 右键菜单改为统一的玻璃 UI。

缩略图

  • P-Thumb 缩略图系统全面升级。
  • 缓存身份加入路径、文件大小、修改时间和缩略图规格。
  • 文件内容替换后可以自动识别并重新生成缩略图。
  • 相同请求自动合并,避免重复解帧。
  • 原生缩略图生成并发限制为最多 2 个任务。
  • 增加失败重试机制。
  • 磁盘缓存支持自动清理和损坏缓存自愈。
  • 使用原子写入降低缓存损坏风险。
  • 按显示尺寸解码,降低内存占用。
  • 增加异步任务失效保护,避免旧请求覆盖新内容。

设置面板

  • 设置从传统弹窗改为停靠式浮动面板。
  • 设置面板迁入播放器控制层 Stack。
  • 修复设置打开后自定义标题栏无法拖动的问题。
  • 设置与播放列表采用统一的左右中三列布局。
  • 设置面板位于中间区域,并自动处理空间避让。
  • 统一毛玻璃、圆角、边框和动画设计。
  • 全屏状态下设置面板继续可用。

设置导航

  • 新增 XMB 风格两级设置导航。
  • L0:分区选择。
  • L1:具体设置内容。
  • 支持完整十字键导航。
  • ↑ / ↓:选择。
  • →:进入或切换。
  • ←:返回。
  • Enter:确认。
  • Esc:关闭设置面板。
  • 禁用分区不会进入键盘导航路径。
  • 关闭面板后自动恢复播放器焦点。
  • 设置界面打开期间不会误触播放器快捷键。

响应式 UI

  • 设置分区入口支持响应式居中。
  • 分区摘要支持自动循环跑马灯。
  • 空间足够时静态显示,空间不足时自动滚动。
  • 窗口缩放后自动重新计算布局。
  • 关于页面品牌信息改为自适应布局。
  • 修复控制栏超长文件名跑马灯尾部内容无法显示的问题。

毛玻璃与性能

  • 新增统一的 GlassBlurLayer。

  • 毛玻璃支持透明度、挂起和静态状态三重门控。

  • 隐藏状态下停止无意义的背景模糊采样。

  • 播放列表、设置面板、菜单、确认条等统一使用新的玻璃层。

  • 删除旧的 GlassTier.thick。

  • 玻璃体系统一为:

    • thin = 8.0
    • normal = 11.5
  • 进度条拖动期间暂停高成本玻璃模糊计算。

  • 菜单、确认条、错误卡片等小型组件使用较低模糊强度。

  • 设置面板 L0/L1 动画期间减少重复 Widget build。

  • 增加 Widget identity 缓存和 RepaintBoundary。

  • 缓存 Settings Services Bundle,避免无意义重建。

Windows 与 IME

  • 针对播放器没有文本输入框的场景进行 Windows IME 治理。
  • 普通播放器状态下禁用输入法上下文,避免中文候选框出现在窗口左上角。
  • 覆盖 FlutterView 子窗口。
  • IME 切换改为 Windows Platform Thread 执行。
  • 修正 Win32 IME Context 标志处理。
  • 原生文件选择器打开期间自动恢复 IME。
  • 文件选择器关闭后恢复播放器的 IME 状态。
  • 修复由于 IME Context 被解除而导致的 Windows 原生文件对话框崩溃。
  • Debug IME 测试输入框完成验证后已移除,不会进入正式版本。

空置态交互

  • 未加载媒体时,打开设置或播放列表后可以点击面板外关闭。
  • 面板完全关闭后,中央“打开文件”按钮恢复正常点击。
  • 修复空置态 GestureDetector 抢占中央按钮手势的问题。

音量系统

  • 音量控制改为感知曲线。
  • UI 和持久化继续使用统一的 0~1 音量空间。
  • 使用 mpv 原生 mute 属性实现静音。
  • 静音不再把音量强制设为 0。
  • 删除 UI 层重复的音量和静音快照。
  • 音量状态统一由引擎维护。
  • 调整音量时自动解除静音。
  • 修复 Windows WASAPI 首次播放和切换媒体时的音量跳变。
  • 键盘 ↑ / ↓ / M 增加 OSD 反馈。

音频设置

  • 正式开放音频设置分区。
  • 音频延迟设置现在可以直接访问。
  • 音频延迟支持写入引擎并持久化。
  • 视频设置分区继续保持灰显。

工程与稳定性

  • Kernel 层 debugPrint 全部迁移到 KernelLogger。
  • 清理多个历史遗留的无效回调、Token 和死代码。
  • 增加玻璃渲染后端 A/B 测试方案。
  • Windows 支持 SIMPLER_PLAYER_FORCE_SKIA=1 进行 Skia / Impeller 对比测试。
  • 加强设置、IME、缩略图、玻璃层、异步生命周期等专项测试。
  • flutter analyze:0 error。
  • 最终提交验证:flutter test 1697 全绿。

🇬🇧 English

v0.0.8 · Playlist Evolution · Settings Panel Redesign · Audio & Performance Refinement

This release goes beyond adding a few buttons. It significantly refines playlist management, settings, audio control, glass UI, Windows integration, and overall performance.

Playlist

  • Added bulk deletion and multi-selection mode.
  • Added Select All and Invert Selection.
  • Added a confirmation bar before removing items, clearly stating that local files are not deleted.
  • Single-item removal also requires confirmation.
  • Automatically handles the playback queue when removing the currently playing item.
  • Removes orphaned playback breakpoints and thumbnail cache entries.
  • Selected items now use a danger-colored border to distinguish them from the blue playing-state highlight.
  • Stable border allocation prevents layout jumps when selection changes.
  • Replaced the old context menu with the unified glass UI style.

Thumbnails

  • Major upgrade to the P-Thumb thumbnail system.
  • Cache identity now includes path, file size, modification time, and thumbnail specification.
  • Replaced files are automatically detected and regenerated.
  • Identical requests are coalesced to avoid duplicate decoding.
  • Native thumbnail generation is limited to a maximum of two concurrent jobs.
  • Added retry support for failed thumbnail generation.
  • Disk cache now supports automatic cleanup and damaged-cache self-healing.
  • Atomic cache publishing reduces the risk of corrupted cache files.
  • Thumbnails are decoded closer to their actual display size to reduce memory usage.
  • Added async invalidation protection to prevent stale requests from overwriting newer content.

Settings Panel

  • Replaced the traditional modal settings dialog with a docked floating panel.
  • Moved settings into the player's control-layer Stack.
  • Fixed the custom title bar becoming undraggable while settings were open.
  • Introduced a unified left-center-right layout for settings and playlist panels.
  • Settings are positioned in the center region with automatic space management.
  • Unified glass, corner radius, border, and animation design.
  • Settings remain available in fullscreen mode.

Settings Navigation

  • Added XMB-style two-level settings navigation.
  • L0: section selection.
  • L1: detailed settings.
  • Added full directional keyboard navigation.
  • ↑ / ↓: select.
  • →: enter or move forward.
  • ←: go back.
  • Enter: activate.
  • Esc: close the settings panel.
  • Disabled sections are excluded from keyboard navigation.
  • Player focus is restored automatically after closing settings.
  • Opening settings no longer causes accidental player shortcut activation.

Responsive UI

  • Responsive centering for settings section entries.
  • Added looping marquee text for section summaries.
  • Summaries remain static when there is enough space and scroll automatically when space is limited.
  • Layout is recalculated when the window is resized.
  • Improved responsive branding on the About page.
  • Fixed the existing long-filename marquee bug where trailing content could never appear.

Glass UI & Performance

  • Added a unified GlassBlurLayer.

  • Glass blur now supports opacity, suspension, and static enable/disable gating.

  • Hidden glass layers no longer perform unnecessary background blur sampling.

  • Playlist, settings, menus, confirmation bars, and related components now share the same glass layer system.

  • Removed the obsolete GlassTier.thick.

  • Glass blur is now standardized to:

    • thin = 8.0
    • normal = 11.5
  • Suspends expensive glass blur processing while scrubbing the progress bar.

  • Small transient components use a lower blur intensity.

  • Reduced repeated widget builds during L0/L1 settings transitions.

  • Added widget identity caching and RepaintBoundary isolation.

  • Stabilized the Settings Services Bundle to prevent unnecessary cache invalidation.

Windows & IME

  • Added Windows IME governance for a player without text input fields.
  • IME is normally disabled during regular playback to prevent Chinese candidate windows from appearing at the top-left corner.
  • FlutterView child windows are covered as well.
  • IME switching now runs on the Windows platform thread.
  • Corrected Win32 IME context flag handling.
  • Native file pickers temporarily restore IME while they are open.
  • IME is disabled again after the dialog closes.
  • Fixed native Windows file dialog crashes caused by a missing IME context.
  • The temporary debug IME test field was removed after UAT verification and is not included in release builds.

Empty-State Interaction

  • When no media is loaded, clicking outside an open settings or playlist panel now closes it correctly.
  • The central “Open File” button works normally when all panels are closed.
  • Fixed a GestureDetector consuming the central button's pointer events in the empty state.

Audio

  • Reworked volume control using a perceptual volume curve.
  • UI and persistence continue to use a unified 0–1 volume space.
  • Switched mute handling to mpv's native mute property.
  • Muting no longer forces the volume value to zero.
  • Removed duplicated UI-side volume and mute snapshots.
  • The engine is now the single source of truth for volume state.
  • Changing the volume automatically unmutes playback.
  • Fixed volume jumps during the first playback or media switching on Windows WASAPI.
  • Added OSD feedback for keyboard ↑ / ↓ / M volume controls.

Audio Settings

  • Audio settings are now officially enabled.
  • Audio delay can now be accessed directly.
  • Audio delay changes are persisted and applied through the engine.
  • Video settings remain disabled for now.

Engineering & Stability

  • Migrated remaining kernel-level debugPrint calls to KernelLogger.
  • Removed obsolete callbacks, tokens, and dead code.
  • Added an A/B testing protocol for glass rendering backends.
  • Added SIMPLER_PLAYER_FORCE_SKIA=1 for Skia / Impeller comparison testing on Windows.
  • Expanded targeted tests for settings, IME, thumbnails, glass layers, and async lifecycles.
  • flutter analyze: 0 errors.
  • Final verification: flutter test — 1697 tests passing.

🇰🇷 한국어

v0.0.8 · 플레이리스트 개선 · 설정 패널 개편 · 오디오 및 성능 최적화

이번 버전은 단순히 버튼 몇 개를 추가한 것이 아니라, 플레이리스트, 설정 패널, 오디오, 글래스 UI, Windows 연동 및 성능을 전반적으로 다듬었습니다.

플레이리스트

  • 일괄 삭제 및 다중 선택 모드를 추가했습니다.
  • 전체 선택 및 선택 반전을 지원합니다.
  • 삭제 전에 확인 바를 표시하며 로컬 파일은 삭제되지 않음을 명확히 표시합니다.
  • 단일 항목 삭제에도 확인 절차가 적용됩니다.
  • 현재 재생 중인 항목을 삭제하면 재생 큐를 자동으로 정리합니다.
  • 삭제된 항목의 재생 위치와 썸네일 캐시를 함께 정리합니다.
  • 선택된 항목은 위험 작업을 나타내는 색상의 테두리를 사용하며 재생 중인 항목의 파란색 강조와 구분됩니다.
  • 선택 상태 변경으로 인해 목록 크기가 흔들리지 않도록 고정 테두리 공간을 유지합니다.
  • 우클릭 메뉴를 통일된 글래스 UI 스타일로 변경했습니다.

썸네일

  • P-Thumb 썸네일 시스템을 대폭 개선했습니다.
  • 캐시 식별자에 경로, 파일 크기, 수정 시간, 썸네일 사양을 포함합니다.
  • 파일 내용이 교체되면 자동으로 새로운 썸네일을 생성합니다.
  • 동일한 요청을 병합하여 중복 디코딩을 방지합니다.
  • 네이티브 썸네일 생성 동시 작업 수를 최대 2개로 제한합니다.
  • 썸네일 생성 실패 시 재시도할 수 있습니다.
  • 디스크 캐시 자동 정리 및 손상 캐시 자동 복구를 지원합니다.
  • 원자적 캐시 저장 방식으로 손상 가능성을 줄였습니다.
  • 실제 표시 크기에 맞춰 디코딩하여 메모리 사용량을 줄였습니다.
  • 오래된 비동기 요청이 최신 결과를 덮어쓰지 않도록 무효화 보호를 추가했습니다.

설정 패널

  • 기존 모달 설정 창을 도킹형 플로팅 패널로 변경했습니다.
  • 설정 패널을 플레이어 컨트롤 레이어의 Stack으로 이동했습니다.
  • 설정을 열었을 때 사용자 지정 제목 표시줄을 드래그할 수 없던 문제를 수정했습니다.
  • 설정 패널과 플레이리스트 패널을 좌·중·우 구조로 통일했습니다.
  • 설정은 중앙 영역에 배치되며 공간에 따라 자동으로 조정됩니다.
  • 글래스 효과, 모서리, 테두리 및 애니메이션을 통일했습니다.
  • 전체 화면에서도 설정 패널을 사용할 수 있습니다.

설정 탐색

  • XMB 스타일의 2단계 설정 탐색을 추가했습니다.
  • L0: 설정 영역 선택.
  • L1: 상세 설정.
  • 방향키 기반 전체 키보드 탐색을 지원합니다.
  • ↑ / ↓: 선택
  • →: 진입 또는 다음 항목
  • ←: 뒤로
  • Enter: 적용
  • Esc: 설정 패널 닫기
  • 비활성화된 영역은 키보드 탐색에서 자동으로 제외됩니다.
  • 설정 패널을 닫으면 플레이어 포커스를 자동으로 복원합니다.
  • 설정을 사용하는 동안 플레이어 단축키가 실수로 실행되지 않습니다.

반응형 UI

  • 설정 영역 선택 항목을 반응형으로 중앙 정렬합니다.
  • 설정 요약 텍스트에 반복형 Marquee를 적용했습니다.
  • 공간이 충분하면 정적으로 표시하고, 부족하면 자동으로 스크롤합니다.
  • 창 크기가 변경되면 레이아웃을 다시 계산합니다.
  • 정보 페이지의 브랜드 영역을 반응형 레이아웃으로 개선했습니다.
  • 긴 파일명 Marquee에서 마지막 부분이 표시되지 않던 기존 문제를 수정했습니다.

글래스 UI 및 성능

  • 새로운 통합 GlassBlurLayer를 추가했습니다.

  • 투명도, 일시 중지 및 정적 활성화 여부에 따른 글래스 Blur 제어를 지원합니다.

  • 숨겨진 글래스 레이어는 불필요한 배경 Blur 연산을 수행하지 않습니다.

  • 플레이리스트, 설정, 메뉴, 확인 바 등이 동일한 글래스 레이어 시스템을 사용합니다.

  • 사용하지 않는 GlassTier.thick를 제거했습니다.

  • Blur 단계는 다음과 같이 통일했습니다:

    • thin = 8.0
    • normal = 11.5
  • 진행 바를 드래그하는 동안 고비용 Blur 계산을 일시 중지합니다.

  • 작은 일시적 UI 요소에는 더 낮은 Blur 강도를 사용합니다.

  • L0/L1 설정 전환 중 불필요한 Widget 재생성을 줄였습니다.

  • Widget identity 캐싱과 RepaintBoundary를 추가했습니다.

  • Settings Services Bundle을 안정적으로 유지하여 불필요한 캐시 무효화를 방지합니다.

Windows 및 IME

  • 텍스트 입력 필드가 없는 플레이어를 위한 Windows IME 관리 기능을 추가했습니다.
  • 일반적인 재생 상태에서는 IME를 비활성화하여 중국어 후보 창이 창의 왼쪽 위에 나타나는 문제를 방지합니다.
  • FlutterView 하위 창에도 동일한 처리를 적용합니다.
  • IME 전환을 Windows 플랫폼 스레드에서 실행하도록 수정했습니다.
  • Win32 IME Context 플래그 처리를 수정했습니다.
  • 네이티브 파일 선택 창이 열려 있는 동안에는 IME를 임시로 복원합니다.
  • 파일 선택 창이 닫히면 다시 플레이어 상태로 복귀합니다.
  • IME Context 해제로 인해 Windows 네이티브 파일 선택 창이 충돌하던 문제를 수정했습니다.
  • 디버그용 IME 테스트 입력 필드는 검증 완료 후 제거되었으며 정식 빌드에는 포함되지 않습니다.

빈 상태 상호작용

  • 미디어가 로드되지 않은 상태에서도 설정 또는 플레이리스트 패널 바깥을 클릭하면 패널을 닫을 수 있습니다.
  • 모든 패널이 닫힌 상태에서는 중앙 “파일 열기” 버튼이 정상적으로 동작합니다.
  • 빈 상태에서 GestureDetector가 중앙 버튼의 입력을 가로채던 문제를 수정했습니다.

오디오

  • 사용자 체감에 맞춘 음량 곡선을 적용했습니다.
  • UI와 설정 저장은 계속 0~1의 통일된 음량 공간을 사용합니다.
  • 음소거 처리에 mpv의 네이티브 mute 속성을 사용합니다.
  • 음소거 시 실제 음량을 0으로 변경하지 않습니다.
  • UI 측의 중복 음량 및 음소거 상태 저장을 제거했습니다.
  • 음량 상태를 엔진에서 단일하게 관리합니다.
  • 음량을 변경하면 자동으로 음소거가 해제됩니다.
  • Windows WASAPI에서 첫 재생 또는 미디어 전환 시 발생하던 음량 급변 문제를 수정했습니다.
  • 키보드 ↑ / ↓ / M 음량 조작에 OSD 피드백을 추가했습니다.

오디오 설정

  • 오디오 설정 영역을 공식적으로 활성화했습니다.
  • 오디오 지연 설정에 직접 접근할 수 있습니다.
  • 오디오 지연 설정은 엔진에 적용되고 저장됩니다.
  • 비디오 설정 영역은 현재 비활성화 상태로 유지됩니다.

엔지니어링 및 안정성

  • kernel 레이어의 debugPrint를 KernelLogger로 통합했습니다.
  • 사용되지 않는 콜백, Token 및 오래된 코드를 정리했습니다.
  • 글래스 렌더링 백엔드 비교를 위한 A/B 테스트 절차를 추가했습니다.
  • Windows에서 SIMPLER_PLAYER_FORCE_SKIA=1을 사용해 Skia / Impeller 비교 테스트를 수행할 수 있습니다.
  • 설정, IME, 썸네일, 글래스 레이어 및 비동기 생명주기에 대한 테스트를 강화했습니다.
  • flutter analyze: 오류 0건
  • 최종 검증: flutter test 1697개 전체 통과

🇯🇵 日本語

v0.0.8 · プレイリストの強化 · 設定パネルの刷新 · オーディオとパフォーマンスの改善

今回のバージョンでは、単にボタンを追加するだけでなく、プレイリスト、設定パネル、オーディオ、グラス UI、Windows 連携、パフォーマンスを全体的にブラッシュアップしました。

プレイリスト

  • 一括削除と複数選択モードを追加しました。
  • 「すべて選択」と「選択反転」に対応しました。
  • 削除前に確認バーを表示し、ローカルファイルは削除されないことを明示します。
  • 単一項目の削除にも確認手順を追加しました。
  • 現在再生中の項目を削除した場合、自動的に再生キューを整理します。
  • 削除された項目の再生位置とサムネイルキャッシュも同期して削除します。
  • 選択中の項目には危険操作を示すカラーを使用し、再生中の青色ハイライトと明確に区別します。
  • 選択状態が変わってもリストがガタつかないよう、枠線領域を固定しました。
  • 右クリックメニューを統一されたグラス UI スタイルに変更しました。

サムネイル

  • P-Thumb サムネイルシステムを大幅に強化しました。
  • キャッシュ識別情報にパス、ファイルサイズ、更新時刻、サムネイル仕様を含めるようにしました。
  • ファイル内容が置き換えられた場合、自動的に新しいサムネイルを生成します。
  • 同一リクエストを統合し、重複したデコードを防止します。
  • ネイティブサムネイル生成の同時実行数を最大 2 件に制限しました。
  • サムネイル生成失敗時の再試行に対応しました。
  • ディスクキャッシュの自動整理と破損キャッシュの自己修復に対応しました。
  • アトミック書き込みによりキャッシュ破損のリスクを低減しました。
  • 実際の表示サイズに近いサイズでデコードし、メモリ使用量を削減しました。
  • 古い非同期リクエストが新しい結果を上書きしないよう無効化保護を追加しました。

設定パネル

  • 従来のモーダル設定ダイアログをドッキング型フローティングパネルへ変更しました。
  • 設定パネルをプレイヤーのコントロールレイヤー Stack に移動しました。
  • 設定を開いているときにカスタムタイトルバーをドラッグできなかった問題を修正しました。
  • 設定パネルとプレイリストを左・中央・右の統一レイアウトにしました。
  • 設定パネルは中央領域に配置され、利用可能なスペースに応じて自動調整されます。
  • グラス効果、角丸、ボーダー、アニメーションを統一しました。
  • フルスクリーン中も設定パネルを利用できます。

設定ナビゲーション

  • XMB スタイルの 2 レベル設定ナビゲーションを追加しました。
  • L0:設定セクション選択
  • L1:詳細設定
  • 十字キーによるキーボード操作に対応しました。
  • ↑ / ↓:選択
  • →:進む / 入る
  • ←:戻る
  • Enter:適用
  • Esc:設定パネルを閉じる
  • 無効化されているセクションはキーボードナビゲーションから自動的に除外されます。
  • 設定パネルを閉じるとプレイヤーのフォーカスを自動的に復元します。
  • 設定操作中にプレイヤーのショートカットが誤作動しないようにしました。

レスポンシブ UI

  • 設定セクションをウィンドウサイズに応じて中央配置します。
  • セクション概要にループ型 Marquee を追加しました。
  • スペースに余裕がある場合は静止表示し、狭い場合は自動スクロールします。
  • ウィンドウサイズ変更時にレイアウトを自動的に再計算します。
  • About ページのブランド表示をレスポンシブ化しました。
  • 長いファイル名の Marquee で末尾が表示されなかった既存の問題を修正しました。

グラス UI とパフォーマンス

  • 統一された GlassBlurLayer を追加しました。

  • 透明度、サスペンド、静的有効/無効による Blur 制御に対応しました。

  • 非表示状態では不要な背景 Blur サンプリングを停止します。

  • プレイリスト、設定、メニュー、確認バーなどで共通のグラスレイヤーを使用します。

  • 使用されなくなった GlassTier.thick を削除しました。

  • Blur レベルを以下の 2 段階に統一しました。

    • thin = 8.0
    • normal = 11.5
  • プログレスバーをドラッグしている間、高負荷な Blur 計算を一時停止します。

  • 小型の一時 UI コンポーネントには低い Blur 強度を使用します。

  • L0/L1 設定切り替え時の不要な Widget 再構築を削減しました。

  • Widget identity キャッシュと RepaintBoundary を追加しました。

  • Settings Services Bundle を安定させ、不要なキャッシュ無効化を防止しました。

Windows と IME

  • テキスト入力欄を持たないプレイヤー向けの Windows IME 管理を追加しました。
  • 通常の再生状態では IME を無効化し、中国語入力候補ウィンドウが画面左上に表示される問題を防ぎます。
  • FlutterView の子ウィンドウにも対応しました。
  • IME 切り替えを Windows の Platform Thread 上で実行するように変更しました。
  • Win32 IME Context フラグ処理を修正しました。
  • ネイティブファイル選択ダイアログを開いている間だけ IME を一時的に復元します。
  • ダイアログ終了後は再びプレイヤーの IME 状態へ戻します。
  • IME Context の解除によって Windows のネイティブファイルダイアログがクラッシュする問題を修正しました。
  • Debug 用 IME テスト入力欄は検証完了後に削除され、正式版には含まれません。

空状態の操作

  • メディア未読み込み時でも、設定やプレイリストパネルの外側をクリックして閉じられるようにしました。
  • すべてのパネルが閉じている場合、中央の「ファイルを開く」ボタンが正常に操作できます。
  • 空状態で GestureDetector が中央ボタンの入力を奪っていた問題を修正しました。

オーディオ

  • ユーザーの聴感に合わせた音量カーブを導入しました。
  • UI と設定保存では引き続き 0~1 の統一された音量空間を使用します。
  • ミュート処理を mpv のネイティブ mute プロパティへ変更しました。
  • ミュート時に実際の音量値を 0 に変更しません。
  • UI 側の重複した音量・ミュート状態を削除しました。
  • 音量状態をエンジンで一元管理します。
  • 音量を変更すると自動的にミュートを解除します。
  • Windows WASAPI で初回再生やメディア切り替え時に発生する音量ジャンプを修正しました。
  • キーボード ↑ / ↓ / M に OSD フィードバックを追加しました。

オーディオ設定

  • オーディオ設定セクションを正式に有効化しました。
  • オーディオ遅延設定へ直接アクセスできるようになりました。
  • オーディオ遅延設定はエンジンへ適用され、保存されます。
  • ビデオ設定セクションは引き続き無効状態です。

エンジニアリングと安定性

  • kernel レイヤーの debugPrint を KernelLogger に統合しました。
  • 使用されていないコールバック、Token、古いコードを整理しました。
  • グラスレンダリングバックエンドの A/B テスト手順を追加しました。
  • Windows では SIMPLER_PLAYER_FORCE_SKIA=1 を使用して Skia / Impeller の比較テストができます。
  • 設定、IME、サムネイル、グラスレイヤー、非同期ライフサイクルのテストを強化しました。
  • flutter analyze:エラー 0 件
  • 最終検証:flutter test 1697 件すべて成功