O磁带
OTape

原始链接: https://www.otape.org/

oTAPE 是一种开放、自包含的数字磁带文件格式。一个 .otape 文件——包含 JSON 清单的 ZIP 压缩包——保存两个固定长度的连续侧面录音,以及标签、J 卡、小册子、艺术品和历史记录,不链接外部文件或云服务。它保留了磁带约束:实时录音、卷绕而非跳转、固定侧面长度、可折断的录音卡舌,以及单独记住播放位置的只读播放。音频通常为 M4A 中的 AAC-LC,艺术品使用固定物理尺寸。外观可以用 JSON 描述。播放器可应用可选、非破坏性的“磁带声”机器预设。参考工具包括 oTAPE Studio 和用于录音与播放的网页应用。该规范开放且免版税,允许开发者构建播放器和录音机,并提供验证工具。目标是打造超越任何单一应用、由用户拥有的耐用磁带。

Hacker News 新帖 | 过去 | 评论 | 提问 | 展示 | 工作 | 提交 登录 OTape (otape.org) 11 分 由 dotmanish 4 小时前 | 隐藏 | 过去 | 收藏 | 2 条评论 帮助 geocar 6 分钟前 | 下一条 [–] 呃,这是带额外步骤的 wav 文件吗?我错过了什么?编辑:https://www.otape.org/spec/#73-codecs 抱歉,这是带额外步骤的 mp4 音频文件…… 回复 BatchJob 8 分钟前 | 上一条 [–] 我只能说,太棒了! 回复 考虑申请 YC 2027 冬季批次!申请开放至 11 月 2 日。 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

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.

Extension
.otape

Container
ZIP + JSON

Drawn in your browser from a few lines of appearance JSON. The reels follow the spec's tape-pack model.

01 The idea

The slow way,
on purpose.

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.

  1. 01

    A cassette,
    not a playlist.

    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.

  2. 02

    It behaves
    like tape.

    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.

  3. 03

    The file is
    the object.

    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.

  4. 04

    Listening
    is read-only.

    Playing a tape never changes the file. The player remembers your place separately, the way a real tape stays wound where you left it.

  5. 05

    Open and
    simple.

    A ZIP archive, one JSON manifest, AAC audio, PNG or JPEG artwork. Every part is a standard format you can open with existing tools.

  6. 06

    Each tape has
    its own look.

    Supply artwork at exact physical proportions, or describe the shell and label in a few lines of JSON that any player can draw.

02 Try it

Put a tape
in the deck.

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.

Web cassette deck  OT-W RECTAPE RUN

Time-:--

Remain-:--

Tape---

NO CASSETTE

Now—

Tape mapclick to wind

0:00

Drop the cassetteIt's read right here, in your browser.

Space play / stop ←→ rewind / fast forward F flip E eject

03 Tape sound

Same tape.
Another machine.

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.

Tape sound selector  TS-6

Choose a machine
−1 % 0 +1 %

Speed+0.00 %

Pitch over the last five seconds

How it's done

  1. WobbleNo motor turns perfectly evenly. A slow drift in speed bends the pitch (wow), a fast shiver roughens it (flutter). The player reads the music a hair early or late, moment by moment, so the pitch wanders just as much as it did on that machine.
  2. HissEvery tape has its own bed of noise. It runs while the tape runs, between songs and over blank tape too, and stops the moment you press stop.
  3. WarmthRecord a tape hot and it rounds off the peaks, the treble first. That gentle squeeze is a big part of why cassettes sound warm.
  4. WearOld tape loses its top end, drops out for a split second where the coating has worn thin, and a head knocked out of line smears the stereo picture.

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.

04 Inside the file

Unzip a
cassette.

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.

night-drive.otapeZIP

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 C60

{
  "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 type
application/vnd.otape.cassette

Apple UTI
org.otape.cassette

Audio
AAC-LC in M4A, which every player must support. ALAC, FLAC and PCM are optional.

Timeline
Integer frames at 44.1 or 48 kHz, exact to the sample

Magic
PK\x03\x04 at offset 0, the media type at byte 38

Versions
MAJOR.MINOR. Minor versions only add optional fields, and unknown data is preserved.

05 The medium

Fixed length.
Breakable tabs.

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.

Snap the tab

AB

intact→ broken⇄ taped_over

Recording allowed:

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.

06 The paper

Artwork,
to the millimeter.

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.

flap 25.4spine 12.7front 63.5 mm
SlotmmRecommended px
Cassette face A / B100.4 × 63.82410 × 1531
Label A / B89.0 × 42.02136 × 1008
J-card front63.5 × 101.61524 × 2438
J-card spine12.7 × 101.6305 × 2438
J-card back flap25.4 × 101.6610 × 2438
Booklet panel63.5 × 101.61524 × 2438
Thumbnailsquare1024 × 1024

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.

07 The reference app

oTAPE Studio.

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: the SP-2 source player next to the OT-1 cassette deck, which is recording a C46 from the TU-01 internet radio tuner below it. The tuner's display shows the station on preset 2 and the current song.
  • Records in real timeThe head overwrites the tape in place at 44.1 kHz. Blank tape stays blank, and nothing is recorded faster than it plays.
  • Radio on the dialThe TU-01 tunes about 50,000 stations from the Radio Browser directory. Song titles become track markers on the tape and lines on the J-card.
  • Blanks and a designerC46 to C120 blanks with working tape counters and reels. The designer covers the shell, label, lettering, J-card, artwork and record tabs, starting from eight presets.
  • Careful with your filesSaves AAC at 256 kb/s and re-encodes only the sides you changed. Data written by other oTAPE apps is left intact.

08 In your browser

Studio,
on the web.

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.

  • Three sourcesA player for your MP3, AAC, WAV and FLAC files, the Radio Browser directory of internet stations, and line in from any audio input of the computer.
  • A real transportPlay, wind at speed, flip and stop at the ends. Reels and counter follow the tape-pack model, and the record tab protects finished sides.
  • Checks every tapeOpens any oTAPE 1.0 cassette, validates it fully and names every problem with its section of the spec. Blanks from C46 to C120, or any custom length.
  • InstallableAdd it as an app and it opens .otape files from your system. Deck keys and media keys work, and it saves AAC at 256 kb/s.

09 For developers

Write a player
in an afternoon.

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.

  1. Open the ZIP and read manifest.json. Check format == "oTAPE" and that the major version is 1.
  2. For each side, decode audio.file and treat it as exactly recorded_frames long. The rest of the side is blank tape.
  3. Play from the head position. Use FF and REW to wind instead of jumping. Flipping maps position p to L − p.
  4. Draw the cassette from appearance, or from the artwork images if there are any.
  5. Remember the head position locally, per cassette.id. Playing never modifies the file.

Validate a cassette

# optional: enables the JSON Schema check
pip install -r tools/requirements.txt
python3 tools/otape_validate.py my-mixtape.otape
VALID   my-mixtape.otape

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.

Own the tape.
Not the platform.

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.

No cloud · no accounts · just tapes

联系我们 contact @ memedata.com