ITTS (DCC text) reimplementation

So, I was messing around reading the specification, comparing it to the dump, indeed seem to be a bunch of ITTS packets from 0x0400 with a length of 0x12c0 which translates to 100 ITTS packets of 48 bytes each.
We have to view it in binary, as some parts are only 3 bits long and that doesn’t make much sense.
@drdcc Am I understanding it correctly, that both demo modes also work in 1 Line mode? Could you provide a video of how both demos look in all modes to compare against?
@Jac Do you have any unreleased progress left?

Could the 3rd gen text be using 1 Line ITTS for its text or is it something completely different?

The ITTS box only does 21 line mode. The way ITTS works is that each packet of information can be marked for 21 line mode, 2 line mode or 1 line mode, in any combination. So the packet of information that shows up on the 21 line screen in the middle of the screen as the title of one of the songs of the tape, is the same packet as what the 1 line display in the recorder uses. There are some non-printable ASCII characters to indicate where the 1 line display should start, so for example “LA VIE EN ROSE” has a non-printable character after VIE and before EN to indicate that the recorder should only show LA VIE.

I think I have some non-working code in the S/PDIF encoder project that’s not checked in; it won’t be of any use if I would commit that to Github; it would only break existing stuff unless I do a lot of work on it first, and I don’t have time for it right now, sorry.

There’s no source code for the ITTS box reverse engineering project at this time. All of the ITTS box pictures, text and ROM dumps are in the digitalcompactcassette repo that’s in use as web server.

If you have anything to contribute, you are of course welcome to do so, in the form of a Pull Request.

===Jac

1 Like

The 1 Line and 2 Line buttons on the ITTS box are non-functional?

@jac, the iits box does work with 1 and 2 lines if the tape has lyrics.
Strangely it does not mean it will display on the 730 or 951.

1 Like

Thank you for confirming, which means I am reading the standard correctly and the demo mode is like a typical text.
Any clue what the standard for 3rd gen lyrics could be? It could be ITTS with two different incompatible implementations like a different subchannel, CD-text compatible or completely different and ignored by 1st and 2nd gen recorders.
When I have something to dump the subchannels, I will send it to @drdcc that we can analyze it further and that I have something to test my implementation. Don’t expect it too soon, won’t be easy and I might lose interest for a while.

I don’t think there is a “standard for the 3rd generation lyrics” or multiple versions (that matter) of the standard for ITTS. There may have been some confusion about some parts of the standard, which may have resulted in lyrics and ITTS getting encoded on tapes in different ways that were all deemed valid at the time, but caused problems with the ITTS decoder that the DCC museum has. So that might be why 3rd generation players don’t generate ITTS output. But it’s also possible that the engineers ran out of space in the ROM because they already had some features that were taking up a lot of space (such as title editing) and they figured it would not be a big loss to cut the part of the software that was responsible for sending ITTS data to the SPDIF output.

It should certainly be possible to tap into the L3 bus on a DCC-730 and catch the SYSINFO and AUXINFO, and take control over the DAIO chip (or add a separate DAIO chip) to stream the ITTS out according to IEC-60958. In theory that should make the ITTS box work with a DCC-730 or DCC-951.

In my DCC-i project I will attempt to catch the SYSINFO and AUXINFO at the same time as the PASC data and dump it on an SD card or stream it to a PC via USB. I may even decide to just grab the raw data from the read amplifier and store that on an SD card but I’m not sure at this time how to further process that data.

By the way, last time we had a “play date” at the DCC museum, I connected my DCC-730 with the SAMC21N microcontroller and we played Ralf’s unreleased SuperTramp tape which has working lyrics. It was interesting to see how the front panel and main MCU communicate to get the lyrics on the screen and what the format is.

I copied the text pasted below from the debug output of the SAMC21N board while the player was playing “Cannonball” (the only song with lyrics on that tape). After that, I modified the code a little to print the lyrics as strings but I don’t have a copy of that, unfortunately (I think Ralf made a short video of it, though).

The program is at P700/Software/SAMC21N-XPRO/FrontPanelMon at master · DigitalCompactCassette/P700 · GitHub

