iGetIt! Music

Online music education courseware for non-musicians who want to learn how to write their own rock songs.

My Photo
Name: Jim Plamondon
Location: Austin, Texas, United States

This blog documents the development of JIMS iGetIt! Music System (JIMS). JIMS' goal is to help you Understand Music in 24 Hours™, if you are (a) a non-musician (b) who wants to learn how to write your own rock songs. Requiring no instrument other than your own computer, and without using traditional notation, JIMS is being designed to deliver a deep understanding of tonal structure...in just 24 hours.

Friday, January 29, 2010

StateGroup bug in Flex 4 Beta 2

I hit an annoying bug in Flex 4 Beta 2 today: using stateGroups to set the min/value/max of a slider control SOMETIMES sets those values to NaN instead of the specified values.  It can be worked around by not using state groups...which of course makes state groups considerably less useful.

Here's a Flex app that reproduces the bug 100% of the time (source code here):


I've edited the code and walked Flex's source code in the debugger, trying to track down the cause of the failure, and also tried to find a mention of the bug in Adobe's bug database...but it's already eaten up my whole day, and I've got lessons to finish, so I'll just stop using stateGroups.  That's life in beta-land.

Bummer.  :-(

Labels: ,

Thursday, December 10, 2009

Sound synthesis solution...for now

Here's a new version of SoundTest that sounds much better (source code here):

The difference is that this new version calls sound-generating code from a beta version of the SonoFlash library. Assuming that this library will be offered at a reasonable price once it is released in final form, I expect to use it for most of my courseware's lessons.

Adobe has a list of requested features that one can vote for, and MIDI is on the list, but apparently it has never made the cut. Perhaps Adobe should acquire SonoFlash, and use its team (and cross-platform sound engine) to implement MIDI in Flash.

Labels: , , , ,

Tuesday, December 8, 2009

Sound synthesis problem

I spent the last month packing and moving, but I'm now back online (at last!).

Why doesn't this code work?



Here's what works:
  1. Click either "Play" button; a note will sound, and the button's name will change to "Stop".
  2. Click the same button again to silence the note; the button's name will change back to "Play."
  3. Click the other "Play" button; a different note will sound (an octave higher than the first note); click it again to silence it.
So far, so good.  :-)

Here's what doesn't work:
  1. Click on either "Play" button, sounding a first note.
  2. Click on the other "Play" button, sounding a second note while the first button is still sounding.
Bad things now happen.  The sounds do not blend (as one would expect octaves to do), but instead grate against each other in a nasty alternating, overlapping grind.  Also, the application's performance slows to a crawl. Click on either button, to silence its note, and you'll see that it takes forever for the button to respond to the click.

I'm not sure how to fix this.  The code seems to be working as intended. The flaw seems to be in how I'm using Flex/Flash's sound architecture -- that is, my tactics are correct, but my strategy's wrong.

Comments welcome.  :-)

Labels: , ,

Thursday, September 17, 2009

Back to coding!

I've spent the last couple of months storyboarding my first batch of lessons, on Musical Sounds, the Harmonic Series, the Diatonic Scale, Modes of the Diatonic Scale, Diatonic Intervals, and the Major-Minor Axis.

Now, I'm going to start coding them up as interactive lessons, using Flex/Flash and some video. This is going to take me a while, as my coding skills are still pretty rusty. Adobe's about to release Flex 4, which I should probably use instead of Flex 3, so that my de-rustified coding skills can be as up-to-date as possible.

Once my first batch of lessons is online and gathering feedback, I expect to start storyboarding the next batch, covering Diatonic Triads and Modal Harmony, making extensive use of JIMS™ Tonnetz, which is of course aligned with JIMS™ Keyboard (see www.igetitmusic.com/papers/Perception.pdf).

The tonnetz is a great tool or exposing the relationships among triads. Consider this depiction of the neo-Riemannian PLR relationships between the C minor triad, labeled Q, and its three neighbors on a tonnetz:



This graphic shows that performing, on Q, the
  • Relative operation produces Q's R-major triad (Eb-G-Bb);
  • Parallel operation produces Q's P-major triad (C-E-G);
  • Leading-tone exchange operation prodices Q's L-major triad (Ab-C-Eb).
Obviously, just because I'm using a tonnetz doesn't mean that I have to emphasize a neo-Riemannian approach to harmony. I can use a more neo-Rameau-ian(?), root-movement-oriented approach instead. The point is that using a tonnetz enables me to go either way, or to mix and match as appropriate.

The best thing about this is that JIMS Tonnetz is not some abstract representation of tonal space, but is, instead, a concrete aspect of JIMS Keyboard, as implemented on a computer's standard QWERTY keyboard:

Being able to relate JIMS Tonnetz directly to the sound-controlling JIMS Keyboard should make it possible for me to SHOW people how chords relate to each other, rather than trying to EXPLAIN it.

Also, the tonnetz is the dual graph of Schoenberg's chart of the regions, which is rather handy.

However, for now, I must stop thinking about harmony and start thinking about coding up the first batch of lessons.

Labels: , ,