Thomas Sjöland's Music Tools Page

Back to Thomas Sjöland's music page.

The EMS period

From 1976 to 1981 I spent a lot of time with the computer studio at EMS, the electronic music studio at Kungsgatan 8, Stockholm. This unique studio had a PDP-15 computer controlling a bank of oscillators, filters, ringmodulators and a mixer.
I used the EMS-1 composition language and various program generators for the production of experimental pieces of electronic computer music. I also implemented real-time editors for the EMS FM-generators (FMT, Polly, S etc.), a ratfor-style preprocessor, libraries to simplify the construction of music software, real time kernels with concurrent execution under full user control, and 3-D display software for a unique vector display terminal, all in FORTRAN. A tutorial was produced intended for composers interested in programming the studio using FORTRAN.

It might be fun to listen to a piece generated with one of my real-time composition algorithms (coded in FORTRAN IV of course), Computer Sound Sculpture III (2Mb, mp3).

Check this youtube clip.

Programming Fahlén's synthesizers

During 1979-1983 L. Fahlén constructed a specialized bitslice processor design allowing 128 programmable FM-oscillators to generate sound in real time. Following the state of the art at this (pre-MIDI) period there was no ramp generator in hardware. Instead a control computer was intended for this purpose. I constructed the software in Z80-assembly for an embedded 6 Mhz Z80-B processor to solve this problem. The computer was however too weak to allow the sample rates of the ramps to use the same frequency as the sound producing hardware with more than about 30 simultaneous ramp functions, causing audible aliasing effects with steep ramps at times.
The whole setup was controlled from an ABC80-computer using the FIG-FORTH programming environment. This turned out to be ideal for flexible low-level modifications, but the lack of memory in the Z80-based computer disallowed more advanced control software to store its state in primary memory, a requirement necessary for acceptable real-time performance. 16-bit processors came out. A redesign introduced a M68000 on the control board. We (I) adapted some of the software for the Z8000 and for an LSI-11 as well, and we used a special co-processor to enhance number crunching of the Z80. Then Fahlén's exjobb was finally finished, and the project then was discontinued, due to the commercial MIDI based synthesizers, such as YAMAHA DX7 etc. that became available.

Code as Artistic Installation

On the CD-rom "IT and music" produced in 1994 for IVA's 70-year anniversary I contributed with a program (including its rather simple source code in Think C) that generates MIDI according to an algorithm that I used in the piece "Infinite Variations" played at the International Electronic Music Festival, Stockholm, 1980.

Available Code for Software Developers

I have produced some Mac-based software in C and Prolog. Even though these are not finished applications, the code might be of interest for program developers. Feedback is appreciated, although I do not currently actively develop the code. Questions on the code, will be answered. You can use the code for any private, educational or research project, but if you build a product using this code I wish to be contacted for discussions on legal matters.

MIDI tools in C

I generated some (now outdated) software in Think C controlling MIDI equipment. It contains

MIDI tools in Prolog

I experimented with using the logic programming language Prolog as a control environment for MIDI equipment. The software written in LPA-Prolog contains some test software using an interface to the MIDI-manager in LPA-Prolog.The interface glue is a resource coded in Think C. The most recent version of this code (out of date, but essentially ok) has been ported to MacProlog32.

Note that the code is not a finished application, but rather a project containing code that could be of interest for program developers using LPA Prolog on an Apple Macintosh in a MIDI context. The code assumes the use of Apple's Midi Manager with either the Apple Midi Driver or the driver from OMS used in Midi Manager mode. There is a "keyboard window" that allows real-time play of midi equipment using the mouse, including use of all four modifier keys, and various other windows for different functions. Parts of the code related to recording and replaying music files have no GUI. A MIDI-file parser is missing, but could probably be integrated into the C-code for the MIDI Manager interface from available freeware. My studio setup shows here and there. My experience is that my Mac/II-SI with 9 Mb was too weak for this code, in particular, wrt. primary memory requirements. It is also difficult, but not impossible, to avoid invoking the garbage collector in the routines involved in playing pregenerated scores. LPA MacProlog32 freezes if you try to use ram-doubler with this project so adding primary memory is essential unless you only use parts of the code. (this text is utterly outdated, but kept out of nostalgia. The idea was good, and it still is, in my opinion.)

Thomas Sjöland (Mail sjoland (at)