Can’t believe it.  Monday week is the final “day” of this 30 Day sprint/challenge.  The month has flow by!

Well.  Today was….  Interesting.

Last night, right after final source code backup for the day, I thought I’d be nice and run the code through a source code formatter courtesy of Project Jedi.  Made all the source nice an “awwww, so pretty”.  ;-)

Until…  I started coding today and we hit bugs-ville.  Weird bugs that made zero sense.  Messed with these weird bugs (for to long) until I remembered the above action last night.  Renamed the “current” directory, restored the backup.  Bugs gone!

Seems this tool, on closer inspection, adds some nice Unix style end of lines to the code.   Well geez!  Thanks for that one guys!

Note to self.  There is a *reason* why I don’t use, if possible, open source software.  This is why.

OK.  So the special effects are all implemented now.  Cleaned up the little bits and pieces that make sure captions reflect current status through out the application and linked in nearly all the menus, if they weren’t linked before.  Took out extraneous long extinct now commented out code.

Made sure my inlined functions  were being handled right and not throwing warnings on compile. 

Added a way to have a project in editable mode or “performance” mode.  I decided to add this as a safety feature.  Basically a project really shouldn’t be scrolled through during a performance (with the exception of the active playlist and any special effect toggling if the user changes their mind on these).  So that can be done now via a menu option or via a text hot link on the top toolbar far right - where I temporarily had stuck the “clock” previously.  A small lock/unlock icon goes with it.

Still got to get to replacing the file Explorer pane.  Moving that to Monday along with template generation.

Yet to re-do archiving.  That’s an easy job.

Also got to do update and finish the help file/docs. 

Not as far forward application wise as I’d hoped today, but then the “best laid schemes of mice and men” <g>

However…  I did manage to get a nice web designer to take on website work for the application in terms of design.  In fact, one of our own 30 Dayers - Sue from Alta Webworks.  Sue’s done some absolutely stunning designs for website’s, another link here.  So I spent a part of the afternoon emailing and getting some graphics, design ideas etc together for that.   I’m *very* pleased about this.

OK.  I’ve got a few things to take care of before turning in tonight, so hopefully a bunch of the remaining items will be completed by tomorrow nights update.

Quote of the day:
We are all apt to believe what the world believes about us. - George Eliot

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

Didn’t post an update yesterday.  Simply ran out of time an energy.  I’ve not finished coding for the day yet so this’ll be brief and I’ll expand further tomorrow night.

Some sightings tonight, witnessed by me (and probably others following the 30 Day feed I should suspect).

Mysterious mISV 30 Day Sightings

Nope,  it wasn’t Sasquatch.  We don’t ”mess” with them in Australia, we have Yowies instead!!  ;-)

Some fantastic posts came through the 30 Day feed tonight.  Beautiful looking products, fantastic progress by the folks involved in this.  I was really impressed.  This has been an awesome exercise.  I’ve learnt so much.  Not from what I’ve been doing alone, but from what all the other participants have experienced too.

Yesterday started out OK until I somehow managed to link the BeforePost event of two datasets together.  Point and click events are great until two objects share properties and you don’t realize you’ve done it.  Combine this with, in this case, datasets living on a datamodule and separate to the UI code and one may find oneself where I did.  Spending two hours trying to fix a bug that never existed technically.  Grrr!

After kicking myself for being a stupid twit and taking a walk in the cold Melbourne afternoon air I did manage to get some real work done.

Fixed a real bug in the track position slider in respect of threads.  As I said on Thursday’s post I’ve implemented threaded timers now and as with all things related to threads one has to be careful.  The thread was firing a little to quickly compared to a regular timer it seems and needed slowing down a tad.

Moved then to the track properties and the logic associated with them.  All done.  Breathed a sigh of relief and sat down to watch a few StarGate SG1 DVD’s as compensation.  ;-)

