oTAPE is een open, zelfvoorzienend digitaal bestandsformaat (.otape) dat is ontworpen om de nostalgische ervaring van fysieke cassettebandjes na te bootsen. In plaats van een eenvoudige playlist, simuleert oTAPE een volledige cassette inclusief twee zijden van vaste lengte, artwork (zoals de J-card) en fysieke beperkingen zoals het handmatig omdraaien van de tape en het spoelen.
Technisch gezien is een .otape-bestand een ZIP-archief dat een JSON-manifest, AAC-audio en afbeeldingen bevat. Een uniek aspect is de simulatie van 'cassettesound' (waaronder wow, flutter en hiss), die via .otsound-presets per speler kan variëren zonder het bronbestand aan te passen.
Er zijn verschillende tools beschikbaar, waaronder de browser-gebaseerde Web Deck en de uitgebreidere oTAPE Studio voor Mac. De filosofie achter het project is dat de gebruiker eigenaar moet blijven van de content ("bezit de tape, niet het platform"), waardoor het formaat onafhankelijk is van accounts of abonnementen.
oTAPE: Het open digitale cassetteformaat
Technische basisgegevens:
- Extensie:
.otape
- Container: ZIP + JSON
- Licentie: CC BY 4.0
---
1. Het idee: De langzame weg, met opzet
Het maken van een mixtape kostte vroeger een hele avond. Je koos elk nummer zorgvuldig uit, luisterde naar de opname en schreef de titels met de hand op. oTAPE is een bestandsformaat dat deze beperkingen behoudt. Het is geen nieuwe codec of muziekspeler, maar een beschrijving van een volledige cassette.
Een cassette, geen playlist
Elke zijde is één continue opname. De stilte tussen nummers, een gesproken introductie of de klik van de pauzeknop maken deel uit van de opname. Trackmarkers kunnen nummers benoemen zonder de zijde op te splitsen.
Gedrag van een tape
Het formaat hanteert een vaste lengte, twee zijden op één tape en een positie die je bereikt door te spoelen in plaats van te springen. Wanneer je zijde A tot het einde hebt afgespeeld, moet je de cassette omdraaien om bij het begin van zijde B te komen.
Het bestand is het object
Audio, label, J-card, booklet en historie bevinden zich allemaal in één .otape-bestand. Er zijn geen externe links naar de oorspronkelijke MP3's of online bronnen.
Luisteren is 'read-only'
Het afspelen van een tape verandert het bestand nooit. De speler onthoudt de positie apart, vergelijkbaar met hoe een echte tape blijft staan waar je hem hebt achtergelaten.
Open en simpel
Het formaat maakt gebruik van standaardformaten die met bestaande tools geopend kunnen worden: een ZIP-archief, één JSON-manifest, AAC-audio en PNG- of JPEG-artwork.
Een eigen uiterlijk
Elke tape kan een eigen uiterlijk hebben. Dit kan door artwork aan te leveren in exacte fysieke proporties, of door de cassette en het label te beschrijven in een paar regels JSON die door elke speler getekend kunnen worden.
---
2. Probeer het: De Web Deck
De oTAPE Web Deck is een speler geschreven in ongeveer 1.200 regels pure JavaScript, zonder libraries. Bestanden blijven in de browser en worden nooit geüpload.
---
3. Cassettesound
Een cassette klonk nooit hetzelfde in twee verschillende spelers. oTAPE-spelers kunnen audio simuleren zoals een machine uit die tijd dat zou doen: een studiodeck, een autoradio of een portable stereo. De sound-bewerking vindt plaats tijdens het afspelen; het bronbestand blijft ongewijzigd.
Hoe het werkt
- Wobble: Geen enkele motor draait perfect gelijkmatig. Een langzame drift in snelheid buigt de toonhoogte (wow), terwijl een snelle trilling deze ruwer maakt (flutter).
- Hiss: Elke tape heeft een eigen basisruis. Deze loopt zolang de tape draait (ook tussen nummers en op lege stukken) en stopt onmiddellijk bij het indrukken van de stopknop.
- Warmth: Wanneer een tape 'heet' wordt opgenomen, worden de pieken afgerond, beginnend bij de hoge tonen. Deze zachte compressie draagt bij aan de warme klank van cassettes.
- Wear: Oude tapes verliezen hun hoog, kunnen korte uitvalmomenten hebben waar de coating dun is geworden, en een scheef gestelde kop kan het stereobeeld vervormen.
Machines als bestanden: Machines zijn opgeslagen als kleine open presets in .otsound-bestanden, geschreven in reële eenheden (percentage snelheid, decibels, hertz). Hierdoor klinkt een specifieke portable stereo in elke oTAPE-speler hetzelfde.
---
4. Binnen in het bestand
Een .otape-bestand is een gewoon ZIP-archief met een vaste lay-out. De structuur is als volgt:
mimetype: application/vnd.otape.cassette (zodat tools het bestand kunnen identificeren zonder het volledig uit te pakken).
manifest.json: Bevat de gegevens van de cassette, de zijden A en B, en het uiterlijk.
audio/:
side-a.m4a: AAC-LC, één continue opname.
side-b.m4a: Optioneel (wordt weggelaten als de zijde leeg is).
artwork/ (optioneel, vaste fysieke afmetingen):
cassette-face-a.png
label-a.png
jcard-front.jpg
jcard-spine.png
booklet-01.png ...
docs/: booklet.html, notes.md.
Voorbeeld van een manifest.json (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 }
}
}
Technische specificaties:
- Media type:
application/vnd.otape.cassette / Apple UTI org.otape.cassette.
- Audio: AAC-LC in M4A (verplicht). ALAC, FLAC en PCM zijn optioneel.
- Tijdlijn: Integer frames bij 44.1 of 48 kHz, exact tot op het sample.
- Magic:
PK\x03\x04 op offset 0, media type op byte 38.
- Versies: MAJOR.MINOR. Minor versies voegen alleen optionele velden toe; onbekende data blijft behouden.
---
5. Het medium
oTAPE behoudt de fysieke beperkingen van een cassette. Je kiest een lengte voordat je opneemt en elke zijde heeft een opname-tab die je kunt afbreken.
Beschikbare lengtes
- C46: 23 min / zijde · 65.7 m · 18 µm
- C60: 30 min / zijde · 85.7 m · 18 µm
- C90: 45 min / zijde · 128.5 m · 12 µm
- C120: 60 min / zijde · 171.4 m · 9 µm
- C74 of Custom: Minuten per zijde.
Opname-tabs
De status van een tab kan zijn: intact, broken (gebroken) of taped_over (overgeplakt). Dit is geen DRM, maar een bescherming tegen het per ongeluk overschrijven van een voltooide tape.
---
6. Het papier: Artwork
Artwork voor de shell, het label, de J-card en het booklet heeft vaste afmetingen in millimeters, zodat het in elke app correct past.
| Slot | Afmeting (mm) | Aanbevolen px (bij 24px/mm) |
| Cassette face A / B | 100.4 × 63.8 | 2410 × 1531 |
| Label A / B | 89.0 × 42.0 | 2136 × 1008 |
| J-card front | 63.5 × 101.6 | 1524 × 2438 |
| J-card spine | 12.7 × 101.6 | 305 × 2438 |
| J-card back flap | 25.4 × 101.6 | 610 × 2438 |
| Booklet panel | 63.5 × 101.6 | 1524 × 2438 |
| Thumbnail | vierkant | 1024 × 1024 |
Aanbevolen resolutie: 24 px/mm (minimum 12 px/mm). Aspectratio moet binnen ±1% liggen. Afbeeldingen van de shell en het label moeten transparant zijn bij de ramen en as-gaten.
---
7. De referentie-app: oTAPE Studio
oTAPE Studio is een hi-fi systeem voor Mac bestaande uit:
- SP-2: CD/MP3 bronspeler.
- TU-01: Internetradio-tuner (met toegang tot ca. 50.000 stations via Radio Browser).
- OT-1: Cassettedeck.
Kenmerken:
- Real-time opname: De kop overschrijft de tape in real-time op 44.1 kHz. Niets wordt sneller opgenomen dan het wordt afgespeeld.
- Designer: Tools voor het ontwerpen van de shell, het label, de belettering, de J-card en de opname-tabs.
- Bestandsbeheer: Slaat AAC op bij 256 kb/s en codeert alleen de gewijzigde zijden opnieuw.
---
8. Studio in de browser
oTAPE Studio Web is een cassettedeck dat in elke moderne browser draait (Chrome, Edge, Safari). Gebruikers kunnen opnemen vanuit eigen playlists, internetradio of een audio-input. Er is geen installatie of account nodig, en audio verlaat het apparaat niet.
---
9. Voor ontwikkelaars
Het oTAPE-specificatie is open; iedereen kan het implementeren in gratis of commerciële software zonder royalties.
Stappen voor het bouwen van een basisspeler:
- Open de ZIP en lees
manifest.json. Controleer of format == "oTAPE" en de major versie 1 is.
- Decodeer per zijde het audiobestand en behandel dit als exact
recorded_frames lang. De rest van de zijde is lege tape.
- Speel af vanaf de positie van de kop. Gebruik Fast Forward (FF) en Rewind (REW) om te spoelen in plaats van direct te springen. Het omdraaien van de tape mapt positie
p naar L − p.
- Teken de cassette op basis van de
appearance data of de artwork-afbeeldingen.
- Onthoud de positie van de kop lokaal per
cassette.id. Het afspelen mag het bestand nooit wijzigen.
Validatie
Cassettes kunnen gevalideerd worden met otape_validate.py (Python 3).
---
Filosofie: Bezit de tape, niet het platform. Geen feed bepaalt wat er volgt. Geen account, server of abonnement staat tussen jou en een tape die iemand voor je heeft gemaakt. oTAPE is open, zodat cassettes langer meegaan dan de apps die ze afspelen.
oTAPE: Het open digitale cassetteformaat
Technische basisgegevens:
- Extensie:
.otape
- Container: ZIP + JSON
- Licentie: CC BY 4.0
---
1. Het idee: De langzame weg, met opzet
Het maken van een mixtape kostte vroeger een hele avond. Je koos elk nummer zorgvuldig uit, luisterde naar de opname en schreef de titels met de hand op. oTAPE is een bestandsformaat dat deze beperkingen behoudt. Het is geen nieuwe codec of muziekspeler, maar een beschrijving van een volledige cassette.
Een cassette, geen playlist
Elke zijde is één continue opname. De stilte tussen nummers, een gesproken introductie of de klik van de pauzeknop maken deel uit van de opname. Trackmarkers kunnen nummers benoemen zonder de zijde op te splitsen.
Gedrag van een tape
Het formaat hanteert een vaste lengte, twee zijden op één tape en een positie die je bereikt door te spoelen in plaats van te springen. Wanneer je zijde A tot het einde hebt afgespeeld, moet je de cassette omdraaien om bij het begin van zijde B te komen.
Het bestand is het object
Audio, label, J-card, booklet en historie bevinden zich allemaal in één .otape-bestand. Er zijn geen externe links naar de oorspronkelijke MP3's of online bronnen.
Luisteren is 'read-only'
Het afspelen van een tape verandert het bestand nooit. De speler onthoudt de positie apart, vergelijkbaar met hoe een echte tape blijft staan waar je hem hebt achtergelaten.
Open en simpel
Het formaat maakt gebruik van standaardformaten die met bestaande tools geopend kunnen worden: een ZIP-archief, één JSON-manifest, AAC-audio en PNG- of JPEG-artwork.
Een eigen uiterlijk
Elke tape kan een eigen uiterlijk hebben. Dit kan door artwork aan te leveren in exacte fysieke proporties, of door de cassette en het label te beschrijven in een paar regels JSON die door elke speler getekend kunnen worden.
---
2. Probeer het: De Web Deck
De oTAPE Web Deck is een speler geschreven in ongeveer 1.200 regels pure JavaScript, zonder libraries. Bestanden blijven in de browser en worden nooit geüpload.
---
3. Cassettesound
Een cassette klonk nooit hetzelfde in twee verschillende spelers. oTAPE-spelers kunnen audio simuleren zoals een machine uit die tijd dat zou doen: een studiodeck, een autoradio of een portable stereo. De sound-bewerking vindt plaats tijdens het afspelen; het bronbestand blijft ongewijzigd.
Hoe het werkt
- Wobble: Geen enkele motor draait perfect gelijkmatig. Een langzame drift in snelheid buigt de toonhoogte (wow), terwijl een snelle trilling deze ruwer maakt (flutter).
- Hiss: Elke tape heeft een eigen basisruis. Deze loopt zolang de tape draait (ook tussen nummers en op lege stukken) en stopt onmiddellijk bij het indrukken van de stopknop.
- Warmth: Wanneer een tape 'heet' wordt opgenomen, worden de pieken afgerond, beginnend bij de hoge tonen. Deze zachte compressie draagt bij aan de warme klank van cassettes.
- Wear: Oude tapes verliezen hun hoog, kunnen korte uitvalmomenten hebben waar de coating dun is geworden, en een scheef gestelde kop kan het stereobeeld vervormen.
Machines als bestanden: Machines zijn opgeslagen als kleine open presets in .otsound-bestanden, geschreven in reële eenheden (percentage snelheid, decibels, hertz). Hierdoor klinkt een specifieke portable stereo in elke oTAPE-speler hetzelfde.
---
4. Binnen in het bestand
Een .otape-bestand is een gewoon ZIP-archief met een vaste lay-out. De structuur is als volgt:
mimetype: application/vnd.otape.cassette (zodat tools het bestand kunnen identificeren zonder het volledig uit te pakken).
manifest.json: Bevat de gegevens van de cassette, de zijden A en B, en het uiterlijk.
audio/:
side-a.m4a: AAC-LC, één continue opname.
side-b.m4a: Optioneel (wordt weggelaten als de zijde leeg is).
artwork/ (optioneel, vaste fysieke afmetingen):
cassette-face-a.png
label-a.png
jcard-front.jpg
jcard-spine.png
booklet-01.png ...
docs/: booklet.html, notes.md.
Voorbeeld van een manifest.json (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 }
}
}
Technische specificaties:
- Media type:
application/vnd.otape.cassette / Apple UTI org.otape.cassette.
- Audio: AAC-LC in M4A (verplicht). ALAC, FLAC en PCM zijn optioneel.
- Tijdlijn: Integer frames bij 44.1 of 48 kHz, exact tot op het sample.
- Magic:
PK\x03\x04 op offset 0, media type op byte 38.
- Versies: MAJOR.MINOR. Minor versies voegen alleen optionele velden toe; onbekende data blijft behouden.
---
5. Het medium
oTAPE behoudt de fysieke beperkingen van een cassette. Je kiest een lengte voordat je opneemt en elke zijde heeft een opname-tab die je kunt afbreken.
Beschikbare lengtes
- C46: 23 min / zijde · 65.7 m · 18 µm
- C60: 30 min / zijde · 85.7 m · 18 µm
- C90: 45 min / zijde · 128.5 m · 12 µm
- C120: 60 min / zijde · 171.4 m · 9 µm
- C74 of Custom: Minuten per zijde.
Opname-tabs
De status van een tab kan zijn: intact, broken (gebroken) of taped_over (overgeplakt). Dit is geen DRM, maar een bescherming tegen het per ongeluk overschrijven van een voltooide tape.
---
6. Het papier: Artwork
Artwork voor de shell, het label, de J-card en het booklet heeft vaste afmetingen in millimeters, zodat het in elke app correct past.
| Slot | Afmeting (mm) | Aanbevolen px (bij 24px/mm) |
| Cassette face A / B | 100.4 × 63.8 | 2410 × 1531 |
| Label A / B | 89.0 × 42.0 | 2136 × 1008 |
| J-card front | 63.5 × 101.6 | 1524 × 2438 |
| J-card spine | 12.7 × 101.6 | 305 × 2438 |
| J-card back flap | 25.4 × 101.6 | 610 × 2438 |
| Booklet panel | 63.5 × 101.6 | 1524 × 2438 |
| Thumbnail | vierkant | 1024 × 1024 |
Aanbevolen resolutie: 24 px/mm (minimum 12 px/mm). Aspectratio moet binnen ±1% liggen. Afbeeldingen van de shell en het label moeten transparant zijn bij de ramen en as-gaten.
---
7. De referentie-app: oTAPE Studio
oTAPE Studio is een hi-fi systeem voor Mac bestaande uit:
- SP-2: CD/MP3 bronspeler.
- TU-01: Internetradio-tuner (met toegang tot ca. 50.000 stations via Radio Browser).
- OT-1: Cassettedeck.
Kenmerken:
- Real-time opname: De kop overschrijft de tape in real-time op 44.1 kHz. Niets wordt sneller opgenomen dan het wordt afgespeeld.
- Designer: Tools voor het ontwerpen van de shell, het label, de belettering, de J-card en de opname-tabs.
- Bestandsbeheer: Slaat AAC op bij 256 kb/s en codeert alleen de gewijzigde zijden opnieuw.
---
8. Studio in de browser
oTAPE Studio Web is een cassettedeck dat in elke moderne browser draait (Chrome, Edge, Safari). Gebruikers kunnen opnemen vanuit eigen playlists, internetradio of een audio-input. Er is geen installatie of account nodig, en audio verlaat het apparaat niet.
---
9. Voor ontwikkelaars
Het oTAPE-specificatie is open; iedereen kan het implementeren in gratis of commerciële software zonder royalties.
Stappen voor het bouwen van een basisspeler:
- Open de ZIP en lees
manifest.json. Controleer of format == "oTAPE" en de major versie 1 is.
- Decodeer per zijde het audiobestand en behandel dit als exact
recorded_frames lang. De rest van de zijde is lege tape.
- Speel af vanaf de positie van de kop. Gebruik Fast Forward (FF) en Rewind (REW) om te spoelen in plaats van direct te springen. Het omdraaien van de tape mapt positie
p naar L − p.
- Teken de cassette op basis van de
appearance data of de artwork-afbeeldingen.
- Onthoud de positie van de kop lokaal per
cassette.id. Het afspelen mag het bestand nooit wijzigen.
Validatie
Cassettes kunnen gevalideerd worden met otape_validate.py (Python 3).
---
Filosofie: Bezit de tape, niet het platform. Geen feed bepaalt wat er volgt. Geen account, server of abonnement staat tussen jou en een tape die iemand voor je heeft gemaakt. oTAPE is open, zodat cassettes langer meegaan dan de apps die ze afspelen.