heckmeck!

Nerd content and
cringe since 1999

Alexander Grupe
Losso/ATW

June 2025

Blog

2025-05

As a young childhood Amiga user, I have not only been obsessed with pixel fiddling, but also with speech synthesis. Hearing your home computer speak surely was a “Wow!” moment for me! (The very first one being the ability to control what was shown on the family TV, with the Commodore Plus/4 – magic!)

Look who’s talking

I fondly remember cooking up little “audio dramas” in AmigaBasic which let you control all the speech synthesis parameters: I would set up a robotic dark voice on the left stereo channel, a quirky high-pitched counterpart on the right, and write some funny dialogue between the two.

Twenty years later, I’ve tried to incorporate speech synthesis into my own demoscene productions every now and then:

For most of those productions, I would start off with an adaption of Tiny Speech Synth by stan_1901 and work from there. Now I’ve stumbled upon another simple synthesis approach, and I’ve built a little testbed around it:

Not sure what I will use this for (well, I have an idea), but this might have the potential for a compact 68000 assembly implementation. Instead of using a sawtooth oscillator, a filter, and three separate formant frequencies it works by approximating the spectrum’s shape with a small set of harmonic parameters:

// Pseudo-code version of speech-processor.js

let position = ...      // sine position depending on
                        // base frequency and sample rate
let harmonicsAmount = [
  0.1,                  // amount of fundamental frequency
  0.25,                 // amount of frequency * 2
  1,                    // amount of frequency * 3
  0.15,                 // amount of frequency * 4
  ...
];

// For each sample:

let value = noise() * noiseAmount;
for (i = 0; i < harmonicsAmount.length; i++) {
  value += sin(position * (i+1)) * harmonicsAmount[i];
}
value = value / (harmonicsAmount.length+1);

Of course, the phonemes this approach can produce are somewhat limited, as this was made as a toy program for students that is a bit more exciting than printing “Hello, world”. But it already produces recognizable vowel sounds, and that may be enough for… something funny. Give it a go!

There’s a new resource I will provide to anyone who’s interested in learning all about the demoscene from now on – if they’re speaking German, that is. Begone, dry old (and often challenged) Wikipedia page! Welcome, Politik & Kultur!

In „Politik & Kultur“, der Zeitung des Deutschen Kulturrates, ist ein riesiger Demoscene-Themenschwerpunkt in Ausgabe Nr. 7-8 | 25 erschienen – 14 Seiten voller Essays, Interviews und Screenshots, im Hintergrund tatkräftig unterstützt von Deadline-Mainorga v3nom (mit dem es auch ein Interview gibt). Absolute Leseempfehlung!

Politik & Kultur 7-8 | 25

Das Beste: Die Ausgabe ist direkt als PDF verfügbar!

This might look like a scene from the Blair Witch Project reproduced by an AI bot, with all the grain and wobbling going on:

I am so, so sorry for everything that has happened…

But that’s how my not-too-old phone recorded it! I’m pretty sure it was marketed with the promise of awesome low-light recordings back then… At least it was sensitive enough to catch this little blinking fella:

Glowworm fly-by

Isn’t it cool how much of an effect a single pixel can have? Especially when you don’t have the bandwidth to update the whole screen all the time!

Two pixels already make for some compelling storytelling! This glow bro was later joined by another luminescent friend – it was moving. And just as with demos and emulators, seeing the real thing live is so much more exciting than a recording!

So… This was the latest episode of “Geeks in Nature”. Join me next week when I watch a cloud.

Well, of course they are, because it’s fun! :) In this case, “they” is Nova 2025, the demoparty. It is taking place right now in Budleigh/UK, and I had totally forgotten they have a dedicated Teletext competition until I turned on the stream.

My last remote entry for Nova (and the subsequent inquiry what happened with it) somehow got lost in 2023, but I would love to do a little Teletext piece again. Maybe enter something for Flashparty in October? I seem to have skipped Flashparty 2024 after sinéad in 2023, so it’s about time…

Anyhoo – seeing all the nice Teletext entries on the Nova stream was great!

Compressing each party theme into a 512 byte Amiga intro, that is. (Too bad the years aren’t consecutive…) A pouet thread made me look up my past productions for Nordlicht – a welcome procrastination while I should be thinking about ideas for this year’s edition in a few weeks…

Party themeProduction
Fire brigade
2018

Notice the little fire truck on the website! :)
512 Byte Brigade
A minimalist cover of the Game Boy Advance invitation. The first 512 byte competition at Nordlicht!

In the beginning, there was a floppy disk
2019

The trophies were exceptionally nice that year.

spoke
As in “Thus Spoke Zarathustra”. Very dirty code, but a nice 2001 Space Odyssey mood and a perfect fit for the party theme.

Ahoy, landlubbers!
2022

Finally, a pirate theme!
Arrr512
You can never go wrong with a huge skull and a bit of Monkey Island’s theme. Oy!

Nordlicht Express
2023

Choo-choo!
hypotrain
I like trains, and I like Rebels’ legendary subway demo – let’s do a 512 byte adaption!

Crime Scene – Do Not Cross
2024

This party theme was lovingly put to life at the party place. And there were Tatort-themed trophies!

B.S.I. – Byte Scene Investigation
I kinda hit the limits of story-telling in 512 bytes here. Scary!

Sooo… This year’s headline is “Neon Prime” – galactic, sci-fi, space-opera!

I might have gotten the spark of an idea while writing this. Sokath, his eyes uncovered!

Inspired by this post commentary by Kev Quirk, I decided to look into my own logfiles of the past months and see how much bot visits I’m getting.

