Tom

GNUstep StepTalk is Alive and Well

  • by

A few years ago, I explored the idea of writing a small interpreter for embedding into McLaren Labs applications. The concept was to extend rtpmidi or a synth application with a scriptable ability to customize controls, behaviors or sound graphs. This would help make each application very slim, but to allow extension through scripting. (This is not a very novel idea: it’s been done many times before. 🙂 )

The Objective-C execution environment (libobjc) provides many hooks that make it fairly easy to call into the ObjC runtime from an interpreter, or even to bridge Objc method calls back to an interpreter. The idea of a scritping environment to accompany a GNUstep ObjC Appplication program seemed promising and I wrote a little interpreter (based on PostScript syntax) to test out some of the ideas.

Along the way, I learned about a much more mature project in libs-steptalk. Among other things, it provides a SmallTalk-like language for extending applications or even gluing them together in the GNUstep workspace. It seemed very old, but there were some tremendous ideas in there: I wondered if I could learn enough about it to use it, and I wondered if it still worked.

(Spoiler Alert! I did and it does.)

Read More »GNUstep StepTalk is Alive and Well

GNUstep Desktop – a refreshed look at NeXT/OpenStep

  • by

There’s a cool project called “GNUstep Desktop” that brings together many old GNUstep technologies, and a few new ones, to provide an entire integrated desktop. We gave it a whirl and are pretty impressed!

GNUstep Desktop on Debian 11

It’s pretty amazing that software that began life 30 years ago is still operational and evolving, but that is the case in the GNUstep project.

At McLaren labs, we have been a fan of modern ObjC on clang, and the ObjC runtime with Foundation libraries and have been slowly learning more about GNUstep GUI and desktop. To be honest, it has been a slow learning process. While there is actually very good information about the various pieces of the GNUstep project, it sometimes seems that there are too many conflicting versions around — there isn’t a single source of truth that brings everything together. But that being said, the quality of many of the components really amazes me.

Read More »GNUstep Desktop – a refreshed look at NeXT/OpenStep

Announcing McLaren Synth Kit

The “McLaren Synth Kit” is an Objective-C framework for using MIDI and Audio on Linux computers with the GNUstep programming environment. It is distributed as a project including libraries, headers and example programs at https://github.com/mclarenlabs/libs-mclaren-alpha. You can use it to experiment with sound synthesis for your own personal projects. The project is designed to provide ready-to-compile examples after you clone the repo.

Working with sound is a delicate endeavor. The Synth Kit does a lot of the low-level work of opening devices, managing an audio thread and copying MIDI events to and from dispatch queues. This leaves the audio programmer free to think about designing sounds as a graph of processing units, called Voices.

Standard Voices in the Synth Kit provide envelopes and oscillators of various types, filters and a reverb algorithm. Using the features of modern Objective-C (blocks, ARC and dispatch queues) the Synth Kit makes programming sounds easy, or at least “easier.”

Read More »Announcing McLaren Synth Kit

Using avahi-browse to find Bonjour services on your Network

  • by

On Linux systems, Bonjour is implemented by the “Avahi” service. This is what McLaren Labs’ rtpmidi program uses to find Apple MIDI services on your network when you set it up. Usually rtpmidi can find the iPhones and iPads on your network, but sometimes things do not go smoothly. That’s when you need to do some network debugging. One of the tools that you can use to learn about Bonjour services on your network is avahi-browse.

Install avahi-browse

If you have installed McLaren Labs’ rtpmidi, then there is a good chance that avahi-browser is already installed. Try it out.

$ avahi-browser

If it isn’t there, you can install it like this on Ubuntu systems.

$ sudo apt-get install avahi-utils
Read More »Using avahi-browse to find Bonjour services on your Network

VSCode, Ubuntu Snaps and ALSA Sound Development

Here at McLaren Labs we like to try all sorts of tools and development environments to see how they work together. We’ve been using vscode (https://code.visualstudio.com/) on and off for about a year, but only recently decided to try using it for a more complete edit/debug/run cycle for an Objective-C Synthesizer project. We ran into an unexpected interaction between the Snap environment of vscode and the ALSA (Advanced Linux Sound Architecture) PCM interface.

The Symptoms

What we discovered was that when running a program that attempted to access an ALSA sound device was that the program malfunctioned. It worked correctly in a “normal” terminal, however.

We reproduced the behavior using the default aplay command that is available in alsa-utils. See the screenshot below for what should appear in a terminal when it is run, playing an Ubuntu standard sound called “Front-Left”. Unless otherwise specified, this command opens the “default” sound device.

If your Ubuntu sound system is set up correctly, you will hear a woman saying “Front Left” … and it will come out of your front-left speaker.

Read More »VSCode, Ubuntu Snaps and ALSA Sound Development

Use the ‘favorite’ Option to Automatically Initiate a MIDI Session

  • by

When you use our rtpmidi tool to connect two devices you have created a “session.” The session has an “initiator” side that started the connection, and “listener” side that accepted the invitation. Some devices, however, do not make good “initiators” and iPhones are a great example. An iPhone cannot initiate a network MIDI session.

But sometimes you want an iPhone to join the MIDI network of a stationary computer … without going back to the computer screen. McLaren Labs’ “favorite” option was created to handle this case.

A “favorite” is the name of a device that that rtpmidi automatically initiates a session with whenever the favorite appears on the network. This new feature takes advantage of the properties of Bonjour (Avahi). A Listener advertises its availability using Bonjour. When rtpmidi detects a Bonjour name matching a favorite, it automatically initiates a session with that name.

Use the “favorite” option from the command line like this.

$ rtpmidi gui -F 'myiPhone' -t Organ-Synth:0

Now, whenever rtpmidi sees the iPhone named “myiPhone” it will automatically call it and route MIDI information to “Organ-Synth”.

A Demonstration

The video below shows how this works.

Using the ‘favorite’ option to automatically connect
Read More »Use the ‘favorite’ Option to Automatically Initiate a MIDI Session