freshfunkee

Spewing my thoughts online, so I don't forget them later

Finished Project – Version 1.0 Kinect Music Controller

The complete project. 2 more experimental build will be completed. One for looping track segments and one converting Kinect to a MIDI instrument

And That’s A Wrap!

Done and dusted! I have just completed the looping features for the project where is where I’ve decided to draw the line for completion. There is one small bug with looping, however, in that the timeline cannot distinguish the varying start and end points of loops which causes it to reset to zero anytime a new loop begins. I’ve tried a few workarounds, but nothing has been successful so far. So I’ll be leaving it as a minor bug for now.

I’ll be uploading 2 videos today. One of a track running without loops and one running with loops. The first video without loops will demonstrate the functionality of effects on the tracks, the beat counter, the timeline and tempo control. This video is intended to display most of the features available without restrictions of loops determining what area of the track you are in. The second video will solely demonstrate looping controls, such as breaking thresholds to end loops and new loops beginning once the previous loop ends.

Although this application, as a whole, is complete, I will be conducting and experiment to determine the usefulness of Kinect applications as an instrument, rather than a controller. To do this, I will implement a basic MIDI generator into a Kinect interface to play a MIDI instrument and contrast the user capabilities between using a live instrument and controlling music in real-time. This application should be completed at the end of this weekend.

A Short Reflection – Productizing vs Personalizing

Just ahead of Version 0.6, I’m starting to notice that the project is becoming more presentable. I’ve added lots of smaller features to it that have started to fill up the screen a bit more and provide more feedback while using the music controller. It’s all coming together and if I were to present it next week, I would be happy knowing I had put some good work into it and that I accomplished most of what I set out to do.

I don’t believe that there ever will be a “Finished” stage to the project. Given more time, I can think of dozens of extra features I would have loved to incorporate into the project. If I had chosen a more “productizable” project, I don’t think this would have been the case. In fact, the entire logic behind a product is to create something that is complete, fit for purpose and marketable. Although, all of these principals can really stand to a project, and especially to a graduate, I’m beginning to see how it can stifle ones imagination. Developing something from the ground up into an undefined stage, where time and effort are your only limitations, really stands as a testament to your own personal abilities and personality. It becomes more of an “adventure” rather than completing a task. The project can go in any direction, and what it reflects is a more personal accomplishment rather than a footnote on a CV or a foot in the door to your future.

Of course, there are plenty of advantages to productizing a final year project. If I had a definite end goal to my project, I could have been finished months ago and planning tasks to complete would have been much more trivial. But, I think the way I decided to do things fits my personality better. At this stage in my life, I’m more interested in seeing what my ideas can accumulate into without boundaries or limitations. As an end result, I have something to remind me of what I’m capable of. Something I can show people that shows some of my characteristics and interests. If I were to do it all again, it could be an entirely different project just depending on the day and what mood I’m in.

Version 0.6 should be up tomorrow.

Version 0.5

Demo of the new effects added and a clap detector to generate an echo

Update 26/03

Work scheduled for Week 1 completed in a day. I need to work on my planning and estimating abilities. Anyway, the project now has 4 functional effects. Flange and Tremolo are very basic at the moment until I can think of a more innovative way to control them. Echo uses a clap detector to create an echo in the track when a clap is detected.

Hopefully, the work for Week 2 can also be completed in less time.

Some Rational Project Planning

Easter will bring a “Get this thing over and done with” mentality to the project. Not that I’m fed up with it or anything, but this way of thinking will help me focus on an end goal and deciding on a finalized design of the project.

I have planned the work I intend to complete over the next two weeks to reaching that stage, which consists of adding the final 3 effects and adding a timeline of the track playing. Yesterday, I finalized my choice of effects to Echo, Flange and Tremolo. Although they are not overly exciting effects, I believe with an innovative control design, they will collaborate well with the overall project scope.

Each of the 3 effects will require a control design, one of which requires a separate thread. Today, I am looking into how to add multi-threading to these areas and deciding which areas requires it. Currently FMOD has been described as “Thread Unsafe” which may lead to a large portion of the code being re implemented to account for this, but only time will tell.

Tomorrow, I will finish prototyping and completing prerequisites to begin development of these features. Monday marks the beginning of “Week 1” by the end of which I will hopefully be finished with effects implementation. Week 2 sees the implementation of the track timeline.

 

Fingers crossed, a finished iteration of the project on April 8th.

Quick Update

So, turns out the oscillator is just a signal generator and not what I believed to be a LFO for automating volume control. I switched it out for an Echo effect. It works OK, but controlling is a bit messy and as a whole, user interaction doesn’t feel significant. I’ll leave it in for now until I redesign v0.5 for a different effect, maybe a flange or chorus.

Planning v0.5

Recently, other college subjects have caused me to neglect the project for the past few weeks. But today, I’m going to start work on v0.5 of the project since I have a few hours to spare. I plan to include a new effect and some minor code changes.

The oscillator effect adds a low frequency component to control the volume of playback. An example would be a 2Hz oscillator will cause the volume to go from 0 to 100 twice in one second. Code changes will include a fix for the GUI button hover times and a change to the background color. I had intended to include a Button class for GUI buttons but I’m still trying to get past some strange linker errors, so it won’t be included in this version.

Link to OSC GUI mockup:
https://docs.google.com/drawings/d/1-qm2Wl0EcJjK3hwQ94A4iLB41k7auCVeWBbvHr8j7pQ/edit?usp=sharing

On The Right Track

Last weekend the project went through a complete overhaul. There was a lot of restructuring, deleting, building and writing to get the new GUI up and running. Most of this work was removing OpenCV and stripping back the Kinect API to a bare minimum skeleton tracker. The new HandMonitor class now controls all user input and handles all sound engine and GUI events. There is plenty of ground work put in for future feature implementation also, so this should speed up things in the long run.

I decided to remove OpenCV once I knew I would be stripping back the Kinect RGB camera features for the new GUI. I have translated this work into the form of a custom matrix that contains each of the skeleton joint positions which SDL will use to draw an image at each location. Since then, the performance has increased and become more responsive and it uses less memory when running.

Main.cpp has also been reduced to simple initializing the classes. All the alogrithim work has been put into the new HandMonitor class which handles all GUI and sound engine states.

I’m feeling more confident about the project at this point. It’s starting to look presentable and the foundations have been made for future work which puts me at ease. I’m not totally sure if it’s impressive or not or even if it will be strong enough to be classified as a FYP, but I’m starting to enjoy building and developing it. It’s probably the first time I’ve ever drawn something on paper (the GUI), and implement it practically 1:1.

Version 0.4

Demo of the new GUI and Filter Control