OTape
oTAPE 1.0 · open specification · release candidate
以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。
oTAPE 1.0 · open specification · release candidate
oTAPE is an open file format for digital cassettes. One .otape file holds a whole tape: two sides of fixed length, each one continuous recording, plus the label, the J-card and the record tabs. It's self-contained and works offline.
Drawn in your browser from a few lines of appearance JSON. The reels follow the spec's tape-pack model.
Making a mixtape used to take an evening. You picked every song, sat through the recording and wrote the titles by hand. oTAPE is a file format that keeps those constraints. It isn't a new codec or a music player: it describes a whole cassette.
Each side is one continuous take. The silence between songs, a spoken intro, the clunk of the pause button: it's all part of the recording. Track markers can name the songs without splitting the side.
A fixed length, two sides on one tape, and a position you reach by winding, not jumping. Play side A to the end, flip the cassette, and you're at the start of side B.
Audio, label, J-card, booklet and history all live inside one .otape. It never links back to the MP3s it was recorded from, or to anything online.
Playing a tape never changes the file. The player remembers your place separately, the way a real tape stays wound where you left it.
A ZIP archive, one JSON manifest, AAC audio, PNG or JPEG artwork. Every part is a standard format you can open with existing tools.
Supply artwork at exact physical proportions, or describe the shell and label in a few lines of JSON that any player can draw.
This is the oTAPE Web Deck: about 1,200 lines of plain JavaScript, no libraries. It comes loaded with Gitsem, a C10 single that Mirat Can Bayrak wrote at 24 and recorded again at 42, and plays any .otape you drop here. Files stay in your browser and are never uploaded.
Gitsem by Mirat Can Bayrak, licensed under CC BY 4.0. Source.
These are the reader checks from §16.1. For full validation, including artwork proportions and the booklet profile, run otape_validate.py.
{}
Space play / stop ←→ rewind / fast forward F flip E eject
A cassette never sounded the same in two players. oTAPE players can now play a tape the way a machine of the era would have: a studio deck, a car stereo, a portable stereo that has seen better days. The sound changes on its way to your speakers. The file stays exactly as it was recorded.
−1 % 0 +1 %
Speed+0.00 %
Pitch over the last five seconds
Nothing is baked in. The machine is applied while you listen. Your .otape file isn't touched, recordings stay clean, and you can switch machines in the middle of a song.
Machines are files. Each one is a small open preset, an .otsound file, written in real-world units: percent of speed, decibels, hertz. So a portable stereo sounds the same in every oTAPE player. Six come built in; make your own and share it.
An .otape file is an ordinary ZIP archive with a fixed layout: a mimetype entry first, so tools can identify the file without unzipping it, then the manifest, one audio file per recorded side, and optional artwork and documents.
mimetype application/vnd.otape.cassette manifest.json the cassette, sides A and B, the look audio/ side-a.m4a AAC-LC, one continuous take side-b.m4a omitted while the side is blank artwork/ optional, fixed physical sizes cassette-face-a.png label-a.png jcard-front.jpg jcard-spine.png booklet-01.png … docs/ booklet.html, notes.md
manifest.json · a blank C60Copy
{ "format": "oTAPE", "format_version": "1.0", "cassette": { "id": "550e8400-e29b-41d4-a716-446655440000", "title": "Night Drive", "type": "C60", "side_length_seconds": 1800, "created_at": "2026-10-28T22:00:00Z" }, "sides": { "A": { "write_protect": "intact", "audio": null }, "B": { "write_protect": "intact", "audio": null } } }
Media typeapplication/vnd.otape.cassette
Apple UTIorg.otape.cassette
AudioAAC-LC in M4A, which every player must support. ALAC, FLAC and PCM are optional.
TimelineInteger frames at 44.1 or 48 kHz, exact to the sample
MagicPK\x03\x04 at offset 0, the media type at byte 38
VersionsMAJOR.MINOR. Minor versions only add optional fields, and unknown data is preserved.
05 The medium
A cassette's limits shape what goes on it, so oTAPE keeps them. You choose a length before you record, and each side has a record tab you can break off.
A custom tape is named like a real one: C plus its total length in minutes. Tape length and thickness follow the reel model in Appendix B.3 of the spec.
This isn't DRM. Like the tab on a real cassette, it protects a finished tape from being recorded over by accident, and anyone can tape over the hole.
Shell and label artwork, the J-card's front, spine and back flap, a fold-out booklet, liner notes and a dedication. Every image slot has a fixed size in millimeters, so artwork made in one app fits correctly in any other.
24 px/mm recommended, 12 px/mm minimum, aspect ratio within ±1%. Shell and label images must be transparent over the window and hub holes, so the player's reels show through.
A three-piece hi-fi for your Mac: the SP-2 CD/MP3 source player and the TU-01 internet radio tuner, both wired into the OT-1 cassette deck. Load your music or tune in a station, press REC, and the tape records in real time. Pause the player and the deck records silence. Save, and you have an .otape file. New in 1.2: tape sound, so any tape can play through a machine of the era.
oTAPE Studio Web is a cassette deck that runs in your browser, on any computer. Open a tape or start a blank one, then record onto it in real time from a playlist of your own songs, an internet radio station or any audio input. Save, and you have an .otape file. Nothing to install, no account, and your cassettes and songs never leave your device.
The spec is open: anyone can implement it in free or commercial software, with no royalties and no permission needed. A basic player comes down to the five steps below.
optional: enables the JSON Schema check
pip install -r tools/requirements.txt python3 tools/otape_validate.py my-mixtape.otape
VALID my-mixtape.otape
Specification 1.0Read online · HTML Specification sourceoTAPE-1.0.md · Markdown JSON Schemadraft 2020-12 Geometryevery dimension as JSON GitsemC10 single · 4.7 MB · by Mirat Can Bayrak, CC BY 4.0 Test Tonesexample cassette · C46 Blank C60example cassette ValidatorPython 3 · standard library oTAPE Studiov1.2 · macOS 14+ · .dmg · 2.6 MB oTAPE Studio Webstudio.otape.org ↗ Repositoryissues & pull requests ↗
Implementations
NamePlatformRole
oTAPE StudiomacOS 14+Reference recorder and player, by Jan Osio. Download .dmg oTAPE Studio WebChrome, Edge, SafariRecorder and player in the browser, by Jan Osio oTAPE Web DeckAny modern browserPlayer, on this page
Built something that reads or writes oTAPE? Open a pull request to add it to the list.
No feed decides what plays next. No account, server or subscription sits between you and a tape someone made for you. oTAPE is open so your cassettes can outlive any app that plays them, including ours.
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。