1. A method for generating a song comprising the steps of: providing a song data structure, wherein musical rules are applied to musical data in accordance with the song data structure to generate music output for the song; receiving user input for one or more musical components, wherein musical data in accordance with the song data structure corresponding to the musical components are modified in accordance with the user input; applying musical rules to the modified musical data, wherein the music output for the song is modified in accordance with the modified musical data; wherein as a first step the user is provided with musical data in accordance with the song data structure for a complete song, wherein in response to the user input a modified song is created based on user modifications to the complete song.