Note: What I currently have is for reverse engineering the protocol between front panel and main MCU, which is not documented and is proprietary. I’m planning on analyzing the L3 bus which IS documented in the various datasheets of the DCC chips such as the DRP.

===Jac

4D 11 4D 11 4E 11 4D 11 42 11 41 11 4B 11 4B 20 20 20 20 20 20 20 20 20 20 
53 GET SHORT UDCC TEXT -> 53 03 -- 00 43 41 4D 4D 4E 4D 42 41 4B 4B 20 20 
10 KEY/RC: TEXT
51 GET LONG UDCC TEXT -> 51 01 -- 00 86 20 20 20 20 20 20 0C 11 42 52 4E 54 48 45 52 15 57 48 45 52 45 20 59 4E 55 20 42 4E 55 4D 44 20 20 20 20 20 20 20 20 
53 GET SHORT UDCC TEXT -> 53 01 -- 00 42 52 4E 54 48 45 52 20 20 20 20 20 
10 KEY/RC: TEXT
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 49 20 6D 65 76 65 72 20 6A 6D 65 77 2B 20 70 75 74 20 61 6B 6B 20 6C 79 20 74 72 75 73 74 20 69 6D 20 79 6E 75 20 
41 POLL -> from=00 00 B1 41 to=00 06 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
10 KEY/RC: TEXT
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
10 KEY/RC: TEXT
52 GET LONG PDCC TEXT: Track 1 -> "   \x86 1 \x86- \x11Cannonball                   "
54 GET SHORT PDCC TEXT: Track 1 -> "Cannonball  "
10 KEY/RC: TEXT
51 GET LONG UDCC TEXT -> 51 03 -- 00 86 20 20 20 20 20 20 20 0E 20 11 43 11 41 11 4D 11 4D 11 4E 11 4D 11 42 11 41 11 4B 11 4B 20 20 20 20 20 20 20 20 20 20 
53 GET SHORT UDCC TEXT -> 53 03 -- 00 43 41 4D 4D 4E 4D 42 41 4B 4B 20 20 
10 KEY/RC: TEXT
51 GET LONG UDCC TEXT -> 51 01 -- 00 86 20 20 20 20 20 20 0C 11 42 52 4E 54 48 45 52 15 57 48 45 52 45 20 59 4E 55 20 42 4E 55 4D 44 20 20 20 20 20 20 20 20 
53 GET SHORT UDCC TEXT -> 53 01 -- 00 42 52 4E 54 48 45 52 20 20 20 20 20 
10 KEY/RC: TEXT
CHECKSUM ERROR: 5D -- 00 00 07 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: D0 -- 80 08 01 10 03 03 0E 00 62 01 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 00 07 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 07 00 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 07 00 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 07 00 
10 KEY/RC: STOP
02 DECK: STOP
41 POLL -> from=00 06 B0 41 to=00 08 B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 09 08 
58 FUNCTION STATE -> []
41 POLL -> from=00 08 B0 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
10 KEY/RC: PLAY
03 DECK: PLAY
41 POLL -> from=00 00 B0 41 to=00 08 B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> >
41 POLL -> from=00 08 B0 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
10 KEY/RC: STOP
02 DECK: STOP
41 POLL -> from=00 00 B0 41 to=00 08 B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> []
41 POLL -> from=00 08 B0 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
10 KEY/RC: PREV
5B 03 -- 00 10 03 34 
2F GO TO TRACK: To=1, [2]=1
41 POLL -> from=00 00 B0 41 to=00 0B B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> 31
41 POLL -> from=00 0B B0 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
10 KEY/RC: PLAY
03 DECK: PLAY
41 POLL -> from=00 00 B0 41 to=00 0D B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> >
41 POLL -> from=00 0D B0 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 09 08 
10 KEY/RC: STOP
02 DECK: STOP
41 POLL -> from=00 00 B0 41 to=00 08 B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> []
41 POLL -> from=00 08 B0 41 to=00 02 B0 41 (B40) (B80) TAPETIME Sector=1
10 KEY/RC: PREV
06 DECK: REWIND
41 POLL -> from=00 02 B0 41 to=00 0B B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> <<
41 POLL -> from=00 0B B0 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
10 KEY/RC: PLAY
03 DECK: PLAY
41 POLL -> from=00 00 B0 41 to=00 86 B0 41 (A80) (B40) (B80) TAPETIME Sector=1
41 POLL -> from=00 86 B0 41 to=00 0D B0 41 FUNCTION (B40) (B80) TAPETIME Sector=1
58 FUNCTION STATE -> >
41 POLL -> from=00 0D B0 41 to=00 06 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
41 POLL -> from=00 06 B0 41 to=00 04 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 20 74 6E 20 63 61 6B 6B 20 6C 65 20 66 72 69 65 6D 64 
41 POLL -> from=00 04 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 09 08 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 44 6E 6D 27 74 20 73 61 79 20 61 20 77 6E 72 64 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 20 6A 6D 6E 77 20 60 75 73 74 20 77 68 61 74 20 49 20 68 65 61 72 64 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 60 -- 00 08 01 10 01 06 0E 99 48 01 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 59 65 61 68 20 79 6E 75 27 76 65 20 62 65 65 6D 20 6B 6E 6E 73 65 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 00 07 
41 POLL -> from=00 00 B0 41 to=00 04 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 79 6E 75 20 60 75 73 74 20 67 6E 74 20 6D 6E 20 65 78 63 75 73 65 
41 POLL -> from=00 04 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
41 POLL -> from=00 00 B0 41 to=00 04 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 40 75 73 74 20 66 65 65 6B 20 6C 79 20 72 61 67 65 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
41 POLL -> from=00 04 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 20 20 20 77 68 79 20 63 61 6D 27 74 20 79 6E 75 20 63 6E 6C 65 20 6E 66 20 61 67 65 3E 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
41 POLL -> from=00 00 B0 41 to=00 02 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 49 20 66 65 6B 74 20 69 74 20 61 6B 6B 2B 20 60 75 73 74 20 6B 69 6A 65 20 61 20 63 61 6D 6D 6E 6D 62 61 6B 6B 20 
41 POLL -> from=00 02 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 00 07 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 07 00 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 54 68 65 6D 20 79 6E 75 20 67 6E 74 20 6C 61 64 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
41 POLL -> from=00 00 B1 41 to=00 02 B0 41 (B40) (B80) TAPETIME Sector=1
41 POLL -> from=00 02 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 20 20 20 20 79 6E 75 20 73 61 69 64 20 74 68 61 74 20 49 27 6C 20 61 6B 6B 20 62 61 64 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 53 6E 20 77 68 61 74 27 73 20 74 68 65 20 75 73 65 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 08 09 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 79 6E 75 20 6B 69 65 64 20 61 6D 64 20 74 68 61 74 27 73 20 74 68 65 20 74 72 75 74 68 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 08 09 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 59 6E 75 20 74 6E 6E 6A 20 74 68 65 20 6A 65 79 20 61 6D 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 72 6E 76 65 20 72 69 67 68 74 20 6E 75 74 20 6E 6D 20 6C 65 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 00 07 
41 POLL -> from=00 00 B0 41 to=00 00 B1 41 (B1) (B40) (B80) TAPETIME Sector=1
51 GET LONG UDCC TEXT -> 51 09 -- 00 94 83 49 20 6D 65 76 65 72 20 6A 6D 65 77 2B 20 70 75 74 20 61 6B 6B 20 6C 79 20 74 72 75 73 74 20 69 6D 20 79 6E 75 20 
41 POLL -> from=00 00 B1 41 to=00 00 B0 41 (B40) (B80) TAPETIME Sector=1
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 09 08 
CHECKSUM ERROR: 5D -- 00 08 09 
CHECKSUM ERROR: 5D -- 00 08 09
1 Like