Today I got up and after a couple of cups of caffeine and trying to read the progress of the other 30 Dayers (anybody notice the FeedBurner feed went down for over a day?)  went straight into implementing track special effects and logic. Glad to say that’s done now.

Next came the logic for the Special Effects.  Finally!!

All coded.  Just got some adjustments to do so that the results aren’t to extreme, but they work and work well.  So each track that plays will, if an effect or effects has been selected, load the appropriate effects to apply to the audio.  None loaded?  No effect applied of course.

That pretty much took up the day.  I’ve got some basic logic to do before I turn in tonight.  Just making sure buttons and labels update their caption state according to what mode is selected.  Presently under certain circumstances they go out of whack.  It’s an easy fix so that won’t take long.  :-)

Tomorrow I’m replacing the Delphi TShellTreeview and TShellListview with super fast replacements I’ve sourced.  They work at least as fast as Windows Explorer, if not a tad faster.  Very pleased about this as the Delphi out of the box implementation was giving me ulcers waiting for it to load a directory.

After that I’ve got to make sure the script (stage action, actors lines, cue’s and such) are updated according to the Act or Scene loaded and implement virtual editing in those so the user can just type and the program handles the save, like pretty much everything else in the program already does.

Finally will be the templating.  Templates of pre-fab Acts and Scenes that the user can select and use.  These will give them the basic structure of a project just by choosing and selecting, plus a few tricks besides.  ;-)

That will bring me to Monday.  Monday I’m aiming to make documentation day and setup/installer creation day so I can do a full install onto a virtual machine and my wife and kids machines after that. 

If that works, it’ll be Wednesday before I can get to, what I hope is the last step (and one sure to take several days in itself), then external testers will get to play with it for a few days while I prepare security issues in the binary (licensing) and web site related stuff (building the actual site would be a good start <g>).

More info and some final screenshots tomorrow night…

Quote of the day:
To invent, you need a good imagination and a pile of junk. - Thomas A. Edison

Postscript of the day:
Edison would have loved my office. -
Scott Kane

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

OK, maybe no bears…  ;-)

Delphi has a problem, for those of you who don’t use it or are unfamiliar with it, an extant problem in respect of Unicode.  Delphi hasn’t got a clue what to make of it (please don’t tell me about the commercial Unicode components, I know about them but the budget is stretched as far as it’s going to go this month). 

This has never been a problem for me before.  But today it bit and bit hard. 

As I’ve mention before I’ve incorporated the Berg Components into MixAction (extensively) and they are really cool. The Playlist is actually NextGrid, part of this suite.  I didn’t know I had any issues in this regard until I decided to fold the last remaining meta data folder into the Project file (or database) rather than leave it out in it’s own folder.  Thus only media files would be external and everything would be nice and neat (and I might add repairable should anything untoward happen by way of text file truncation). 

Not to be. 

The NextGrid saves as Unicode!  Now, I’m not complaining, this is technically a desirable feature.  Problem is the rest of Delphi hasn’t a clue what to make of the data if I try to load it into something else. 

Took me a an hour to work this out and finally decide to leave well enough alone for now. Said meta folder for the Playlist and associated files remain in situ in the project folder.

Cleaned up a lot of stuff today. 

Removed unused variables and those types of things.  Made sure all the User Preferences (options), which I also pruned down, functioned. 

Switched off CD player auto-load when the program starts, and if it was turned on to start with, turn it back on when program exits. 

Suspend the system screensaver while program is running (as opposed to turning it off altogether) as that’s bad news when playing audio files in a live situation, especially with Direct-X effects loaded and running.

Fixed a small bug in a zero based list, forgot the -1 in the code. ;-)

Made sure the hints work over the basic controls properly, haven’t done the advanced special effect control hints yet.  Also making sure said hints reflect current control settings (increments, decrements).

Moved all the audio timing stuff into separate threaded timers with appropriate priorities. 

