Baudot minicom 5000 stuffs

From the Patreon builders live stream, myself and Felix Rieger did a bit of digging into the whole baudot code thing.

For non-patreon context, here is the video where the plan is mentioned:

@lookmumnocomputer then uploaded a Patreon-only video, for Felix and I, that just had the part of the builders livestream with the beeps and boops. Felix Rieger then did some lovely work on starting to decode those beeps and boops that the machine generates

Blockquote
From a cursory glance this uses frequency shift keying with 2 frequencies (hereby denoted L and H):
(0) A bit seems to be 22 ms long. The high frequency H is around 1800 Hz, the low frequency L around 1400 Hz.
(1) There seems to be a sync signal at first consisting of 1.5L, (0.75H, 0.25L) (repeated 5 times), 1.5L, probably for calibrating some timings.
(2) I only looked at A, B, C, but the codes seem to follow the ITA2 code. For example, A is HLLHHHLLLLLLLLLLL. There seems to be one start bit and quite a bit of padding, but the interesting information is in the first 5 bits. H seems to correspond to 0, L seems to correspond to 1, so this gives 0.11000.11111111111. The bits of interest are the 5 bits after the start bit, so 11000, which corresponds to “A” on ITA2 (LSB on the left). Similar with B (H LHHLL LLLLLLLLLLL, 0.10011.11111111111, 10011) and C (H HLLLH LLLLLLLLLLL, 0.01110.11111111111, 01110)

So my plan is to write some code to stick onto a Raspberry PI that will:
(strike through items are done - this is essentially my todo list!)

1) Record sound from a cheap USB sound-card
2) Extract the different frequencies (Felix recommended a Goertzel transform)
3) Decode those frequencies into baudot (digital / binary)
4) Decode the binary into ASCII
5) Pump the ASCII into a simple AI routine. I’m thinking MegaHAL here → GitHub - z0rc/megahal.mod: MegaHAL eggdrop module with UTF-8 support
6) MegaHAL will do it’s thing - process the input string, and use some cleverness to generate a response from its stored history previously processed strings
7) Extract the response
8) Encode the response into baudot (binary / digital)
9) Encode the digital baudot code into beeps and boops, that the Minicom 5000 can then decode and display
10) Make a pin on the raspberry pi go HIGH when responding.

That’s the plan, and this thread will help record any progress made. Also comments, etc, welcome :slight_smile:

5 Likes

hey up!! cool Marcnet!!! you gunna go for it :O. no pressure dude but if you are up for the challenge! haha
I figured id may aswell share that video as it was just for reference.as I just filmed it whilst on the livestream!

also to make it maybe easier, tomorrow I will do another video typing in some sentences. it’ll be cool if this project gets off the ground!!! well cool!!!

2 Likes

Looking at the code table here → Baudot

It seems the baudot code supports extra characters, such as new line, line feed, bell, and “Who are you?,” … Not sure if you can get all those characters, but it would be good to have a full set to test with, or at least as full as possible.

Another site worth mentioning is this → https://www.dcode.fr/baudot-code#f1

I’ve been using it to encode and decode baudot codes, as something to compare the output of my code with.

I’ll be sharing a bitbucket or github page with the full source at some point (most of the code is GPL, so I have to)

Finally, in that video, at timestamp 33.5 seconds, after Y, and before you hear Sam go “Ooooh!”, there is a series of 4 codes where you expect to see a single ‘Z’. That long series of codes at 33.5 is →
(Carriage Return )
(Carriage Return )
(Line Feed)
Z (Z)

so it must be automatically adding in new-lines by itself after a certain number of characters

1 Like

I’m always excited to learn new encodings.

“new” is a relative term when it comes to Baudot :slight_smile:

Of course! :smiley:
@MarCNeT It might be doing a carriage return whenever it reaches X where X is the character limit of the screen. Could be memory limits too if the machine allows backspaces which i think i saw.

-edit- Actually, check if you have special chars. There might be procedure for things like question marks and periods that introduce “stops”. Not to mention you might have rogue whitespace in your input.

I’ve been using this as a reference → Baudot

So any special characters are already handled (like the shift to/from letters/numbers).

My checking process is to manually decode the part of the sound file manually, by using the spectrum view of audacity, and remembering that there is an initial 0 ‘sync’ bit at the start. Then use that site to look up what character/code the resultant value represents.

I might post a video, demoing the progress I’ve made so far. I don’t have a working mic at the moment, so it might be a silent video

1 Like

So some progress

This is the first character in the audio from the baudot video above. I’ve ran the processing program I’m writing against it, and have successfully (I think) managed to process the entire audio.

The picture here is the processing of the first character → A

The pink represents the first part of the audio - the sync bit 0

The green is the next part of the audio, the 2 bits of 1

The blue is the last part, the 3 bits of zero

This converts into 000110 . Which is 6. Remove the padding bit, and you get 3.

I then convert this, using a hard-coded baudot table (from one of the links above), into the character “A”