I do believe I have a short video of it. I will look for it this weekend when I get back.

1 Like

I was looking for a good way to map ITTS into something more usable, I found kaitai.io, it is a versatile binary format description language that fits my needs nicely.
I am trying to keep the names as close to the standard as possible.
Sneakpeak to the beginning of the header, which is identical for all application items: image
I already noticed something weird, bit 7 of the demo ITTS headers is 0 on some packages (I called it reserved 1), but it would have to be 1 to comply to the standard: “Default (must be set to 1 to identify the packet format according to this standard)”.

I am wondering if they are displayed or if it is some kind of internal comment.

For example is the final package “DEMO MODE_2 VIDEO ITTS BOX C.v.d.Bergh” being displayed?

Do commercial DCC releases also contain ITTS packages like that?

Even more progress from now on. New theory, the bit is used to seperate between demo 1 and demo 2. The demo is solely in 40 line 40 character text mode (1 and 2 line enabled). Except for the control characters, I assume the same for every commercial release. I will finish it first and after that I will need to send @drdcc an S/PDIF capture device for the one and only frog.

As I already mentioned I would appreciate a capture of both demos, to compare.

@max.

We have done 2 different topics / video about itts and lyrics.

and

Can you explain in more detail what you would like to see. If I do not have it, I could film it.