This made a *massive* difference, predictably, in terms of how far you can push things.  CPU usage dropped from an average of 17% to an average of 4%.  Interface updates run 100% smoother, rarely any flicker occurring with other app’s loaded and I get none when the app is the only one loaded, which would be the normal state of affairs when using it.

Spent a good deal of  time cursing Delphi’s implementation of TShellTreeview for being so bloody slow at updating.  I’m considering replacing this as I find it totally unacceptable in terms of speed.  I know most users won’t have  eight partiions permanently available on their system as my dev machine does, but the implementation of this wrapper is very sloppy IMHO.

Implemented detection of audio overload.  If the user pushes the levels past “safe” a little, modeless, window slides up from the bottom of the main screen and warns them.  These kind of “warning hints” can be turned off if the user wishes however.

Added a bunch of miscellaneous safety options for systems with older components, like some errant and ancient CD players that object to having their status monitored.  User can turn status monitoring off if they need to.

Way behind on the help file, I should point out, and I’m not happy about that.

Still no solution, not that I worked on it today, on the CD burning front.

I wasn’t going to write this entry tonight as I hadn’t felt like I’d gotten anything done.  Glad I did as reviewing it I got quite a bit done which makes me feel a lot better.   The day started with a power blackout and I couldn’t write a lick for five hours.  Got to do something about that by way of a generator and UPS I’m afraid.

OK.  More fiddly  stuff tomorrow.  I’ve simply got to get the track properties implemented, along with fading or I think I’ll go nuts.  ;-)

Also looking like another all weekender.  Tuesday my eldest is in a school play (how ironic!) and I have to attend that, which at it turns out requires my presence for most of the afternoon and evening.  So Tuesday will be a no work day and Wednesday morning is tied up with other things. 

Later…

Quote of the day:
I have a new philosophy. I’m only going to dread one day at a time. - Charles M. Schulz

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

I’m going to keep this one short tonight as I’m dog tired and in need of some rest…

Later on this week, possibly tomorrow, I’ll post some screenshots of today’s work.

Created the basic special effects interfaces today.  More on them when I post the screenshots.  Basically they are embedded into the main UI and can be toggled visible/hidden at the users discretion.  They await the linking in of the code to make them actually do something, but believe it or not that actually takes less work than their UI’s.

Coded the logic to allow an entire performance to play, should the user want it to, from start to finish.  Much like a “normal” media player might run through a playlist, except of course this does it Act by Act and Scene by Scene.

This is preparatory for adding the logic for fading tracks in and out and of course fading one track into another.

MixAction allows the user to choose which songs fade into each other.  It is not a one or all proposition.  So track one might play solo and finish with no fading.  Track two might fade out completely, or fade in, or fade into track three.  Track Three might instantly start over the top of fading track two and so on.  So basically the automation here is pretty flexible.

Cleaned up the Track Details dialog (the meta tags ripped from an audio track within which they can be altered non-destructively to suit a project in terms of naming etc), removing the old references to track settings and special effects.

Spent way to much time fighting with the code I have for burning CD’s.  It’s broken on Vista sadly and I’m going to have to look into something else for this particular trick.  The fact that it should work not withstanding, works fine on XP and it’s using the MS SDK.  There are some mysterious things deep down inside Vista.  ;-)

1music-med

Yet to do silence detection.  This is important as it assists in badly encoded audio tracks (gaps at the start and end) and also in terms of how fading in and out is handled.

OK.  Will post something more in terms details tomorrow. 

Quote of the day:
For a list of all the ways technology has failed to improve the quality of life, please press three. - Alice Kahn

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

Working with the “Project File” (database) today.  User can now change the imported tags to something more meaningful in relation to their project.  This makes the play list in turn more meaningful to them.  Pretty familiar territory for me as database programming is what I’ve mostly done throughout my career as a developer.

In the course of doing this I’ve made several changes to how individual audio tracks are shown for editing. 

