playback timing
Timing Engine
Timing engine của Sky Auto Player lên lịch nốt theo timeline căn theo frame, gửi hợp âm trong một lệnh SendInput duy nhất, giữ nốt hold đủ thời gian và đo độ trễ phía sender để giảm drift có hệ thống. Độ chính xác phía game phụ thuộc vào Windows và vòng lặp sampling của game.
Cập nhật: 2026-08-08
“Timing” có nghĩa gì ở đây
Sky Auto Player kiểm soát phía sender — khi nào nó gọi SendInput. Phía game — khi nào
game đăng ký và xử lý phím — phụ thuộc vào message queue Windows, tần số polling input của
game, và phần cứng của bạn. Đây là hai điều khác nhau.
Timing engine được thiết kế để tối thiểu hóa lỗi phía sender. Nó không — và không thể — đảm bảo game nhận phím đúng lúc nhạc cần.
Lên lịch nốt nhạc
Thay vì phát lại một chuỗi delay cố định, Sky Auto Player đặt từng nốt trên một timeline được điều khiển bởi tempo của sheet và cài đặt FPS bạn cấu hình trong Sky. Khi scheduler đến vị trí của một nốt trên timeline đó, nó dispatch phím.
Scheduler là thuần túy: không phụ thuộc wall-clock và không có lệnh gọi SendInput.
Nó tạo ra một lịch các sự kiện; các lớp infrastructure và platform thực thi các sự kiện đó.
Sự tách biệt này giúp logic timing có thể unit-test với đồng hồ được kiểm soát.
Căn hợp âm
Các nốt thuộc cùng một hợp âm được gửi trong một lệnh SendInput duy nhất chứa tất cả
các phím trong hợp âm đó. Điều này loại bỏ độ lệch phía sender giữa các nốt phải vang lên
đồng thời. Game xử lý chúng đồng thời hay không tùy vào vòng lặp sampling của chính game.
Ngữ nghĩa hold
Nốt hold (phím được giữ) được nhấn vào thời điểm bắt đầu nốt và nhả sau thời gian ký âm
đầy đủ. Nốt tiếp theo đến sát không khiến hold bị cắt ngắn — hold và nốt tiếp theo được
gửi như các sự kiện SendInput riêng biệt trên vị trí timeline của chúng.
Chọn hold-frame
Thời gian hold được biểu diễn theo bội số của một frame game ở FPS đã cấu hình:
| Lựa chọn | Thời gian ở 60 FPS |
|---|---|
| 1,0 frame (mặc định) | ~16,7 ms |
| 1,25 frame | ~20,8 ms |
| 1,5 frame | ~25,0 ms |
Chọn 1,25 hoặc 1,5 nếu nốt hold ngắn không đăng ký ổn định trên máy của bạn. Cài đặt FPS phải khớp với FPS cấu hình trong Sky để timing hold chính xác.
Bù độ trễ
Sky Auto Player đo khoảng thời gian giữa khi lệnh gọi SendInput được lên lịch và khi
nó thực sự hoàn thành, xây dựng profile đang chạy về lỗi completion phía sender. Nó dùng
số đo này để điều chỉnh lead time của các dispatch tương lai — gửi sớm hơn một chút để
bù cho độ trễ quan sát được.
Đây là bù phía sender mà thôi. Sự thích ứng giảm drift có hệ thống do OS scheduling jitter trên máy của bạn. Nó không điều chỉnh cho network latency, frame pacing của game, hay bất kỳ yếu tố nào ở phía game. Telemetry hiển thị trong HUD báo cáo kết quả phía sender đo được, không phải đảm bảo timing tuyệt đối.
Rust dispatch worker
Một Rust worker sở hữu vòng lặp dispatch: biên dịch lịch nốt nhạc, timing wait độ phân
giải cao, theo dõi focus, lệnh gọi SendInput, dọn dẹp, và telemetry native. Tauri/React
render desktop GUI chính thức; native Rust services sở hữu application policy. Production path
đi qua native Rust services và Tauri shell.
Giới hạn đã biết
- Độ chính xác timing về phía game không do Sky Auto Player kiểm soát.
- Các đoạn nhạc rất nhanh (BPM cực cao hoặc arpeggio dày đặc) có thể vượt quá khả năng sampling rate của game, bất kể phím được gửi chính xác đến mức nào.
- MMCSS real-time scheduling yêu cầu Windows 10 hoặc 11 và không có sẵn trên các nền tảng khác.
Sẵn sàng thử chưa?
Tải Sky Auto Player v4.3.0 và bắt đầu phát nhạc trên Windows.