Release MIDI Tools v0.1.0
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Accessibility
|
||||
|
||||
All import, edit, filter, playback and export controls use native labelled controls. Status changes use a polite live region, warnings include text, tables have header cells and the piano roll has an accessible SVG title with per-note descriptions. The timeline is keyboard-scrollable, focus is visible, layouts collapse on narrow screens and the shared shell provides system/light/dark themes. Reduced-motion preferences are respected.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Architecture
|
||||
|
||||
`core/midi.ts` turns a bounded SMF byte stream into inert tracks and absolute-tick events. Chunk boundaries, four-byte VLQs, running status, event counts, SysEx size, PPQN division and known fixed-length meta events are validated before data is exposed. Editing functions clone this model and preserve stable event ordering.
|
||||
|
||||
`Workbench.tsx` keeps the last valid document during failed imports or operations. The SVG piano roll renders at most 5,000 notes. Playback maps ticks through the tempo map, creates fixed application-owned sine oscillators and can stop immediately by closing the active `AudioContext`; imported bytes never become code or remote references.
|
||||
|
||||
All Vite assets use relative paths for nested portal mounting. Release packaging fixes ZIP ordering, timestamps and permissions.
|
||||
@@ -0,0 +1,5 @@
|
||||
# Privacy and security
|
||||
|
||||
MIDI bytes are read into browser memory only. The application has no telemetry, account, database, remote asset or network client. CSP restricts connections and media to the application origin or local blobs.
|
||||
|
||||
Parsing and export enforce an 8 MiB file bound, 256 tracks, 250,000 events, a 1 MiB aggregate SysEx bound, four-byte VLQs and signed-safe absolute ticks. Playback is explicitly user started, schedules at most 2,000 notes and is stopped by closing its audio context. Imported text appears only as escaped React text and is never interpreted as markup, script, URL or shader.
|
||||
Reference in New Issue
Block a user