The basic tag stuff, stored in the database, is pretty much what you’d expect.  Track name, artist etc.  Frequency is stored there, important as the user will be able to change the pitch, speed and the frequency (affecting both pitch and speed at the same time) of any track.  So this makes a quick and easy reference point to restore the frequency to the default. 

Of course I could just re-query the audio file, but that requires reloading it if it’s not loaded and so is a lot faster and more convenient in terms of performance and syntax when programming it.  ;-)

OK.  So originally I was also going to have the track “Properties” on this dialog.  Last night I was lounging before going to bed and decided this made little sense. 

Everything else is in embedded windows inside the main application window (though they do not look or act like embedded windows), this has been done purely to help break up the code into modules, aiding design and maintenance of the system).

So tonight I’ve begun the process of building windows to embed the track properties into the main interface, in the same position as the Equalizer etc, allowing it to be toggled visible or not as the user desires. 

I think this makes it a heck of a lot easier and convenient for them and I’m surprised at myself for not taking this tack originally!

Something I’ve not explained about MixAction is it’s way of doing saves of changes to properties and data. 

There is no “Save” option on the File menu that one usually expect to see in similar applications.  I make no excuses for borrowing this concept from the Apple Mac. 

You change a property and it’s changed.  Saving is handled by the application.  Right from the project itself, the play lists, the application preferences and now the track properties.  No “OK”, Cancel” or “Are You Sure” for these elements. 

The exception is User Preferences for master audio settings and User Preferences for stuff like showing tips, hints etc (shown in dialogs in the standard Windows way). 

Audio file formats we’ll be handling are now:

  • MP3 - Tentative still.  Coded but no decision made.
  • WAV 16 Bit
  • WAV 32 Bit
  • MP2
  • MP1
  • OGG Vorbis
  • Windows Media Audio (WMA etc)
  • MOD Music
  • MTM MOD Music
  • S3M MOD Music
  • XM MOD Music
  • IT MOD Music
  • MO3 MOD Music
  • Raw CD Track (play from CD)
  • AIFF
  • FLAC
  • AAC
  • MP4 - Tentative.  Coded but no decision made.
  • AC3
  • ALAC
  • WavPack
  • Gecko Music (our own multi track format)

I’ve not included MIDI at this stage as I want to move to release in July and the last thing I need is people wanting VST support “yesterday”. 

Speaking of MIDI.  I’m aiming to add MIDI hardware support to the application at an undetermined point in the future but it won’t be part of this “basic” package as it’s more of and advanced user function and MixAction in this version aims for the less than semi-pro user.

Latest Screenshot’s:

MixAction1

MixAction2

You’ll notice the far left column is filled out a little more now, the links that indicate “Show Track Settings” etc work like hyper links on a web page and underline, show hot when a mouse is placed over them.

Also the tracks now show edited track details in the play list (center column of window) rather than the defaults extracted from the audio files tags.

OK.  I’m still yet to work out the best way to allow for potential customers to download and try out the software.   To some extent it’s the kind of product that for some folks will fill an immediate need and then afterwards the necessity for registration become moot unless they do performances regularly.

I have several options. 

  1. Voice stating it’s a trial version and suggesting registration.  I like this option and a popular DJ package does this.  The voice also plays randomly over the top of the music as the product is being used (imagine the fun you could have if the app detects it’s been cracked or keygenned <g>).    Or…
  2. Standard 30 Day trial that times out.  Full featured with no voice over nag.
  3. A combination of 1 and 2 above.
  4. A timed execution so that the program shuts down every X.XX minutes.
  5. Crippling.

Of all of the options I favor 4 and 5 the least.  Crippling means you don’t get the full feel.  It also means potentially two versions, trial and full, as it’s pretty pointless crippling if the code is included in the trial.  The Jolly Rogers love making “dIs iZ FReE FEr yOu dUDe” patches for such things.

If you’ve got thoughts on this please do feel free to leave a comment.  All grist for the mill.  :-)

Back to the grindstone!

