Hey Phil, Cool stuff, I think this will definitely make scripting easier to use.
Now we just need to fix our C++ API.... :) Thanks, and Merry Christmas! Albert On Thu, Dec 23, 2010 at 7:08 AM, Philip Whelan <pwhe...@mixxx.org> wrote: > I have a working, but incomplete API wrapper for the engine.* API > and thought I would send out this email to get some feedback. > > The API consists of a single javascript file. This file contains > several classes. The class MixxxAPI allows access to each Deck as an > object. This Deck object can be used to play, pause, set and jump to > hotcues, etc... Other parts of Mixxx's functionality are also exposed > as child objects, such as Mixxx::Deck::Hotcues, which returns an > object for accessing a deck's hotcues and Mixxx::Deck::EQ for > accessing the Equalizer. > > My goals for this API are: > > * Make it Easy to Learn: this API should be easier to learn since . > * Readability: the code should be easier to read since there is > less string concatenation. > * Flexibility: pass a deck as a parameter to a function, or just > the equalizer, etc... > > The general look & feel of this API can be seen in this small snippet > used to test the code (available in test.js): > > ------------------------------------------------------------------------------------------ > Mixxx = new MixxxAPI(); > > for (var i = 1; i <= 2; i++) > { > var deck = Mixxx.Deck(i); > > deck.Play(); > deck.Play(1); > > deck.Duration(); > > for (var x = 0; x < 5; x++) > { > deck.Hotcue(x).Set(); > deck.Hotcue(x).Goto(); > } > > var eq = deck.EQ(); > > eq.Low(1); > eq.Mid(2); > eq.High(3); > > eq.LowKill(1); > eq.MidKill(2); > eq.HighKill(3); > } > ------------------------------------------------------------------------------------------ > > > Since the hotcue API is chainable, it is possible to make calls in the > following manner: > > ------------------------------------------------------------------------------------------ > Mixxx.Deck(1).Hotcue(1).Set().Goto(); > ------------------------------------------------------------------------------------------ > > The rest of the API is largely not chainable. This is because I have > no elegant solution yet for making calls that both get and set > properties. Possible solutions are: > > * Separate getter and setter functions. > * Create a Command stack to be executed by a 'query' or 'exec' method. > > With separate getter and setter functions the code is more tedious > to maintain. Any change in the calling convention has to be replicated > through the entire file. > > The command stack solution would require saving the return values on > a stack. This would add another API that needs to be maintained. > > That's all I have to say about this for now... > > > Seasons Greetings to the Mixxx team. > > > - Phillip Whelan, Mixxx Contributor > > ------------------------------------------------------------------------------ > Learn how Oracle Real Application Clusters (RAC) One Node allows customers > to consolidate database storage, standardize their database environment, and, > should the need arise, upgrade to a full multi-node Oracle RAC database > without downtime or disruption > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > Mixxx-devel mailing list > Mixxx-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mixxx-devel > > ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel