• Stars
    star
    604
  • Rank 74,189 (Top 2 %)
  • Language
    Haskell
  • License
    MIT License
  • Created over 11 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Trying to understand the file format of Tip Toi

Das tttool hat jetzt eine deutsche Webseite für Anwender: http://tttool.entropia.de/

tip-toi-reveng

The goal of this project is to understand the file and paper format for the Ravensburger TipToi pen. The ultimate goal is that everyone can create their own books, with their own sounds.

The current status is that we understood most of the file format (see the GME file format specification). We provide a tool that allows you to dissect these files. The tool can also be used to generate completely new files from scratch; see below for details.

If you want to learn more please have a look into our wiki (https://github.com/entropia/tip-toi-reveng/wiki).

The tttool tool

Use the tool tttool to investigate the gme files and build new ones. It supports various subcommands:

GME creation commands:
  assemble                 creates a gme file from the given source

OID code creation commands:
  oid-table                creates a PDF or SVG file with all codes in the yaml file
  oid-codes                creates files for every OID in the yaml file (default: PNG).
  oid-code                 creates PNG files for each given code(s)

GME modification commands:
  set-language             sets the language field of an GME file
  set-product-id           changes the product id an GME file

GME analysis commands:
  info                     Print general information about a GME file
  export                   dumps the file in the human-readable yaml format
  scripts                  prints the decoded scripts for each OID
  script                   prints the decoded scripts for a specific OID
  games                    prints the decoded games
  lint                     checks for errors in the file or in this program
  segments                 lists all known parts of the file, with description.
  segment                  prints the segment that contains a specific offset
  explain                  print a hexdump of a GME file with descriptions
  holes                    lists all unknown parts of the file.
  rewrite                  parses the file and writes it again (for debugging)

GME extraction commands:
  media                    dumps all audio samples
  binaries                 dumps all binaries

Simulation commands:
  play                     interactively play a GME file

Run

./tttool --help

to learn about global options (e.g. DPI settings), and

./tttool command --help

for the options of the individual command.

Installation

We release tttool for Windows and Linux users as a zipfile. You can find them in the releases section of the GitHub project.

Linux users likely want to install additional packages. On Debian or Ubuntu, run sudo apt install libttspico-utils vorbis-tools

See Building.md for instructions on how to build tttool from source.

Building your own gme files

Once you have installed tttool, you can create your own .gme files. The process is as follows

  1. Record the audio samples you want to include, as Ogg Vorbis files, mono, 22050Hz. I use

    arecord -r 22050 foo.wav
    oggenc foo.wav
    rm foo.wav
    
  2. Write a my-book.yaml file containing some general information, and especially the scripts (i.e. what to do) for each OIDs (i.e. the various fields of a book). You can use the example.yaml file as a starting point; it contains more information in its comments.

  3. Run ./tttool assemble my-book.yaml, and make sure it reports no error, i.e. finishes silently.

  4. Copy the now generated my-book.gme to your TipToi pen and enjoy!

If you need to find out what OID code corresponds to what part of the book, you can generate a debug gme using the debug.yaml file, adjusting its Product-Id to your product’s id, building it with ./tttool assemble debug.yaml and loading the resulting debug.gme on your pen. It will then read out the codes, as a sequence of english digits.

If you want to convert existing audio files of almost any format, and you have ffmpeg installed, you can use

ffmpeg -i input-audio-in-some.fmt -ar 22050 -ac 1 foo.ogg

Text to speech

If you have libttspico-utils and vorbis-tools installed, you can have tttool generate audio files from text for you, which makes developing your yaml file much easier. See text2speech.yaml for more information.

Printing your own books

With the code in this repository, you can create GME files. This is even more fun if you can also create your own books! „Pronwan“ found out how that works, as you can see in this video demonstration. He also published 30 minute video tutorial (in German).

Press Review

TODO

  • What are all the header fields? (See wip/Header.md)
  • Finish decoding the games. (See wip/games.txt)
  • What is the purpose of the additional script table?

Other resources in this repository

  • oid-decoder.html allows you to manually decode an OID image.

  • scripts/update.sh downloads all gme files from the Ravensburger server (requires perl and the XML::Simple module).

    Instead of downloading all of them, you can conveniently browse them at http://tiptoi.vakat.de/, a service provided by Falko Oldenburg [email protected].

  • gameanalyse.c and libtiptoi.c is an alternative tool to investigate gme files. It can also replace audio files in gme files; compile and run it for diagnostic output.

  • Audio/ contains some audio files, such as digits read out.

  • docs/ collects information about TipToi found elsewhere.

  • wip/ (work in progess) contains notes about the parts of the gme files that are not fully understood yet.

  • perl-tools contains a perl based script, to generate a PDF with all OID codes from a yaml-file as well some functions to generate PNG-files, inject pHYs-chunks with resolution hints into GD generated PNG files as result from some testing

More Repositories

1

libsocket-can-java

SocketCAN JNI wrapper
C
42
star
2

gpn17-badge

GPN Badge (Gulasch Push Notifier) for the GPN17 in Karlsruhe
C
16
star
3

flipdot

Hard- and software to control a LAWO flip-dot display
C
11
star
4

vaporlight

Entropia's new light system.
Eagle
7
star
5

design-gpn22

Python
7
star
6

vaporsound

Our custom audio amplifier
Eagle
3
star
7

gpn17-badge-arduinolib

C++
3
star
8

Snowden-Timeline

Timeline der Snowden-Veröffentlichungen
3
star
9

cnc

Configuration and code related to our CNC mill
C
3
star
10

gpn-badge-printer

GPNBP: GPN-Badge-Printer
Python
3
star
11

berechenbarkeit

Tool for splitting PDF (text) invoices into cost centres
Rust
3
star
12

paperless-asn-qr-codes

Python
3
star
13

rC3_Map_Entropolis

Python
2
star
14

tuerd

RFID-Schließsystem
C
2
star
15

gewerbehof-webseite

Webseite des Gewerbehof Karlsruhe
Shell
2
star
16

matrix-ansible-synapse

Ruby
2
star
17

landing-page

A landing page for https://entropia.de
HTML
1
star
18

Twisplay

A TCP-Controlled Shop-Display
Lua
1
star
19

clubbus

Entropias Hausbus in Farbe
JavaScript
1
star
20

crestroncli

Send crestron commands to a projector
Perl
1
star
21

clubmonitor

Clubstatus und Türschloss-Steuerung
Java
1
star
22

sublimelight-5g

5th generation of the club illumination system
C
1
star
23

ics2entropiawiki

Convert ICS Calendar files to Wiki-Entries
Python
1
star
24

gpn-guidelines

Leitfaden zum Umgang auf der GPN
TeX
1
star
25

gpn-subtitles

coordination repository for subtitling video recordings from the GPN
1
star
26

haecksen

For haecksen stuff
1
star
27

cryptoparty-props

Praktische Dinge für Cryptoparties
Shell
1
star
28

Teebeutel-Hardware

The Teebeutel (eng. Teabag) is a 10x7cm ESP-32 (ESP-32-WROOM-32) Dev-Kit / Con-Badge.
1
star
29

reminders

scripts to remind $people of $things, most likely to be executed by a cronjob
Python
1
star
30

erleuchtung

Entropia Illumination System 2.0
C
1
star
31

gulasch-r0mstore

Romstore for the GPN17-Badge
CSS
1
star
32

typespeed-schnecken

historischer schnecken-code
Ruby
1
star
33

rfidrink

RFID Module for the Drinkpurchase system of Entropia
Python
1
star
34

katzenjammer

This is the katzenjammer. It jams katzen.
Lua
1
star
35

entropieanzeige

UDP-based clone of Pixelflut drawing straight to the Linux framebuffer
C
1
star
36

Teebeutel-Expansion

Teebeutel (eng. Teabag) is an electronic, Entropia themed con-badge for the GPN20, featuring an ESP32 microprocessor running micropython. You can tinker with its various sensors, build your own custom expansions, render beautiful animations on the 128x128px oled or simply enjoy it as the colourful badge it is.
1
star
37

nix-files

Nix
1
star