Quote of the day:
The future is here. It’s just not widely distributed yet. - William Gibson

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

It’s day 16, well actually it’s past midnight here so it was day 16  ;-)  ,and I’ve been plodding away all day, quite happily.

The Dynamics Controller, basically another name for a compressor that includes limiting to prevent “clipping” (distortion) through over driving is now fully coded and working.  So the Equalizer and Dynamics Controller are all setup. 

The Dynamics Controller is not a cure for stupidity of course, it’s there for minor goofs in output levels and helps keep the peaks down a bit, especially sub-harmonics, which are the most damaging speaker wise in live audio.

A few basic presets enabled, the remainder I’ll add later as presets require a bit of experimentation (translating decibel and frequency theory into floating points and integers actually).

I’ve added the UI for the “script”.  This is basically an embedded container, similar to the EQ and Compressor above, except it holds the actual script for what’s going on on the stage or theatrical production.  “What the actors are saying/doing”, cues, timings and anything else one needs to know to keep ones place in the action. 

Like the above this is toggled on and off so that it can appear and disappear as the user wishes and is embedded so it’s not getting in the way of everything else.

That took a good portion of what was a short day, I had some other things I had to take care of and I admit my concentration wasn’t what it should have been today.  But then I’ve not had a day off since week last Saturday so I think I’ve earned some slack time.  ;-)

We have an icon. 

I got some quotes last week from various places, some cheap, some reasonable and some over the top.  The one I chose offered me a vector image that matched one of my proposed designs.  The price was right, the quality I think pretty good and the design appropriate to the application.  A vector image means I have to generate the icons myself, which is fine as I have the tools to do that.

I was tossing up between the classic theatrical masks and the suggestion Mike Wilson, another 30 Day participant, made in a comment here that I consider stage curtains.  Now, I have a competitor on the Mac who uses stage curtains for his icon.  But what the heck - in the end I went for the red stage curtain design as it sits well on Win2K to Vista which higher resolution images often don’t.  So my thanks to Mike for making the suggestion.

MixAction icon:

MixActionIcon

Note - the resolution blurred by me and the “Sample” text added for the purposes of display on this blog and in so doing I’ve mangled the edges, entirely intentionally for rather obvious reasons. 

So relevance of the icon seems to be solved.

I’ve also been revisiting my web site design ideas for the application. 

I’m now mulling over whether or not I will actually go with Joomla.  I love the Joomla package and all it offers, I have a template, but when you strip away the not needed extra glitzy mootools cool stuff on the front page you’re basically left with nothing very exciting. 

The problem is finding a Joomla template that fits what I’m doing here.  I don’t mind buying in graphics for it, but CSS coder I am not.  So I’m looking around and am actually considering a standard HTML site if I have to do so, though the issue here is missing out on the ease of adding articles for SEO purposes that makes Joomla so appealing to me. 

Basically I want a “Web 2.0″ look.  I have that, but as I said above, strip the bells and whistles I don’t need away and thinks become bland and unrecognizable.  A shame because the templates I’ve purchased are stunningly beautiful with those bells and whistles.

Tomorrow’s work is getting to the track properties so that the user can butcher our carefully extracted audio file meta tags into something more meaningful for their production.

From this leads us to the implementation of the other special effects such as:

  • Chorus 
  • Compression
  • Distortion
  • Echo
  • Environmental reverberation
  • Flange
  • Gargle
  • Parametric equalizer
  • Reverse
  • Plus a few I’ve made up myself that combine the above like chipmunks and mega baritones.

After that we have the track timing where user can edit when a track starts and ends, whether it fades in or out, whether another track starts after it fades or finishes or said track fades in over it.

I’m hoping to add triggering which will allow for effects to fire on and off in sections of a track instead of all the way through, but that will depend on time constraints in respect of getting the first release out.

After that we tighten the code, polish off any miscellaneous bits and pieces, make sure the help file is up to date with all changes that have been made and….

Later…

