views:

319

answers:

7

I am looking into creating a web application that plays back musical tablature and I am hoping to find out what the best framework would be prior to investing an enormous amount of time programming it.

Here is a visual of what I'm hoping the product would look like when finished:

Guitar tablature is a great way to learn music and pick up new songs, but there is a huge shortcoming in that it can be very difficult to detect how the song should be played unless you already know how it should sound. There are a few programs that are excellent that set out to solve this problem by creating tablature that you could listen to while learning to play it. GuitarPro software and the open-source TuxGuitar are great programs. But as with everything else these days, it would be ideal to have this built as a web application.

I have a degree in Computer Science, but I still have doubts about my ability to code something this complex. What frameworks or languages would be ideal for coding something like this? What complications would you foresee running into? Any help would be immensely appreciated.

A: 

I am a beginner guitar player and this sounds very cool! I love Ruby so I would probably use Merb or Rails, at least for the frontend. This kind of project would also be a good excuse for me to try a neat-looking new library called Archaeopteryx for doing MIDI in Ruby.

How I think it could work is to parse the tabulature into midi and render midi to a wav using a guitar-like virtual instrument. Encode to mp3 and serve with tabs.

Aram Verstegen
Yeah I'm tempted to learn Ruby. I'm basically on the fence between going with Ruby and Flex/Flash.
Bijan
A: 

I would look into using something like MS Silverlight or Adobe Flex/Flash. It is fairly easy to get a rich real-time environment with those. They also should support some audio functionality(at least playback) out of the box.

Bearddo
Yeah I've been thinking about going with Flash. I'm a big fan of the Lala music player (www.lala.com). I know they designed the player in Flash and the rest is just straightforward HTML and JSP.
Bijan
A: 

Definitely take a look at Noteflight - it's not for tablature, but maybe it will give you some ideas as to what's possible. Noteflight is a Flex application. The lead developer (Joe Berkovitz) has blogged quite a bit about the various capabilities and limitations of the Flash Player as a mechanism for generating audio, so you might want to check out his blog too.

erikprice
Wow. Thanks for the heads up. Noteflight looks like a great app.
Bijan
+1  A: 

I would say that the language/framework is probably a secondary issue. There are definitely advantages and disadvantages to various frameworks, but you're not going to be able to evaluate them without trying some things out, and many (most?) of those differences are a matter of opinion/preference, rather than some inherent inability to perform what you're wanting.

The primary issue (not necessarily a problem, per se) in my opinion is that you're talking about a major enterprise as a first (or early) project. There's nothing wrong with that, but you're right in that you're asking a lot of yourself right out of the gate, so to speak, and you don't want to set yourself up for failure.

But that doesn't mean you shouldn't try it! It means that you should understand that you're looking a big project...so start small. Set small goals that, when complete, will get you a definable way towards the completion of the project. Think about how you're going to represent the tab internally. (Yes, that's a project.) Create a simple library for reading in and displaying the tab. Create a chunk that, given a "tab" object, will play the music.

Remember KISS: Keep It Simple, Silly! Your library for playing music from tab could be incredibly complex, but start with the simplest set of assumptions: the rhythm won't change, notes don't have bends, etc. More can be added in later (or if you program yourself into a corner it will be a good learning experience).

The idea is to keep these pieces isolated and simple so you can enhance them over time...or easly replace them, if you come up with a better idea...and small enough that you can complete them in a reasonably short time period so you can get a taste of success and some experience.

Good luck.

Beska
A: 

If you're working in Java and dealing with guitar tablatures, take a look at JFrets. You could, perhaps, contribute to that open-source project.

David
A: 

Do you want to playback the music, notate the tablature, or both? If you're looking to do notation, there is no framework per se and it is certainly not easy. For playback, you have to consider whether you want MIDI or audio playback. I have found problems with web apps converting MIDI to audio (they do exist, but their results are very limited compared to what I could do in my DAW), so it might just be simpler to go the MIDI route at least temporarily.

As far as which platform to develop on, I would think that either Flex or Silverlight would be the way to go. I personally would like to start a similar project in Silverlight (for CPN, not tablature).

A: 

You have gotten a lot of good advice here. To synthesize:

1) You are right that tablature notation and display is complicated, so take Beska's advice to carefully plan and limit the problem.

2) Beska's advice on choice of representation for tablature is also very important. I suggest using MusicXML as a starting point for this. Its representation is very similar to how many notation applications work, and it has complete support for tablature. It shows you what a complete representation of tab looks like, which you can then subset and adapt to meet your needs.

3) Noteflight is indeed the closest application that I can think of to what you are looking for. The Flash platform is a good choice for this work, especially now that Flash Player 10 has added more powerful playback capabilities. Other notation applications use Flash too, including the MusicRain system for digital sheet music sales. Silverlight might work too, but there is a larger community out there using Flash/Flex for this type of work, so there can be more help available when you encounter problems. As Erik mentioned, Joe's blog is a good example.

Good luck!

Michael