Yay!

Source code is here → Bitbucket

The project is not yet finished. There’s still the matter of Sound recording, feeding into and integration with MegaHAL, and tone generation.

4 Likes

I’ve made a bit of progress - the entire video that LMNC posted has been decoded.

I’ve made a short, but crap :smiley:. video demo here → http://marcnetsystem.co.uk/baudot_1.mkv

It just shows the build process, the most important features, and it capturing and decoding the baudot characters from the LMNC video. With some background music I dug out of my personal archive.

Enjoy!

4 Likes

I’ve managed to get MegaHAL working!! :smiley: :smiley: It’s only text interaction at the moment, but you can type something at it, and it will respond back on the console. It can also learn, and incorporate what you type into it’s brain!!

Umm… possibly not the best idea, but I’ve taken all the LMNC song lyrics, put that into a text file, and used that as the training data.

I’ll post a demo video, when I have time, to show the results, but here is a screenshot of my initial testing. The lines starting → are the ones generated by MegaHAL.

The results were a bit weird. Which is no suprise, considering the training data I gave .it!

5 Likes

Love the outputs. :heartpulse:
Good work!

2 Likes

hahahaha that is so funny love it. disjointed well good you can see lyrics that are sort of lyrics ha. is there anything you’d like me to type for you??? audio wise when its onto phase 2?

1 Like

@lookmumnocomputer

I wouldn’t mind a few phrases typed out on the Baudot machine and recorded and posted here (or somewhere I can download them)

There seems to be a ‘wakeup’ sound at the start, when you press a button (in that video, you can hear it when you push ‘A’, and it occurs before the actual ‘A’ tones are generated).

And also I need a mechanism to work out when you’ve stopped typing - is there some sort of ‘end’ sound that signals to the other end?

Perhaps I can detect a question mark or full stop, and wait 5 seconds (or some amount of time) before I have decided that it is the actual end of the user input. For example, if you were typing a decimal number, I don’t want to think that the decimal point was actually a full stop

Oh, and is there a backspace? Some example where you correct something would be good too :smiley:

Perhaps I’m over-thinking this - lol

2 Likes

So I’ve got audio generation working - at least I think I do…

One problem I have is there is no way of verifying that the audio I’m generating is actually correct. I can, of course, pass the generated audio back into my program, (which works btw), but that isn’t really a good way to verify my work.

I’ve tried a few apps from the internet - TTYWavReader is one that seems to partially work, but it can’t correctly handle the audio from the video posted above : It manages a few characters, but misses a few out as well, - so I can’t really use that for verification. It also doesn’t output any diagnostic info, or provide the decoding source, so I can’t tell why it doesn’t work.

Any suggestions, as I’m a bit stuck here… ? (and I don’t really want to purchase a minicom machine myself - lol)

1 Like

Hello,

Nice work so far, I’ve been watching with interest. I did a quick search to see what I could find and came across this:

Maybe that could be of some use?
If you can’t build it or haven’t got a linux box I could install it on mine and we could exchange audio files for testing.

Cheers,

Thanks :slight_smile:

I’ll try it out later (I do have a linux box running openSuse), but I don’t think minimodem can handle the ITA2 character set?

While doing some quick Googling, I did find this-> RaspTTY: A WEB to TTY Interface . It seems to use minimodem, and mentions ITA2 - so I might see if I can get that to work

1 Like

sorry on the delay on this! I kept forgetting. here we go! let me know if there is anything else you’d like

not sure what the thinking tone is first off when it starts transmitting but I dont think it matters, they will just be running all day so I think after the setup phase they run as they should

3 Likes

@lookmumnocomputer
Thanks, I’ve made some good progress, but not yet finished the current stage.

My goal for this week (possibly next as well, depending on how busy I am) is to get two instances of my program talking at each other via baudot encoded audio, and using MegaHAL to process and generate a response back - on an infinite loop. That would be weird with just your lyrics as the training data, but I’m eager to see how it turns out - lol

Ideally I would like to have one of those machines to borrow for a few weeks - if that is at all a possibility??? That way I can iron out any problems (and do two-way communication) without having to bother you. Anyway, no worries if not :slight_smile:

1 Like

yeah that’s cool!!! all good man will figure it out for you!±!±!± may swell have the thing to see gif it works haha

1 Like

I’ve not had much time recently to work on this, but more progress has been made!

My goal was to get two instances of MegaHAL talking to each other using baudot audio. My PC runs one instance, and the Raspberry Pi the other. I set the PC to generate a MegeHAL response, which gets converted to baudot and played into the Raspberry Pi. The Raspberry Pi takes the audio, decodes it back into text and feeds that text into it’s own instance of MegaHAL. Then a reply is generated and played back to the PC … etc etc etc

Here is a video to demo all the work I’ve done since last time :slight_smile:
http://www.marcnetsystem.co.uk/baudot_part2.mkv

4 Likes