Quote of the Day:
When all else fails, read the instructions.
–Cahn’s Axiom
also known as RTFM (Read The F’in Manual)

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

A really good day today.  Not nasty surprises in the code, everything popping in just as it should!! 

I’ve probably jinxed myself for tomorrow having said that now.  ;-)

We have a graphic equalizer.  Seven bands working just as they should and sounding pretty sweet too, especially on the largest power amp and speakers attached to the development system.

250 watts RMS @ 8 Ohms + 500 watt sub, hardly “reference  monitors” but perfect for testing MixAction on the kind of system it’s likely to be used on.  As these are actually PA speakers (of the kind used by DJ’s and bands) they thump and they hold out better with boosted EQ levels than the little things that come with PC’s. 

Also more capable for this kind of punishment than my real “reference monitors” I use for studio recording and of course my “standard” HI-FI speakers that are comparative babies rated at  100 watts RMS @ 8 Ohms.

I can assure you that while the neighbors have no idea what I’m writing they certainly now know that I can shake and break their best china.  :-O

Very pleased with the sound.  :-)

The EQ interface is embedded.  A click on the Special Effects button at the bottom of the main window toggles the EQ, Dynamics Controller and a few other options into visible/hide mode.  Reasonably happy with the look of these, but reserving final judgement until I work with them for a few days.

As these particular tools are “system wide” and not dependent on individual tracks it makes sense to group them together and make them available for changing at “performance time” given that a users favorite settings will probably sound like rubbish when they get to a real “hall” and again later when it becomes full of middle frequency soaking human audience members.

Nothing like a standing wave to make carefully selected EQ settings sound like total garbage!  ;-)

I’m writing this post to take a break, I’m still coding the interface for the Dynamics Expander. 

I’ll need to revisit these later and add the presets.  In my own experience the average person tends to set an equalizer up in the classic “S” curve.  See picture below from iTunes ®:

eq_small

This looks “cool” perhaps but is essentially meaningless as a setting.  An equalizer is designed to “tune” acoustics, not look pretty.  Most folks seem to think they are a little bit like “bass and treble” controls.  In a basic sense they are, but that basic sense is limited to, well, basic.

Unlike a bass and treble control an equalizer such as the one above is boosting or cutting very precise frequencies and volume. With that comes a good deal of baggage. 

At best that baggage sounds bloody awful.  At worst it turns the audio source into a peaking speaker destroyer that even massive compression can fail to protect.

Precise is the key word here.  Small increments are far more effective in terms of the end audible result than the “more is better” approach of the “S” curve.

If I had a dollar for every time I’ve setup a graphic EQ in a studio or live venue and had some twit come along and do the “S” curve “abomination tweak” on it I’d be a lot better off than I am today.

Hence the use of presets.  To offer the user a choice of safe settings that will look nothing like the above cliched “S” curve and offer the opportunity to avoid some of the issues faced when working with live sound.

If you’ve never seen and heard a large speaker system blow or even catch fire (no I’m not joking, those thick cables on PA systems are used for a reason) then you might wonder about why I’m so uptight over this.  Suffice to say I don’t want to be the one blamed for destroying a system, so the presets are there and with the caveat that what they do beyond them is entirely the users responsibility.  ;-)

MixAction With EQ Toggled Visible

Naturally the EQ is not visible unless you want it to be (see Effects button below EQ on bottom status bar of main screen).  This makes it easy to make adjustments without obscuring the rest of the interface.  For this a modal or even a tool window would not be appropriate.

The tabs allow you to select the other effect options that pertain to the entire project.  Note these are not all of the “special effects” (far from it), as those pertain to individual tracks being played and thus are separate.

Dynamics Expander Toggled Visible

Automation setting normally would not be changed during performance.  However, Murphy and his law are no strangers to theatrical productions.  So it’s possible to override these on the fly:

Automation Settings Toggled Visible