Some findings:

  • No, bots are not eating my blog, two thirds of all requests seem human.
  • But boy, there are a lot of bots around nowadays!
  • Surprisingly, Googlebot isn’t the hungriest bot. It’s OpenAI/ChatGPT!
  • Strong contender: Ahrefsbot – they’re really nosy! I can see why you would pay for their service, though, given that browsers generally don’t send referer headers anymore.
  • Bytespider, operated by TikTok’s parent company ByteDance, also seems really into Amiga, demoscene, and Teletext content.
  • Of course, all of this can only take bots into account that play nice and identify themselves as bots.

The top user agents of the past months are:

#HitsPercentageIdentified as
1316,94466.3%User agent looking like a human-operated browser
222,6224.7%openai.com
321,5744.5%GoogleBot
415,0753.2%AhrefsBot
511,4072.4%Scrapy
69,1401.9%Bytespider
76,4741.4%bingbot
85,8151.2%babbar.tech
95,1051.1%ClaudeBot
104,8951.0%Amazonbot
11 4,298 0.9%facebook.com
12 4,185 0.9%Applebot
13 3,666 0.8%PetalBot
14 3,532 0.7%SemrushBot
15 3,449 0.7%ImagesiftBot
16 2,564 0.5%MJ12bot
17 2,401 0.5%DuckDuckBot
18 2,134 0.4%BLEXBot
19 1,961 0.4%Empty (“-”)
20 1,428 0.3%YandexBot
21 1,118 0.2%curl
22 1,100 0.2%Dalvik
23 1,058 0.2%VelenPublicWebCrawler
24 1,038 0.2%Timpibot
25 1,001 0.2%serpstatbot
26 970 0.2%AwarioBot
27 967 0.2%SeznamBot
28 963 0.2%DotBot
29 881 0.2%DataForSeoBot
30 870 0.2%coccocbot

The bot-vs-human ratio roughly ends up like this:

Percentage of all requestsCategory
66.3%Probably human
33.7%Bot

So… go humans, I guess? That is, unless we filter out all file requests (CSS, images, other media). Then we get:

Percentage of page requestsCategory
50.8%Bot
49.2%Probably human

In any case it was lovely to see some Amiga users visiting with IBrowse on AmigaOS 3.2 and 3.9! And I guess the “PSP (PlayStation Portable)” user agent is a nerdy joke? :)

Cool stuff on the webz, recent and olde.
What’s Cool? · What’s Cool? II · What’s Cool? III

  • WarGames Title Fonts
    A nice pixel reverse engineering job of reconstructing the movie’s title and credits font. There’s an adaption of the terminal font as well. Good thing a similar font already existed when I made a whimsical WarGames-themed GIF animation for Revision 2024. :)
  • Learning From the Amiga API/ABI
    I’ve been thinking about doing a “Why Amiga is cool” post one day, focusing on the non-obvious features and ideas that made the platform great. This article (along with its preceding “rant”) resonates with that idea: Praising Amiga not for its games or multimedia capabilities, but for its elegant library handling and its powerful microkernel.

    Beware: That website uses <body bgcolor="#000000" text="#5050FF">, which is a bit too retro even for my taste… :)
  • melon in the wild
    That made me smile: A graffiti sporting the original oldschool melon logo with the dot. While you’re at it, also check out BraxtonDK’s Bluesky profile for a nice compilation of new and classic pixel art masterpieces.
  • Dead Ahead by FLEX & Ephidrena feat. Skarv
    A most welcome reminder to sit down with my beefed-up Amiga 1200 some more – by watching this incredible demo as a start! I intentionally squinted when skimming over the YouTube recording, not to spoil the experience of watching it on real hardware with a good old cathode ray tube.
  • The Meaning of Icons
    An entertaining reflection on icons, the metaphors they embody, and the questionable trend towards stylized, cryptic monochrome pictures. Apropos cryptic: I especially enjoyed the old fill tool icon in DeluxePaint being mentioned because I, too, never read it as a paint bucket being emptied for many years. The weird mouse pointer didn’t help, either:

While working on my anaglyph-3D (and new art making-of) talk, I realized in horror I had misnamed this little guy all the time, calling him “Tweasy” everywhere instead of “Teasy”.

This applies to all the mentions in the write-up (since corrected) and extends to all the file names and labels in the source code. I wonder how this happened – after all, I did flip through lots of online resources in preparation for the art work, and I must have been aware of the correct name at some point.

INITIAL_TWEASY_X        = -200
INITIAL_TWEASY_Y        = 50
TWEASY_X_SPEED          = 2
TWEASY_Y_SPEED_EIGHTS   = 2

        clr.l   pd_StompSequence(a6)
        move.w  #INITIAL_TWEASY_X,pd_TweasyX(a6)
        move.w  #INITIAL_TWEASY_Y*8,pd_TweasyYTimes8(a6)
        clr.w   pd_TweasyAnimFrame(a6)
        ...

sprites:
        include tweasy-gfx/walksprites.asm
colors:
        incbin  tweasy-gfx/001_placeholder.col

Was I pulling out a long eyebrow hair at the time and got him mixed up with tweezers? Or, since I was doing lots of rotoscoping and little animations for the demo, was I thinking of Macromedia Flash, the grand old authoring tool for vector-based animations, nasty ads, and browser games? Keyframe-based animations were called tweens back then, and the internal “pixel” resolution was based on a unit called twips.

Anyway, twanks, err, thanks, little guy, for spicing up the demo and my talk with some laughs and “awws”! :)

previous next close