September 27, 2002

alternative playing techniques

So I'm adding timing code to Heartburn so I can optimize it to use minimal CPU time. I'm playing from an Oxygen-8 2-octave keyboard, which is a great companion to my laptop — it runs off of USB power so there's no additional wall wart needed, it's compact and lightweight, and it has 8 MIDI-controller knobs, which is great for my purposes.

In order to test my computation of "time spent per live voice", I lay my forearm along the white keys to fire as many notes as I can, but try as I might, I can't trigger all 15 whites. It's a limit on the keyboard's capability, as it turns out, and my first thought was "Ten? I can only play ten notes at once? What a completely arbitrary limit!"

Then I remembered how most people play keyboards.

Posted by russell at 04:28 PM | Comments (31)

September 26, 2002

Pun<ctua*tion>

Heartburn is evolving rapidly. I got basic formant filters working yesterday — that's a resonant filter system whose frequency response mimics that of the human vocal tract shaping various sounds — but the frequency data I used was uh sorta bogus. So today was largely spent improving that data set and now I have 45 different spoken and sung vowel options. The synth can morph from one vowel to another over the course of a note, even oscillating between two, ai-yo-yai-yo-yai-yo. It can even shift among them randomly to produce what Robin Williams once referred to as "one long vowel movement".

I also stripped down the oscillator structure I was using to use only three oscillators per voice instead of six while extending my Nominal Fourier Synthesis system to support something like the odd/even timbral control from Edge2. The names now get weird characters in the middle. I need to update the NFS doc now. Well, not now, but you understand.

Somewhere in there my progress started getting slower because it started to be really fun to play with it. I'd make some tiny little change and then spend an hour exploring the noises I could get out of it. Gotta focus and get the remaining features I wanted into it.

The main stuff left to do is to support a lot of MIDI functionality. Right now I can assign MIDI controllers to the parameters of my choice via Mulch's automation system. What I want is to offer the choice of either that method or a bunch of automatic mappings of MIDI controllers to synth parameters. I'll set it up the way I think it should be and then have a toggle to let opinionated people set it up they want to.

Some other small stuff. Right now, a single envelope generator drives the note amplitude, the formant-filter morphing, and the simple-filter cutoff frequency sweep. That should probably be split into multiple envelopes — but two, or three? Right now, the formant and simple filters are running in parallel and their outputs mixed; I want to have a switch that toggles between running them serially and parallelly. Parallelly?

The "random" formant setting is cool, but I want to set up separate sub-range randomizers so the vocalist doesn't change sex in mid-yodel.

Right now, the envelope generator can do a fine tremolo (it just fell out of the work I did to make the filters morph for as long as the note is sustained), but there's no vibrato. Traditionally you put in an LFO for that and offer the option to route the LFO to more than just the oscillator pitch controls. I'm trying to think nontraditionally here, though. Applying an LFO to the oscillator pitch suggests the possibility of doing FM (basically the same thing in a different context), which right now my oscillator code cannot do efficiently at all. Getting an efficient FM system without hurting my existing oscillator performance would be cool, and LFO vibrato would fall right out of that.