OK.  The soundcard settings tab is yet to be finished.  Basically it will offer the chance to adjust the master levels of the Windows mixer assigned by Windows to that soundcard and and the WAVE level as well for fine tuning of the output.  In addition there is an option to do a system check.  Basically it plays a selection of audio files shipped with the program for the purposes of checking connections, outputs, speakers and levels.

OK.  More from me tomorrow!

 

 

Quote of the day:
We are continually faced with a series of great opportunities brilliantly disguised as insoluble problems. - John W. Gardner

*iTunes is a Trademark and Copyright of Apple Computing.

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

As I’m in a time zone a day ahead (date wise) to the other participants it’s technically Day 15 of 30 of the 30 Day Sprint and Sunday.  That’s the half way point technically for me.

So.  Am I going to make it?

Is That Another Day Gone In The 30 Days? 

It’s looking that way.  Though there are times when one does feel a bit doubtful, I admit.  ;-)

Take yesterday.  Incrementing the selected node of the project treeview took a lot more work than it should have.  It works fine now.  Being able to swear fluently in English, Italian and colloquially in Australian, Italian, American and Cockney certainly helps.  ;-)

I love Delphi, don’t get me wrong, but the implementation or rather wrappers of these kind of Win32 widgets, well, suck big time. 

In the past I’ve used treeviews in Delphi (in fact they’ve been a part of my projects GUI’s since 1999) however it’s a lot easier to search for “text” and get a node than it is to do it via the item index. Should be the other way around. Oh well - I’m putting it down to a learning experience. 

So in short MixAction now automatically moves to the next track ready to play in the currently selected Act or Scene and then at the end of that play list to the next Act or Scene in the sequence, loading each play list as required, until the end of the “theatrical production’.

With the “project tree” and the current “play list” I have yet to implement dragging an audio track from the play list to another node in the tree.  That’s not hard and it will be added some time this week.  Dragging nodes on the tree of course is done as is changing the order of audio in the play list via drag and drop.

I then spent time synchronizing the Play/Pause buttons and making sure the audio position trackbar allowed fine adjustment.  Both of those work well as does double clicking an audio track in the play list - which overrides the currently playing track, stops it and starts the next.

This all led to some tightening of code in the audio playback logic of the GUI for which I’m pleased I got to spend the time on.

Further adjustment will be needed when I add in the logic for crossfades between the playing and next track. 

As MixAction is not an “audio player” like iTunes, WMP etc and as theater is not a “precise” environment, but rather something who’s timing depends on somewhat rather unpredictable “people” doing things on stage, it’s generally the case that full automation would be undesirable.  So an individual track never starts immediately when another track finishes, unless the user has set properties for it to do so.

When such behavior is desired it is selected (a checkbox of course, which is where the project file database comes in) and in that instance the next track begins playing when the last track finishes.

A further element is when the next should start playing - not just when the last finishes.  This is where cross fading comes in.  At the simplest level the current song dips and fades in volume as the next track starts and fades up or a combination of those. 

I expect most users initially won’t be setting a lot of these more advanced properties.  But, apart from the hierarchy driven layout this is one of the most important features of the product.  Point and click driven “scripting” of events.  It’s also, from a technical and programming perspective, where multiple threads become necessary.

One “keen teen” has asked “Cool, will it beatmix Dude?” 

Nope. 

There are a kazillion DJ software and audio software packages on the market that specialize in this.  It’s a complex algorithm and I can assure you, as a person who did club DJ’ing in another life that, none of them get it right with the exception of products like Mixcraft, Sonar, Acid Pro and similar which use specially created audio tracks. 

I am purposefully avoiding “sound creation” in this regard and those who want to do it will be pointed towards those products, which BTW, are not good fits for live theater unless you really know what you are doing, have spent time (a lot of it) practicing and so on.  All the things that MixAction strives to help the user avoid in short.

