Web Assembly, Music Synthesis, And The Beauty Of Math

The electronics hobby has changed a lot since the advent of the microprocessor. Before that — and with the lack of large-scale integrated circuits — projects in magazines tended to be either super simple or ultra complex. However, one popular type of project dealt with music synthesis. Fairly simple circuits could combine to make a complex synthesizer so it was sort of the best of both worlds. Nowadays, you are more likely to tackle a music synthesizer in software like [Tim] did when he created Abelton in Web Assembly and C++. Along the way, he learned a lot about the relationship between math and music.

[Tim] covers what he learned about the Nyquist theorem and how to keep synthesis data flowing in real time with buffers. However, there are some problems trying to do all this in a cross-browser context. The AudioWorklet class appears to have widespread support, though, and [Tim] managed to get that working.

Continue reading “Web Assembly, Music Synthesis, And The Beauty Of Math”

aemkei's xor patterns

Alien Art Drawn With Surprisingly Simple Math

Programmer [aemkei] Tweeted the formula (x ^ y) % 9 alongside code for more “alien art”. But how can a formula as simple as (x ^ y) % 9 result in a complex design? The combination of Bitwise XOR (^) and Modulo (%) generate a repeating pattern that’s still complex enough to satisfy the eye, and it’s ok if that doesn’t sound like an explanation. Bitwise operations are useful when working with memory and shift registers, but also worth learning if you want to drive lines or matrices of LEDs or interpret combinations of multiple switches, or in this case a great way to throw an interesting test pattern up on a new flip-dot display or low-res LED matrix. Are you into it? We are, so let’s jump in.

XOR Truth Table
0b00 0b01 0b10 0b11
0b00 0b00 0b01 0b10 0b11
0b01 0b01 0b00 0b11 0b10
0b10 0b10 0b11 0b00 0b01
0b11 0b11 0b10 0b01 0b00

Bitwise XOR compares each binary digit of the two inputs. The XOR returns a 1 when only one of the two digits is a 1, otherwise, it returns a zero for that position. Let’s say the coordinates were 3, 2. Converted to binary we have 0b11 and 0b10. From this truth table, we can see the most-significant digits are both 1, returning a 0, while only one of the least-significant digits is a 1, so the comparison returns a 1.

Moving onto the %, which is the Modulo operator has nothing to do with percentages. This operator divides two numbers and returns the remainder if any. Take 9 % 5. When dividing 9 by 5, 5 goes in once with a remainder of 4 so 9 % 5 = 4. Now our original formula from the top will draw a black box for every ninth number except that the bitwise XOR throws a wrench into that count, varying how often a number divisible by 9 appears and supplying the complexity necessary for these awesome patterns.

detail of aemkei's xor patterns

What are the most interesting designs can you create in a simple formula?

Hackaday Links Column Banner

Hackaday Links: March 14, 2021

It’ll be Pi Day when this article goes live, at least for approximately half the globe west of the prime meridian. We always enjoy Pi Day, not least for the excuse to enjoy pie and other disc-shaped foods. It’s also cool to ponder the mysteries of a transcendental number, which usually get a good treatment by the math YouTube community. This year was no disappointment in this regard, as we found two good pi-related videos, both by Matt Parker over at Standup Maths. The first one deals with raising pi to the pi to the pi to the pi and how that may or may not result in an integer that’s tens of trillions of digits long. The second and more entertaining video is a collaboration with Steve Mould which aims to estimate the value of pi by measuring the volume of a molecular monolayer of oleic acid floating on water. The process was really interesting and the results were surprisingly accurate; this might make a good exercise to do with kids to show them what pi is all about.

Remember basic physics and first being exposed to the formula for universal gravitation? We sure do, and we remember thinking that it should be possible to calculate the force between us and our classmates. It is, of course, but actually measuring the attractive force would be another thing entirely. But researchers have done just that, using objects substantially smaller than the average high school student: two 2-mm gold balls. The apparatus the Austrian researchers built used 90-milligram gold balls, one stationary and one on a suspended arm. The acceleration between the two moves the suspended ball, which pivots a mirror attached to the arm to deflect a laser beam. That they were able to tease a signal from the background noise of electrostatic, seismic, and hydrodynamic forces is quite a technical feat.

We noticed a lot of interest in the Antikythera mechanism this week, which was apparently caused by the announcement of the first-ever complete computational model of the ancient device’s inner workings. The team from University College London used all the available data gleaned from the 82 known fragments of the mechanism to produce a working model of the mechanism in software. This in turn was used to create some wonderful CGI animations of the mechanism at work — this video is well worth the half-hour it takes to watch. The UCL team says they’re now at work building a replica of the mechanism using modern techniques. One of the team says he has some doubts that ancient construction methods could have resulted in some of the finer pieces of the mechanism, like the concentric axles needed for some parts. We think our friend Clickspring might have something to say about that, as he seems to be doing pretty well building his replica using nothing but tools and methods that were available to the original maker. And by doing so, he managed to discern a previously unknown feature of the mechanism.

