Category Archives: Technology

Sound in Theatre

I’ve been doing sound work in theatres since high school, and I’ve run into some pretty interesting software over the years.  I’ve used audio editing tools like Sound Forge, Audacity, Audition, SoundBooth, etc.  I’ve composed music in Cubase, Sony ACID Pro, FruityLoops, Apple Logic Express.  The list goes on.

But once the music is composed, and the sounds are all edited, how do you play them back during a performance?

The old way was to play them through a CD player; you’d burn all your sounds and music to disc, and then track through.  God help you if you had to do a cross-fade on an actor cue though, because that would mean having two CD players, cuing them up simultaneously, and doing a manual cross-fade on the mixer.

There are better ways to do this.

In fact (and my boss, UCDP Tech Director Peter Freund would agree with me on this), there seems to be a trend nowadays to put more emphasis in programming and preparation, and to make playback mostly automated.  It’s true for lights (lighting boards are pre-programmed with cues, and then the lighting operator just hits the ‘GO’ button to go through each transition), and it’s now true for sound.

Check out this piece of software. It’s called QLab.  And it’s free!  This is what we use at the UCDP.

But there’s a small problem:  it’s only for Macs.  Which blows.

Actually, it really blows.  As a modern web-developer, I take cross-platform applications for granted.  Sure, IE may quirk out, but we can usually work around that (thanks jQuery!  Prototype!).  QLab, however, is Mac software, and that’s all she wrote.  It’s really kind of heartbreaking.

If I had the time, and if someone would pay me, I’d look into writing an open-source cross-platform QLab clone.  In Java, maybe.  There’s probably a ton of issues doing cross-platform sound work, but Audacity did it – why can’t I?

Just a thought.

Oh, and yes, there is a free piece of playback software for Windows called Multiplay that’s alright, but I find QLab a bit more flexible.

Everything is amazing, and nobody is happy…

I want you all to know that I don’t plan on becoming one of those bloggers that just posts funny videos that they found on Digg.

But I found this funny video on Digg.

And it’s not just funny – it’s completely true.  I’m absolutely guilty of what this guy is talking about.  My generation is totally spoiled.

Here’s a link to the video.

Maybe, every now and then, we should stop complaining about technology, and marvel at just how incredible its existence really is.  Stop begging for the flying car, and be thankful that your cellphone communicates with satellites in space.

Really.  Hm.

CodeSprint ’09: What Happened?

For those of you who don’t know, this past Thursday, Friday, and Saturday, I’ve had my face planted into a laptop, working 8 hour days on the OLM project.  

And I wasn’t alone.

I was in a room with plenty of other Computer Science students – some even coming from as far as the West coast to join us. Good people, good times, interesting problems, and free food – all care of Greg Wilson, Karen Reid, and the other support within the department.  It was really fun, and I learned a lot.

And we coded our asses off.  Literally.  It was awesome.

So what did I end up actually doing?  Well, when TA’s are marking code, there are little menus that let them attach pre-built annotations to highlighted sections of code.  I’ve also replaced the ugly Javascript Prompt dialog that asks for new annotations with a nice, modal dialog, using LivePipe UI.  The team also got the rubric listed next to the code, and we now have the ability to apply grades on the rubric!  Awesome!  We’re almost there!  There are plenty of tickets, plenty of ways this code and interface can get cleaned up, but we almost have the behaviour we want.  And that’s something.

If I get a chance, there are two things I’d like to do:

  1. Replace the SyntaxHighlighter Javascript code with something a little less client-heavy.  Maybe we can syntax highlight the code on the server side before we send it to the client for viewing?  That doesn’t sound too bad… does anybody know of a Ruby gem that’ll do that?
  2. Refactor the annotations code.  Right now, it’s a lot of Javascript.  A lot.  I’d like to shave it down, simplify it, streamline it.  But that’s what refactoring is all about, right?

Oh, and, in other news, I’m considering graduate school, and doing Google Summer of Code.  Just something I’m mulling over in my head…

Update:  Coding for three days straight brought sooooo much tension back into my shoulders…this is where Movement class exercises become very handy…

Mouseover / Mouseout on Nested Elements

Did I mention I’m code-sprinting over the next three days?  Actually, next two days – I just finished my first day today.

What’s code-sprinting?  It’s a trendy term for sitting down with your team, and plowing through code en masse, trying to get as much done as possible.  8 hour days, cookies, coffee, whiteboards, pizza, crashes, bugs, tickets, fixes, etc.  We’re trying to cram 3 weeks of work into 3 days.  Cool.

In case you don’t remember, I’m working on a project called Checkmark (or OLM…still undecided on the name) – a tool for Professors/TAs to receive student code submissions, and to facilitate easy marking and annotating of the submitted code.

So here’s something I learned today while coding:

Say you have some nested DIV’s, and the parent DIV has a mouseout trigger.  Something like this:

<div id="parent" onMouseOut="alert('Mouseout triggered on parent');">
  <div id="child_1">This is some child</div>
  <div id="child_2">This is another child</div>
</div>

As you would expect, the mouseout event will get triggered if you move your mouse over the parent DIV, and then move the mouse back out again.

But it also gets triggered when you move your mouse OVER any of the child DIV’s.

Say what?  That’s right – even though you’re still inside the parent DIV, the mouseout event got triggered.  I found this out today when I was trying to code dropdown menus in Javascript/CSS using Prototype – I could get the dropdown menus to appear find when I clicked on the appropriate button, but they’d disappear again as soon as I put my mouse over any of the sub-elements of the DIV.

So how did I fix this?  I found this example code, and adapted it for my purposes.  This code assumes that you’re using the Prototype Javascript library.

$('some_dropdown').observe('mouseout',
  function(event) {
     //We could probably replace the following with Event.element(event), but oh well.
     var target = $('some_dropdown');
     var mouse_over_element;  //What the mouse is currently over...
     //So let's check to see what the mouse is now over, and assign it to mouse_over_element...
     if( event.toElement ) {
        mouse_over_element = event.toElement;
     }
     else if(event.relatedTarget) {
       mouse_over_element = event.relatedTarget;
     }
     //In the event that the mouse is over something outside the DOM (like an alert window)...
     if(mouse_over_element == null) {
        return;
     }
     //Now we just make sure that what the mouse is currently over is NOT a descendant of
     //the dropdown, and that the target is not the current mouse_over_element (I can't
     //remember which case this covers, but it's important)
     if(!mouse_over_element.descendantOf(target) && target != mouse_over_element) {
        target.hide();
     }
   }
 );

And it works.  Whew!  Just thought I’d share that little snippit.