In wrapping up for this entry, today I intend to treat myself by coding the Graphic Equalizer and Dynamic Controller.  The former is self explanatory and the latter is a gain (level) riding tool who’s job is to level out peaks in the audio signal.  A “safety” tool to avoid overload of amps and speakers.

Then there are the “Project Templates” that will allow the user to select a project that “fits” with their purpose and have the skeleton of a project created for them.  I’m intending to expand on this quite a bit later.

There are two types of Equalizers in MixAction.  The standard Graphic most folks are used to.  Seven bands in this incarnation as anything beyond that tends to overload entry level CPU’s, and Parametric which is in the case of MixAction is aimed more at special effects than their more usual usage in pro audio.

This weeks challenge for me is getting the individual properties for a track coded and operating at playback.  If I achieve that then the final week of the challenge will be spent creating the installer, testing the application on as many systems as I can and working on the website. It’s highly doubtful that the built in “audio store” will be ready by the end of the 30 Days inside the program.  If I get to day 30 and that’s the only thing missing in the implementation I won’t be at all worried.  :-)

One final note.  Normally when I code I don’t play music.  I simply can’t concentrate with it.  It’s fun to work with a project that *requires* you to play music when you run the project.  ;-)

Later…

 

Quote of the day:
Until you’ve lost your reputation, you never realize what a burden it was. - Margaret Mitchell

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

Just a quick note here before I begin todays coding frenzy.  I’ve added all the participants in the “30 Day” mISV sprint to the menu at the top of this page.  Thanks to Mike Wilson for compiling this list, he gets the credit for it.  Meant to get this done two weeks ago, but if you’re following this “sprint” you’ll realize we are all a tad busy right now.  ;-)

Actual link to the page is here: 
http://www.davidscottkane.com/30-day-misv-participants/

Don’t forget you can also follow all the participants here:

http://feeds.feedburner.com/30dayers

More updates later today…

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb

Missed an entry yesterday, had a rough start. 

Wednesday (after I posted the last entry) wound up a disaster when the power went out (as it does with increasing frequency) and scrambled the ADSL line/modem and it would seem Vista’s awareness of such things with it. 

I couldn’t diagnose it, my ISP couldn’t diagnose it and I ended up getting extremely mad, swearing and then did a power cycle of everything “one more time” before going to bed. 

Connection came back up.  Go figure.  :-O

Thursday morning I get up and no connection.  Vista’s lost the plot. 

I remember I have more than one machine (I just woke up, OK? <g>)  and plug in another Windows one.  Works fine.  Plug in the Mac, works fine (funny how Mac OS X connects first time every time to a network but Windows has to be rebooted 9 times out of ten). 

Back to main box.  Try Vista, nope, ring ISP support, another hour (almost ready to reinstall Vista by now), nothing, very annoyed as ISP can’t resolve it either (not that I’m blaming them).

Another series of reboots and power cycles of the gear and connection comes up.  Odd!  Network card, everything, checks out 100% each time BTW.

Grrrrr!

OK.  Been coding madly, mostly to make up for the above BS, and have the playlists working with the audio, database in sync and most of the main GUI reacting to audio events (position, time, BPM etc) updating in real time.  

Before I got this far however I ripped out Delphi’s TListView control in disgust and replaced it with NextGrid from BergSoft.  If you’re a Delphi developer and looking for a nice component library I highly recommend these BTW.

Works much smoother with the NextGrid, plus it allows me to embed images far easier and more smoothly than TListView so I can put in the little arrow showing the currently playing track as an extra “visual clue” to the user without Delphi’s implmentation of it and it’s associated “weirdness”.

Audio keyboard shortcuts are in - Space to play/pause, etc.

That’s about the round up.  The coding takes more time than the telling.  ;-)

Normally I put down tools for the weekend to spend it with the wife and kids, but this weekend I’m making an exception and am going to code through.  Hopefully posting updates daily as I do so.

Cheers!

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Live
  • Slashdot
  • StumbleUpon
  • Technorati
  • YahooMyWeb