Lumiere III - Sound Synthesis Helper Tool
[2016-12-30] The real time synthesis engine for L III (shown in the post below) requires a single sample file in which 100 perfectly crossfading loop slices are combined with sample accurate timing. This little helper tool grabs files from a list, creates the crossfades if they are looping and does all the editing and assembling automatically. Did cost me a day to program, will save me a few days of tedious manual editing. Will make it more likely that I actually experiement with a lot of different samples till I find the right ones.
Lumiere III Preparations
[2016-12-29] two years ago I wrote a lot of code to make Lumiere II happen. Now it is time for some major enhancements, both on the visual and on the auditive side of things. I spent the last weeks working on improvements of the visual engine, and the last week on the dedicated synthesizer for that project. The challenge is the ability to switch presets rapidly without any additional CPU consumption, and to also react in a meaningful way to a set of controllers which define both the behaviour of the lasers and of the sound synthesis at the same time. Parameters like a global 'Speed' control, which scales the envelopes in the laser pattern generators and in the synthesis engine simultaneously. The new version of the sound generator is internally a complete rewrite, making it possible to add features more easily and expand its capabilities. One of the goals for Lumiere III is a very much refined sound design. The tools for that are nearly ready.
[2016-10-21] We did it! A 36 year old computer mirrored to do full HD video output with 50 frames per second. We knew it should work in theory, but seeing it running for the first time is a different story. What looks very simple in the end is the result of scanning the data and address bus of the CBM computer, then reconstructing the character set and adding the specific blur from the CRT display to make it look right. Ironically this takes 1000 times the CPU power of the old machine. The HDMI out will make it possible to display the graphics nicely with video projectors or large LED screens. (note that the photo shows the first attempt with a shortcut in one of the address lines)
[2016-08-28] Nothing to report from my 8032 project since I spend all my time finalising a new Monolake album - VLSI. For the first time I am using a large console for the final mixdown. Insights gained: (1) I don't need compressors. What ever a compressor can do, I can do better with adjusting envelopes or drawing automation. Mark Ernestus, in who's studio I am mixing, and myself tried several attempts and we both came to the same conclusion here. So it comes down to EQ and levels. (2) There is an enormous benefit from not looking at a screen and having tactile and parallel access to all controls. If all parts of a musical work are patched to physical faders right in front of you, the structure of the piece becomes far more transparent. The preparation for the mix already enforces a clarity which is easy to loose within a DAW. Tracks need to be named, and grouped in meaningful ways. Since a lot of my current music is constructed from an abundance of micro edits on several tracks, that necessity to route those fragmented parts to dedicated outputs already becomes part of the final cleanup. I ended up simplifying my source material in the process. Looking forward to hear the whole album in one piece at the end, and hopefully coming to the conclusion that the effort was worth it.
Circles and Waves
[2016-08-08] Some little pieces of success today: (1) Drawing circular shapes using lookup tables. Works well, see screenshot. (2) Creating 8bit waveforms using a DAC and table lookup. Works, and sounds fantastic. Can get up to 300 Hz with 256 points, thus up to 1.2kHz with 64 points. In other words: massive bass sounds should be doable, perhaps even with satisfying control over pitch since I will have some CPU cycles left over. Or, next step... hooking up some SRAM and a DCO and basically buid a monophonic wavetable synth voice. Not sure if I really want to go that far at the moment.
Status[2016-08-07] Despite finalising the upcoming Monolake VLSI album, a lot of thoughts go into the 8032 project. More work needs to be done on the hardware side: Adding PetSD+ drives to the new machines (number six arrived recently, number seven already scored on Ebay), solving issues with the CRT displays on two of them, testing hardware related ideas such as adding a 8bit DA converter for wavetable synthesis, adding latches to provide more parallel output ports... stuff like this.
On the intersection between the artistic side of things and coding: I am developing (on paper for now) a graphics routine entitled 'Fuzzy Ball': a spherical structure on the screen with flickering edges. Since I cannot use standard floating point math routines - it would be way too slow, I came up with combinations of lookup tables for solving the Pythagoras and the gradient to ASCII transformation. I am really looking forward to try this out! It should run quite fast and might even allow doing slower things in between. Ideally, that could become the core of one of the pieces for the performance series. Soon I am going to work again on the next iteration of Lumière, and I am curious to see if and how much occupation with the very different aesthetic concepts of the 8032_series reflect back on it. In many ways the two projects are mirror twins. Some aspects are very much the same, starting with the extremely reduced set of instructions, whilst others are highly orthogonal, such as the vector graphics of the laser project versus the PetASCII character method of the CBM. Both projects also have in common strong technical limitations of the medium paired with surprisingly unlimited possibilities, once the inherent language has been defined and is understood.
Wavetable synthesis with the CBM?[2016-07-24] Ironic development of the 8032 project: Some of the old computers need severe repairs. Staring at schematics and noticing: Building primitive 'PPG Wave' style digital wavetable oscillator using counter chips, EPROMs and a bit of logic is not out of reach. It could have been done already in 1980. I still have no consistent concept for the sound generation in my project. That wavetable / low bit rate sampling approach might be more appropriate than driving a modular synthesis rig. I need to test this. Ordered an 8bit DAC chip and making first sketches of a wavetable oscillator board that is controlled by the CBM 8032. I did not anticipate that I would find myself in the middle of digital synthesizer development in 2016... Reinventing the wheel again. Hope the results will justify the enormous efforts.
The Henke Collection of outdated technology
[2016-07-13] CBM 3032 in good shape, needs a different ROM to run BASIC 4.0. CBM 8032 in perfect shape. CBM 8032 with german keyboard in 'okay' shape. CBM 4008 with 32kB RAM and german keyboard in good shape. Also needs 4.0 BASIC ROM. CBM 8032, sold as in 'mint condition', arrived with totally broken keyboard, needs some work. Still looking for 2 x CBM 8032 with later model CPU boards and 1 x 30xx or 40xx.
Video Connect Pt. I
[2016-07-09] My friend Ralf and I achieved a very important step towards getting the display of the CBM 8032 shown on a video projector. We managed to read out the screen memory into a small additional computer board inside the old machine. That will allow us to transfer the data to another little computer, which will render the PetAscii font in all its glory and spills it out in HD via HDMI. The result will look as if someone with a perfect camera filmed the old green monitor, just significantly better.[Nerd details: We use an XMOS board to scan the data and address bus, and a few status lines. We observe if writing to memory happens. If yes, we check if address is within screen memory area, if yes, we grab address (= screen position) and data (= character). This will get transferred to a Raspberry Pie or simillar. That's the plan.]
[2016-07-05] What a blessing that I wrote the data transfer routine. (see 2016-07-02 II). It makes it all so much more fun. The project is still in a stage where I try out simple small things. This way I learn what is possible with the old machine and collect ideas for the big project to come. Today I wrote a small thing for scrolling parts of the screen horizontally, driven by an external clock signal serving as NMI. It workes like a charm and that means I can create visual structures that move quite fast, whilst running other routines for slowly building the graphical context. I also scored my 4th CBM machine... The collection at the moment: CBM 8032 in perfect shape with floopy emulator. CBM 4008, needs repair. CBM 3032, good shape, but needs update ROM for BASIC 4.0. Anyone ... ? Coming: second 8032, probably in good shape. Needed: 3 x CBM 40xx with 32kB RAM...
Randomness and Absurdity
[2016-07-02 I] Sisyphus is my best friend. After very successful tests with the new I/O module and a first proof of concept routine for sequencing with external clock source, I stumbled across detail problems concerning the efficient generation of random numbers within a specific range. Image above shows attempts in the range from 0 to 99. Leftmost solution is perfect but very inefficient. The others are all more efficient and show different types of distributions. The bell shaped ones ( image 2 and 3 ) I did not anticipate, but now I know how to create them.[2016-07-02 II] I found an absurd way to get data from my Mac into the CBM. This is how it works: I do write assembler by hand in a text editor and on paper. Then this gets translated into the correct opcodes using an online assembler script. The result is pasted into a Max patch I wrote today, which translates strings of HEX codes into MIDI CCs. This is fed into the Endorphin.es Shuttle Control MIDI interface inside my modular rack, and from there is converted into User Port data via my own I/O module. On the side of the CBM, a routine fills the correct memory locations with the received data. Once this is done and works fine, the memory is dumped onto an SD card acting as a floppy disk replacement inside he CBM. And all that actually works surprisingly well...
It is slow and tedious work, but I have no idea how to outsource any of these things, and whilst diving deep into it, I develop many ideas about what to actually do once the infrastructure is in place. Ten times per day I think I am insane. However, regardless of how much of my ideas I can turn into reality, the results will be unique and personal. That's a good reason to do it.
Eurorack module for 8032_series[2016-06-29] I spent some time with soldering and front panel design. Result: the lovely Eurorack module on the right. It is the interface between a Commodore CBM 8032 and a modular synthesis system. It allows to send four gate signals to the system. It also allows to receive four gate signals to control processes inside the computer in sync with the modular system. It is possible to trigger an NMI from the modular system, e.g. for rhythmic sequencing. And the audio output from the computer plus several frequeny divisions are also available as sounds source / clock. That should do for further testing now!
More machines wanted[2016-06-24] Yesterday I performed my work '8032_alpha' in New York City, as part of Tristan Perich's record release party for his new 'Noise Patterns' CD, which is actually not a CD but a micro-controller plus headphone jack. My piece was a collage of the first test sounds I got out of the CBM 8032, and it worked stunningly well, despite my concerns (see blog entry below). To re-create that collage with nothing but old Commodore machines, I would need perhaps 2 - 3 of them on stage for sound only. So this is the plan now: I need to find 3 more CBM 8032 or CBM 4032. During the show I also projected a static screenshot from my graphics and that really made it. It looked super cool in large. Audience reaction was euphoric and now I have a strong motivation to make this project big and impressive.
Next steps: getting more machines. Solving the video out topic. Thinking about solutions for networking the machines (User Port + NMI seems to be a good plan for precisely synced changes...). Since a few people asked: I do not need a 6502 coder at the moment, the only skill I could need is someone who knows the hardware side of the CBM 8032 and the first generation of the CBM 3008 with the Pet 2001 board inside out, especially concerning the PIA 6520 / 6522 and the bus architecture / timing.
Unclear[2016-06-20] Not everything always works as envisioned: I mostly give up the idea of creating sound directly from the CBM computers. The CPU speed and the possible clock divisions of the free running shift register used for generating beeps make it impossible to create pitches close enough to musical scales. I was hoping the derivations would be interesting, but in fact they are just annoying even with my broad concept of what 'music' might be. What's left over is the ability to generate trigger signals which could be used to control sound generation and sequencing within the modular synthesis rig. That would require more or less writing a sequencing engine in assembler, and I am not keen on that task. The alternative is, to use hardware to create musical structure, sounds and trigger signals for the modular system and the CBM computer creating the graphics. Since I do not want to have a laptop or anything contemporary involved with the project, I consider using a Linn Drum, Oberheim DMX, or Roland TR-808 as a sequencer. The project does not get any smaller or easier...
CBM talks to modular synths[2016-06-15] First successful integration of the modular system and the old computer. Analog LFOs can trigger processes inside computer, sound from computer is processed by modular rack and control signals from computer can trigger envelopes etc. Yeah. Also, a second machine arrived today, a CBM 4008, with a smaller screen and unfotunately a keyboard in bad shape. Needs some work. Idea: replacing large screen of the 8032 with the smaller one from the 4008 to have a lighter unit when travelling and a replacement screen at home. A bit worried about carrying a vintage CRT tube with me to concerts.
Pseudo Random Number Generation and NMI[2016-06-12] A list of recent victories concerning the 8032 Series project: I managed to write a first test routine triggered from the outside world (a button on a bread board) via a NMI [geek link]. That opens up nice perspectives for using the modular synthesis rig as clock source for sound and graphics processing: The CBM can be slaved to a step sequencer!!! I implemented a lousy PRNG, and I found a reverse engineered algorithm of the noise generator inside C-64's famous SID chip. Will give this one a try later. I managed to pipe out the result of my noise generators via the User Port and recorded some nice digital glitchy things. Not exactly 'white noise' but cool. I step by step make my way through the basics of 6502 machine language. It is tedious but also pretty amazing. Very zen-like at the core of pure logic. consider expanding this mad project into a seriously mad one by not only touring with one CBM 8032 but 4 or 5 of them, using one for graphics and the others for sound. Benefits: more options, less programming headache, looks cooler, more is always more on stage. Downside: No more air travel with that, it all would need to be shipped. Thus, more expensive. But it would be cool for sure... Need to monitor Ebay etc. now to get more machines. Oh, and yes, I still make music! Going out and having sleep is a bit reduced though.
[2016-06-02] The audio side of the 8032 Series project is planned to be done by feeding audio and control signals generated by the computer into a small modular setup for further processing. That part will need a lot of experimentation, and there are still many open questions. Do I need to re-patch a lot between pieces or can I find a smart solution for that? Will it be possible to do somehow smooth transitions or will it be neccessary to have short breaks in between? Etc...
[2016-06-01]  A great small triumph with the 8032 Series work. I finally understand how interrupts are handeld in the machine, and what the kernal does. The CPU now is all mine, all of the time. Happilly learned that there is no NMI going on unless additional hardware is added, which is not the case here, and the IRQ is called every 20ms from the vertical screen sync, and mainly does the keyboard scanning, which I don't need for my works. Getting rid of the IRQ allows me to have control over the CPU completely uninterrupted, and that's essential for the audio part of the project.
 I found a pretty cool online assembler, which saves me from potentailly error prune manual opcode generation. [ link ] I wrote a Max patch for simulating the grahpics. This allows me to develop and test ideas whilst away from the real machine. Image above has been done with that system.
The plan is to scan the screen memory and transfer the data to say an Rasperry Pie which reconstructs the PetASCII symbols incuding the typical CRT display lines / blurr effect and render the result for a 1920 x 720 HDMI output. That's a bigger project but if at the end a hyper realistic projection of the screen can be done it shall be.
The more I work on this, the more I want to actually turn it into a performance series. I already figured out that the computer can easilly be taken appart in such a way that it can travel in two cases of < 23kg which makes transport by plane possible. I already know that I can do cool fast and flickery graphics routines. Next thing is checking how to abuse the User Port to make sound.
My biggest headache at the moment is how to find someone who can build me a scan converter that allows me to display the output from the CRT as a standard video signal. If you read this and are a scan converter expert - get in touch!Fall is also the first installation that uses my new unified laser pattern gernerator (LPG) as its basis. It started as the modular engine for the Lumière project and turns more and more into a general purpose laser vector graphics environment which I plan to use as the core for all upcoming laser works including Lumière III. Fall installation. I had to change a few things as usual, but the basic concept of projecting with two lasers onto the fragmented cube of 180 squares of fabric seems to make sense and look good. We managed to get 1/3 of the squares up today, which is a bit better than my estimation. So, all runs according plan.
2016-03-29. First successful attempt to write 6502 machine language for the 8032 Series project. Little routine inverts first character on display. Or, as the computer says: LDA 32768, ADC 128, STA 32768, RTS. Writing it all in HEX on paper is a bit masochistic, though. I need an assembler for the CBM.
Deep Web. My macbook is running Live 9.2 with a bunch of Max4Live devices for playing back a 60+ track 6.1 audio score and sending control data to the PC running Touch Designer, using a framework developed by Markus Heckmann and operated by Daniel Dalfovo to control WhiteVoid's 175 cable winches. The fader box is used to control a few parameters of the performance in real time. Touch Designer also receives the actual position data of the balls and sends them together with the color info to the twelve LaserAnimation Sollinger's Phaenon Pro lasers which do all the math for actually hitting the correct sphere in a 3D space even if all is moving. Hard to believe it actually worked but it did extremely well... Deep Web. I was successful. I also discovered the backup files of this project: Lufthansa Net Sim. Screenshot shows the user interface of the audio engine. Well, there is not much to do for the user, it is only there for adjusting some levels and to give feedback that the system actually runs. Which it does since 2009 non stop 24 hours a day 365 days a year without a single crash! Pretty rad.
2016-01-21 Right before going back to work on Deep Web, some musings on low bit depth sampling. I have a knack for the sound of 8bit samplers (see 2016-01-18). I love the sound of my LinnDrum and at least appreciate the awkward sampling artifacts of my SP-12. However, changing the samples in the first one involves swapping EPROMS (the chips with the labels in the picture above), and getting samples in the SP-12 is so tedious that it makes not much sense. I wrote a Max4Live drum sample player that pretty much captures the color of those old machines and is nicely integrated in Ableton and offers 21st century comfort in terms of sample management and timing. That could be the end of the story. Now, one of the things I enjoy a lot when working with the LinnDrum is processing the sounds with a few assorted Eurorack modules. Things like turning the ride cymbal into a hi-hat by applying a short decay envelope... That's instant fun, and the fact that there are physical controls one can touch is one thing, the other is the capability to hock up all kinds of modulations and interactions between several instruments that would be hard to achieve or impossible with the rigid structure of Live's tracks. So... I am a bit tempted to get a bunch of Eurorack modules that do logarithmic 8 bit sampling and some envelopes and VCAs. Basically rebuilding the synthesis part of an early digital drum computer. But, I learned that there is exactly one module available that does 8 bit sampling (Doepfer A-112), and it is linear. Not sure if that will fit my desires but I will give it a try. Once the Deep Web preparation madness is over, that is. Deep Web.
2016-01-18 ... spent again way too much time trying to finalize something that once was a quick idea: a nice 8bit sampler emulation. Basically a cheap Emulator-II .. emulator... and still far from being finished. This is so annoying. I should stop it but I invested so much already, thus it has to be finished one day. Fall:' installation. (See also 2016-01-06) Lumiere but also for upcoming installations. Basically I build a very universal framework now for all future laser stuff. Lot's of work which hopefully pays off. upcoming installation: A Max patch renders a specific random distribution of rectangular shapes, which will finally manifest itsfelf as objects in a real space. Patch allows to figure out good distributions quickly and store them. Best one will be chosen and become the plan for actually building it. Layers / shades of grey indicate different spatial position in 3D space. Lumiere, written in MaxMSP / gen / codebox. Lumiere. Lumiere.