Ralf

Interesting, Max! What device are you planning on sending? Something you bought, or something you made yourself?

===Jac

I appreciate your videos! I would like to see both demo modes via the switch on the back in all three line modes as I am currently testing with them, extracted from @Jac’s dump. Of course there is no hurry.

I will use the STM32F769I-DISCO (which I explained earlier, see below) to build a recorder to the SD card with a touch interface. There is little documentation, but it is definitely supported: “Communication using DMA for control and user channel information”. Do you have any better idea for hardware?

Hi,
I will shoot a video with my phone using a DCC with lyrics, showing the different lines.
The demo mode switch on the back is of no importance as this will just show random text that you can’t control.

Ralf

2 Likes

But I am currently working on data of the demo modes, of course it is not the goal to emulate it, but a start I am getting closer to.

Hi @max,

Attached the link to 4 video files:

I mistakenly thought that some cassette would show line 1 and 2, but like @Jac said, they do not.
Except for the Supertramp demo album and Sonos Sampler. They do show 2 lines as well.

Video 4566 Scorpions; only show 21 lines on the ITTS Box (same for the other commercially released albums that have lyrics info.
Video 4567 Supertramp Sampler ; will work on 2 and 21 lines on the ITTS Box and also on the DCC730/951
Video 4568 Kermit Sampler; only shows 21 lines on the ITTS Box
Video 4569 Sonos Sampler; will work on 2 and 21 lines on the ITTS Box, but will not show the lyrics on the DCC730/951

1 Like

No, I don’t. I’d be interested in seeing what you’re making!

===Jac

1 Like

Perfect, but could you add that demo modes as well, as I am currently working with them (because I have them already from the dump), just to enable me to compare font, color, alignment and so on?

A general update, I will need some time to think how I will best deal with the control characters. My goal is an abstraction layer between the binary format and a display logic. The body subsection is not identical with body in the standard, it’s just how I call the part of the package depending on the package type.

image

Now I know for sure, that it is not based on videotext in any way and is likely just using the OSD mode of the videotext IC.

If anyone is interested, this is my small start. It can be viewed, edited and used on ide.kaitai.io. I will push it to a public repository, when I am finished with the start. The demo.itts is just the 100 ITTS packages from the demo concatenated extracted from the dump. itts_concat.ksy is for that “format”.

demo.itts (4.7 KB)
itts.ksy (1.5 KB)
itts_concat.ksy (120 Bytes)

I will need to think about how to store timing and at least volume of the audio to be able to store and use it synchronously. Maybe adding a custom extension to a container like ogg or mkv is the way to go, I am not sure yet.

I am by no means an expert, it is my first time with a binary format, with microcontroller development except Arduino and virtually anything else related. Any help/ideas/contributions/critisisms are always appreciated!

@Jac I hope you don’t mind me ‘stealing’ this subject from you, without your groundwork this wouldn’t be possible.

I activated it, but nothing on the screen anymore.
I have asked @Jorn to make a short movie of his one.

1 Like