function createSong(workspace, songModel, interactive) 
{
    if( !workspace) {
	alert( "internal error: no workspace!");
	return;
    }
    /*
     * associate a player with the model so that time indices
     * are "registered" with the player for swaras as we 
     * render them. So this must be done BEFORE the notations
     * are rendered
     */
    if( songModel.hasAudio() )
	songModel.setAudioManager( AudioManager.createPlayer() );

    var sv = new SongView(songModel, 1, false, songModel.getSpeedMarksPreference());	// 1 => # of tala cycles per row (TODO)
    sv.setInteractive(interactive);
    sv.render(workspace);

    var audiodiv = document.getElementById("audiodiv");
    if( songModel.hasAudio() ) {
	/**
	 * create the audio player control
	 */
	songModel.getAudioManager().createAudio(songModel.getAudio(), audiodiv);
    }
    else {
	audiodiv.style.display = "none";
    }
    return sv;
}
/**
 * create a song view for a song model
 * @param {DOM} workspace		the workspace DOM elem
 * @param {SongModel} songModel		song model containing song data
 * @param {boolean} interactive		interactive mode?
 * @type SongView
 */
create a song view for a song model
@param {DOM} workspace               the workspace DOM elem
@param {SongModel} songModel         song model containing song data
@param {boolean} interactive         interactive mode.
create a song view for a song model @param { DOM } workspace the workspace DOM elem @param { SongModel } songModel song model containing song data @param { boolean } interactive interactive mode .
function createSong(workspace, songModel, interactive) 
{
    if( !workspace) {
	alert( "internal error: no workspace!");
	return;
    }
    if( songModel.hasAudio() )
	songModel.setAudioManager( AudioManager.createPlayer() );
    var sv = new SongView(songModel, 1, false, songModel.getSpeedMarksPreference());	
    sv.setInteractive(interactive);
    sv.render(workspace);
    var audiodiv = document.getElementById("audiodiv");
    if( songModel.hasAudio() ) {
	songModel.getAudioManager().createAudio(songModel.getAudio(), audiodiv);
    }
    else {
	audiodiv.style.display = "none";
    }
    return sv;
}
function createSong ( workspace , songModel , interactive ) { if ( ! workspace ) { alert ( "internal error: no workspace!" ) ; return ; } if ( songModel . hasAudio ( ) ) songModel . setAudioManager ( AudioManager . createPlayer ( ) ) ; var sv = new SongView ( songModel , 1 , false , songModel . getSpeedMarksPreference ( ) ) ; sv . setInteractive ( interactive ) ; sv . render ( workspace ) ; var audiodiv = document . getElementById ( "audiodiv" ) ; if ( songModel . hasAudio ( ) ) { songModel . getAudioManager ( ) . createAudio ( songModel . getAudio ( ) , audiodiv ) ; } else { audiodiv . style . display = "none" ; } return sv ; }
create a song view for a song model
 @param {DOM} workspace               the workspace DOM elem
 @param {SongModel} songModel         song model containing song data
 @param {boolean} interactive         interactive mode?
create a song view for a song model @param { DOM } workspace the workspace DOM elem @param { SongModel } songModel song model containing song data @param { boolean } interactive interactive mode?
/*
     * associate a player with the model so that time indices
     * are "registered" with the player for swaras as we 
     * render them. So this must be done BEFORE the notations
     * are rendered
     */ // 1 => # of tala cycles per row (TODO)
 /**
	 * create the audio player control
	 */