This project has moved and is read-only. For the latest updates, please go here.


This project heavily consumes public API’s all over the internet. To name a few; OneDrive, SoundCloud, LastFM and tab search engines. The back-end system and the architecture is carefully and beautifully designed. We implement advanced software engineering techniques such as common design patterns, dependency injection, test driven development and many other paradigms.
Therefore the maintenance of the project or extending the project with new functionality or features is pretty straightforward. In order to deliver the best rock-solid and bug free product, we apply Test Driven Development and perform unit-testing. Below are some keywords/paradigms giving an idea about our technology stack and the back-end system;

Application Architecture:

Back end:

    • Primary language: C#
    • Guitar Pro viewer engine (vexflow for rendering, alphatab for parsing)
    • JS libraries for consuming some of the API's (jQuery, jQuery plug-ins etc.)

Some other paradigms/frameworks used in back end:

Consumed API's:

    • Last.FM
    • SoundCloud
    • Live SDK for OneDrive sync.
    • Various tab search engines.

Front end:

    • C# - XAML
    • JavaScript
    • HTML5
    • CSS

Version Control

    • Git 

Source code

PhoneGuitarTab.Controls project contains specific UI-controls which can be reused independently.

PhoneGuitarTab.Core project contains WP-specific, cross-cutting concern logic, e.g.

  • Custom DI container (another “poor man’s”) which supports interception, construction and property dependency injections, etc.
  • Primitive types (actually, legacy from WP7 )
  • MVVM-specific classes, etc. 

PhoneGuitarTab.Search project contains logic for searching and downloading of various domain specific information from specific services:

  • UltimateGuitar – primary source of tablatures
  • Lastfm – band information and album/artist art source
  • SoundCloud - song stream source.

Also we have in plans to support different information sources.

PhoneGuitarTab.Tablatures project contains logic for tablature representation and processing, including:

  • Domain model of tablature which is used for processing of various tablature formats in the same way across entire application.
  • Json-tab converter. Unfortunately, it seems like UltimateGuitar doesn’t provide free way to download a correct guitar pro file. Instead of this, it’s possible to download Json representation of tab.
  • Guitar Pro writer. Converts tablature domain model  to guitar pro (gp5) file. Ported from tuxguitar project.

PhoneGuitarTab.UI project is entry point of application. It contains all  pages, their view models and some additional logic including data context. Also it includes html/css/javascript files which provides important guitar pro functionality.

PhoneGuitarTab.UnitTests contains unit tests for all projects. It’s far from the goal – cover at least 80% of logic by unit tests.

How to build

Prerequisites. You have to install the latest Windows Phone SDK, Visual Studio updates before you can built solution.

After installation, you can use Visual Studio to build or run unit tests. Also the project includes build.cmd which can be used for building application and running unit tests from command line. By default, it builds solution in debug mode. “Release” argument switches mode to “Release”.

Further reading

Application start flow

Dev tips


Last edited May 1, 2014 at 3:52 PM by halilk, version 11


No comments yet.