Another approach to vibrato would be to use another envelope generator. Maybe 2<=N<=3 envelope generators total, and for each of (formant-filter, simple-filter, volume, pitch) select which generator drives it. For N=1 or N=4 you avoid the selection entirely. Tradeoff between flexibility and keeping parameter count low (it's already fairly obscenely high).

Woof. Like I said, a lot of small stuff. But it makes cool noises, so I get distracted easily. That's progress.

Posted by russell at 10:04 PM | Comments (32)

September 24, 2002

questioning misplaced virtues

The work I did on Edge2 carried over to Heartburn very nicely. In only a day of coding, Heartburn went from some scribbled notes to a usable synth. So far it isn't much different from three million other virtual analog and wavetable softsynths, but that's just stage 1. Plus it supports a waveform called "Bastard", which is just inherently cool. I still have a lot of work on nonlinear chaotic resonance components to do before it's anything cool, though.

At some point Heartburn will probably collide with Plark and the two will meld into one synth. Which name do y'all like better? "Heartburn" is a Chris Connelly song, "Plark" is the Russian acronym for "Podvodnaya Lodka Atomnaya Raketnaya Krylataya", or "Nuclear Powered Cruise Missile Submarine" (what the US calls an SSGN). There are obscure, tenous chains of mental connections behind both names, but they probably only make sense to me so I won't go into the details.

Posted by russell at 09:36 PM | Comments (49)

September 23, 2002

Look at the time

Wow, almost three weeks since I've ranted. I got the laptop back from Dell in excellent time, so I can't even use that as an excuse.

What have I been doing in the meantime? Doesn't seem like much. I re-edited our movie reviews into the new MT blog that meriko set up for them. That took a while, as I never felt like working on it for long stretches of time. I have a long list of movies we've seen that aren't on the review page yet, though. And there are more that we've forgotten about.

I played some of the Unreal Tournament 2003 demo. Verdict favorable overall: good gameplay, great graphics, excellent performance even on two-year-old machines, silly title, some idiocy in the server browser, and why even bother with teamplay modes if you aren't going to put voice communications in the game? If I can get meriko hooked on the demo, we'll probably get the full game.

It's been really warm here, too hot to think sometimes — I just don't do very well in the heat. Everywhere you go, though, you have some sort of climate to deal with, and San Francisco is really exceptionally mild. The northerners laugh at our silly little 40-Fahrenheit winters. The desert creatures don't laugh at our hot days, they just tell us how lucky we are that we can go outside without stillsuits.

The iMac was ordered and is on the way. I'm excited, but I still think I'm going to have to clone myself to deal with all the projects I want to start. I think the curb-household-spending dam is cracking a bit — we've both ordered some books and tee-shirts and CDs and random other toys recently. Nothing big apart from the computer, but just a few little releases after reining in successfully for a while.

Some bastard stole the potted mint plant and another pot (empty) from right in front of our house. In two missions. One of them in broad daylight on Friday, between 9 and noon. I had the rage. If I catch the guy I'm going to do something stupid. I feel like we should set up one of our dust-gathering webcams looking out the front window, except there's nothing nearby, really, to hook it up to, and I don't like bluffing.

Oh yeah. A couple of rants ago, it sounded like I was going to do a soft synth, Heartburn, using some ideas from Edge. Instead, Gregg talked me into rewriting Edge with some new goodies (yes, you can do Fifty-nine tone Miller's Porcupine-7 Major on it), but the oscillator redesign that came about from doing that will be a substantial part of Heartburn, so it's all good. Edge2 is available in the usual place.

Uh-oh, I feel a REAL rant coming on now.

I've also been revisiting some Computer Music Journal articles, trying to stuff more concepts into my mental percolator. Seems like one or another article always offers some insight into something I was already mentally toying with; I can't tell if it's because I select those articles to read, or because those are just the ones I'm ready to comprehend.

I get a little annoyed with the articles in some cases, as I think they have a tendency to use mathematical notation when plain English is more useful, as well as to forget to tell you what Cβ is supposed to mean. Maybe it's just programmer-not-mathematician bias, but concepts that I think should be expressed iteratively, they always express in a math-functional way. This does lend itself better to analysis, sure, but it's about as informative to the reader as machine language. Yeah, I'm just whining 'cause I dropped out of college before I learned all that complicated stuff. That's it.

Oh, and to compound this, I decided that I didn't want a stack of dead-tree CMJ lying around the house, so I went for the electronic subscription. Their electronic subscription system is a mess. You can get the articles in RealPage plugin format, which, oh sorry, doesn't work on IE6. You can get them in PDF format, which isn't so bad, except that some of the formatting is a little weird — extraneous whitespace on the left of certain equations or symbols pushes them out into the margins from time to time, and the kerning is awful. And the Acrobat reader plugin tends to hose IE on my machine, so I never really trust it, though it seems to work okay on the CMJ articles. Finally, there's Adobe's SVG format, which as far as I can tell is PDF with extra features that takes twice as long to load a page. Oh, and the "remember this preference" control that you're supposed to check once you've found a format that works for you? Doesn't work.

So I'm going with PDF. Either I have to scroll around the page, or squint at tiny tiny 8-pixel type: my vertical screen real estate is spent on the IE title bar, IE menu bar, IE tool bar, IE address bar, then about a vertical inch is spent on a toolbar which includes within-the-issue navigational controls (prev/next article, TOC), then finally the Acrobat toolbar. Oh, and then down at the bottom I have the Acrobat status bar, IE status bar, and Windows start-bar. Come on, guys, does not one of you, browser, journal, or portable document format guys realize that most printed pages have a portrait aspect and you're already fighting a landscape aspect ratio? Could not one of these toolbars have gone vertically on the side? (Yeah, I know, the Windows bar can be moved to the side, some of the others can be removed, etc., etc.) I'm on a freakin' 1400x1050 pixel screen here, and I can't read the thing. At 1024x768, it's a joke. How do people stand this crap?

So I'm reduced to printing out the articles that I'm actually interested in if I want to read them at all comfortably. I think I'm gonna write some mail to MIT Press and/or CatchWord and see if I can't get them to fix some of this. Blurg.

Posted by russell at 06:38 PM | Comments (12)

September 03, 2002

emergent redux

Welp, I updated the plugins page today, separating the vaporware from the downloadable ware. It's a little more honest about the chances of ever seeing Plark or Animal than it was previously. It also gives some names to some things that were just bouncing around my head. That seems to help a bit.

Hopefully I can find some time in the next few days to work on some of these projects. As always, my attention wanders from one project to another, but since I drag bits of ideas from one to the next I sometimes get some good cross-pollenation going.

Unfortunately, I've run into a bit of a setback. The screen-lid hinge on my laptop busted and it's off to Dell for repairs. Fortunately it's under warranty. I'm not that abusive to the machine, so I don't understand why it broke. My old laptop had a similar failure; the rotating bit somehow seized up so that attempting to open the lid stressed the metal bits until they'd had enough. I love that machine; even though I have 2 other (desktop) machines with comparable CPU performance, it's just so nice to be able to take it downstairs into the cool when it's blazing hot, or sit upstairs in the living room and enjoy the sun when it's mild, or drag it out to the local cafés when I need to avoid the net.distractions for a while.

We're talking about picking up an iMac in the near future, with the idea that I'll start doing some OS-X programming on it. I'm a little ambivalent about the idea — I feel like I don't need to go out of my way to invent more programming projects to split my time among, and I don't want to spend money on big-ticket toys while I'm out of work. On the other hand, I'm getting envious of a lot of the features I see meriko using on her wee iBook (which I'm using at this exact moment). I feel that Win9x/NT/2K were, on the whole, technically better than MacOS 8.x and 9.x, but OSX leapfrogs WinXP. The BSD core means that a lot of things that would be tedious or expensive to set up on a windows box are just there. Like, say, an ftp server as well as client. (But then meriko showed me iChat's Rendezvous-based ad-hoc chat session1 which includes file transfer capability; who needs ftp?) So, anyway, I'm in favor of having a Mac of some flavor in the house that isn't meriko's primary machine. The 17" G4 iMac seems a reasonable balance of inobtrusiveness and bitchin-ness and portability. About the only thing wrong with it is that the video chipset won't do justice to Doom III when it comes out. I spent a little while looking at the state of cheap VST host software on the Mac, and there isn't much yet which corresponds to Mulch, though Plogue Bidule is supposed to get ported at some point. There are cheap and free minimal VSTi hosts, though not "virtual studios" as far as I can tell. Maybe I should just buy Cubase for OSX? Memo to self: GET A JOB.

That's all for now.



1 Einstein is supposed to have explained radio something-like-thusly: "Imagine a telegraph as a very long cat stretching across the country. You pull on the cat's tail in San Francisco and it yowls in New York City. Radio is just the same, only without the cat." iChat-Rendezvous is like using a chat server sans chat, or, rather, avec chat et sans serveur.

Posted by russell at 04:30 PM | Comments (6)