Monday 20 June 2016

Week 4 // There, there!

Week 4 is over and a month is already done! To reflect on the whole journey so far in general, I feel if you define my learning over time on a graph, it'll come out to be an exponential one. I could have achieved a lot more ideally, but my working pace is catching up only, along with my working knowledge. And this is what is exciting, as going forward, I think a lot more can be achieved in a lot less time, which will also be essential to my project.

This week I was supposed to deliver the POC, but it has been running a little behind schedule, mainly now due to the problems I am facing with the EQ changes (should be able to resolve them any time soon now). What is complete though is the crossfader transition from one deck to another, according to the BPM of the track.

For example: If you are playing 'Walking on a Dream' by Empire of the Sun (really interesting band), which is at 127 BPM on Deck1, you can decide to switch to the Deck2 song, over N number of bars. I want the user to choose the N, but right now its hard coded to 2 i.e., the transition will happen over 2 bars. 

This is a very simple implementation as of now, but a very important base on which other desired features can be built upon (like EQ changes which I am trying). This looks like the AutoDJ feature but functions on separate logic involving the number of bars which is being taken into account. 

Since, all of this is for the POC, I have been using the AutoDJ module to use the 'Fade Now' button, and have written separate code only for the logic. Below is a very shabby attempt of explaining what I am doing. Usually I do this in Lucid Charts or something similar, and will probably replace it with that in due time. In short, the 'Fade Now' button of the AutoDJ feature is mine now, for the purposes of this POC.


You can find the code on my Github.

What next?
1. Resolve the issues with the EQ changes
2. Finish the POC, discuss the observations and make the future plans accordingly
3. Solve the 2 bugs that I have on my list ASAP

See you next week! :)

Monday 13 June 2016

Week 3 // Clearing out the Crashes

This week was productive in terms of the progress with respect to the POC code. The main objective of the POC which is to test our transitions with respect to tracks of different BPMs, and then a further extension of the test is to check for the different kinds of effects and controls this idea can used for.

I faced a lot of issues with respect making changes in the code, adding my files and compiling the whole project. Right now, I am covering the following in the POC,
- crossfader
- EQ

| mscrossfader.cpp | ————> | mixxx.cpp |
| mseq.cpp | ————————> | mixxx.cpp |

Both of these files use the BPM to calculate the applied effect duration. 

So where do I stand right now?
I have coded up the required modules, but I might even use a consolidated msmanager.cpp but it might not be required for our purposes. The code can be found and will be updated going forward here on my Github Branch. But I am facing issues running all the changes I have made, as the application has been been crashing a lot right with some of the changes I have made.

What is my next step?
To clear out the crashing issues, and wrap up the POC with documenting the required results and observations. 

Hoping to finish up the POC and with positive results this week, so that the further plan can decided upon and worked on. 


Catch you next week! 

Sunday 5 June 2016

Week 2 // Controlling the Control System

Another week of GSOC is already over! 

This was a mixed week for me with a lot of pros and cons. The week started off slow with me struggling to find my footing with the Mixxx’s ControlObject classes and its various subclass implementations in the code, but by the end of this week I can say that my understanding is so much better now, so much so that I now find it beautiful, the whole Control system! :) 

Programming wise I am much comfortable with C++ now and I think I am beginning to see why it is what it is, a giant among programming languages, especially for certain applications. I can see my skills only growing every week now. 

As per our revised timelines, till about 14th June, which is another week and a half approximately, I am majorly focusing on the POC. With respect to the POC, for the purpose of generating predetermined MIDI info, I will be using the low-mid-high EQ knobs and the crossfader for now. This week I worked on writing a script for modifying these values (still tweaking it around as its not running robustly) through a wrapper. 

So where do I stand right now?
I am tweaking around my code snippet to change the values as per the detected BPM, based on a particular track which I have taken as standard for now to start with. 

What is my next step?
Once this code snippet works perfectly on a single track, I will be applying it to different decks, of same BPM song and then hopefully different BPM ones soon as well (possibly by the end of the this POC I will be including some other effects as well).

I actually was a little lost this week in code but with some direction from my mentor I was able to focus on the right parts of the code. But overall, I think I am in sync with my plan with respect to the POC implementation. Week 2 was much fun because by the end of it my understanding of Mixxx increased.


See you next week! 

Sunday 29 May 2016

Week 1 // POC time!

Hey Everyone,

So the first week of the coding period is over already. The week just whizzed by for me. Most of the time was spent in ideating, discussing problems and their possible solutions with Tuukka(my Mentor), and then figuring out Mixxx's midi handling functions internally, and then trying to code them up! :)

We have zeroed in on some concrete steps for the upcoming weeks, and one of the major steps out of those is to come up with a smaller POC (Proof of Concept) module. As Tuukka pointed out to some very basic problems challenging the idea of applying MIDI sequence info to different track, we decided to address these problems first and see the feasibility and the extent of the idea of my project. This is very important to clearly code and deliver a working component to Mixxx at the end of this summer.

POC Objective: Come up with a predetermined sequence of MIDI information and apply it on different tracks varying in tempo and observe the results. This is to focus on the following,

  • When two tracks are of different tempo, it might be a problem to apply a midi sequence recorded on say track A and apply to say track B. This could happen due to various reasons but one of the primary reasons can be inaccurate beat detection, etc.
  • To find out what type of MIDI parameters can work and would make sense to include

Further observations will be documented.

I have altered the timelines on my project proposal and we have decided to wrap up the POC by the 14th of June so that based on the results we have an approximate wite 2 months to code a bug free module(hopefully!).

As of now I am at the stage where I am experimenting with Mixxx's midi module and creating my own midi sequence by temporarily storing midi information and copying it. Next step over the weekend and early next week is to check for applying simple midi information to some tracks, then different tracks of the same tempo, and then finally tracks of the different tempo.

You will be able to access my POC code as it shapes up, on my Github.

See you next week!



Thursday 26 May 2016

CommunityBondingPeriod

Community Bonding Period is a very important phase of the GSOC process as I see it. It's a very thoughtful decision on Google's part to make sure all the mentors and participants get comfortable with each other, participants get comfortable with their work which they will soon ensue.

This year, the community bonding period was till the 22nd of May. I took this opportunity to get clarity from my mentor Tuukka (illuusio) about the different expectations from me. We discussed and brainstormed my idea, its possibilities, and the most likely places where we could face tough problems. The project idea itself is quite extensive, and therefore it was necessary to pinpoint this to the exact task expectations during this period of coding which will follow.

As I understand, personally my objective is two fold, learning and implementing. This is always the case in any new undertaking. I am relatively new to Qt and C++ development, but as a man who has worked with Python primarily, I could pick up the concepts, and I still am. I am also trying to utilise my time in solving bugs in similar areas of the Mixxx code as I would be working on to increase my understanding.

I have 3 months to finish working on this idea which I am all pumped up about. Honestly, now I am also excited about learning to use Qt and C++ on an application at the level of Mixxx.

Let the Coding begin! 

HelloGSOC

Hello Everyone!

I am Anirudh, and I will be contributing to Mixxx this summer under the Google Summer of Code program. This blog is going to be the place where you will find all the details about my project, updates, and everything in between. You can use the comments section for any comments, doubts and suggestions, or you can reach out directly to me. All feedback is highly appreciated! :) 

So what am I working on?

My project is called 'MIDI Sequence Recording and Playback'. Its a a feature which I am trying to add to Mixxx, which will basically enable a performer to record all his MIDI information in a particular time period and use it later on different tracks. 

You can find my GSOC project page here.

Here's to an interesting summer of coding! :)