We got a tip recently that JOGL, or Just One Giant Lab, is offering microgrants for open-source science projects aimed at tackling the problems of COVID-19. The grants are for 4,000€ and require a minimal application and reporting process. The window for application is closing, though — March 21 is the deadline. If you’ve got an open-source COVID-19 project that could benefit from a cash infusion to bring to fruition, this might be your chance.

And finally, we stumbled across a video highlighting some of the darker aspects of amateur radio, particularly those who go through tremendous expense and effort just to be a pain in the ass. The story centers around the Mt. Diablo repeater, an amateur radio repeater located in California. Apparently someone took offense at the topics of conversation on the machine, and deployed what they called the “Annoy-o-Tron” to express their displeasure. The device consisted of a Baofeng transceiver, a cheap MP3 player loaded with obnoxious content, and a battery. Encased in epoxy resin and concrete inside a plastic ammo can, the jammer lugged the beast up a hill 20 miles (32 km) from the repeater, trained a simple Yagi antenna toward the site, and walked away. It lasted for three days and while the amateurs complained about the misuse of their repeater, they apparently didn’t do a thing about it. The jammer was retrieved six weeks after the fact and hasn’t been heard from since.

Run The Math, Or Try It Out?

I was reading Joshua Vasquez’s marvelous piece on the capstan equation this week. It’s a short, practical introduction to a single equation that, unless you’re doing something very strange, covers everything you need to know about friction when designing something with a rope or a cable that has to turn a corner or navigate a wiggle. Think of a bike cable or, in Joshua’s case, a moveable dragon-head Chomper. Turns out, there’s math for that! Continue reading “Run The Math, Or Try It Out?”

Weigh Your Car With Paper

Sometimes a problem is more important than its solution. Humans love to solve mysteries and answer questions, but the most rewarding issues are the ones we find ourselves. Take [Surjan Singh], who wanted to see if he could calculate the weight of his Saab 96. Funny enough, he doesn’t have an automobile scale in his garage, so he had to concoct a workaround method. His solution is to multiply the pressure in his tires with their contact patch. Read on before you decide this is an imperfect idea.

He measures his tires with a quality gauge for the highest accuracy and pressurizes them equally. Our favorite part is how he measures the contact patch by sliding a couple of paper pieces from the sides until they stop and then measures the distance between them. He quickly realizes that the treads didn’t contact the floor evenly, so he measures them to get a better idea of the true contact area. Once he is satisfied, he performs his algebra and records the results, then drives to some public scales and has to pay for a weigh. His calculations are close, but he admits this could be an imprecise method due to an n-of-one, and that he didn’t account for the stiffness of the tire walls.

This was a fun thought experiment with real-world verification. If you’re one of those people who treats brainstorming like an Olympic sport, then you may enjoy the gedankenexperiment that is fractals.

Parsing Math In Python

Programming computers used to be harder. Don’t get us wrong — today, people tend to solve harder problems with computers, but the fundamental act of programming is easier. We have high-level languages, toolkits, and even help from our operating systems. Most people never have to figure out how to directly read from a disk drive, deblock the data into records, and perform multiplication using nothing but shifts and adds. While that’s a good thing, sometimes it is good to study the basics. That was [gnebehay’s] thought when his university studies were too high level, so he decided to write an arithmetic expression parser in Python. It came out in about 100 lines of code.

Interpreting math expressions is one of those things that seems simple until you get into it. The first problem is correctly lexing the input — a term that means splitting into tokens. For a human, it seems simple that 5-3 is three tokens, {5, -, and 3} and that’s easy to figure out. But what about 5+-3? That’s also three tokens: {5,+,-3}. Tricky.

Continue reading “Parsing Math In Python”

Intuition About Signals And Systems

Signals and systems theory is a tough topic. Terms like convolution and impulse response can be hard to understand on a visceral level and most books that talk about these things emphasize math over intuition. [Discretised] has a YouTube channel that already has several videos that promise to tackle these topics with “minimum maths, maximum intuition.” We particularly noticed the talks on convolution and impulse response.

We think that often math and intuition don’t always come together. It is one thing, for example, to know that E=I times R, and power is I times E, but it is another to realize that a half-watt transmitter delivers 5V into a 50Ω load and that one watt will take just over 7V into that same load.

The example used is computing how much smoke you can expect to create by setting off fireworks. We presume the math models are notional since we imagine a real model would be pretty complex and involve things like wind data. But it still makes a nice example.

If you don’t know anything about the topic, these might not be the right ones to try to learn the basics. But we do applaud people sharing their intuition on these complex subjects.

Continue reading “Intuition About Signals And Systems”