Exemplo n.º 1
0
// ----------------------------------------------------------------------------
//
bool TrackInfoCacheFile::read( AudioTrackInfoCache& cache )
{
    TiXmlDocument doc;
    if ( !doc.LoadFile( m_filename ) ) {
        m_last_error = doc.ErrorDesc();
        return false;
    }

    cache.clear();

    TiXmlElement* root = doc.FirstChildElement( "audio_track_info" );
    if ( root ) {
        TiXmlElement* entry = root->FirstChildElement( "entry" );
        while ( entry ) {
            AudioInfo info;
            CString link = read_text_element( entry, "link" );

            strncpy_s( info.id, read_text_element( entry, "id" ), 512 );
            strncpy_s( info.song_type, read_text_element( entry, "song_type" ), 512 );

            TiXmlElement* attrs = entry->FirstChildElement( "attrs" );
            if ( !attrs )
                continue;

            info.key = read_int_attribute( attrs, "key" );
            info.mode = read_int_attribute( attrs, "mode" );
            info.time_signature = read_int_attribute( attrs, "time_signature" );

            info.energy = read_double_attribute( attrs, "energy" );
            info.liveness = read_double_attribute( attrs, "liveness" );
            info.tempo = read_double_attribute( attrs, "tempo" );
            info.speechiness = read_double_attribute( attrs, "speechiness" );
            info.acousticness = read_double_attribute( attrs, "acousticness" );
            info.instrumentalness = read_double_attribute( attrs, "instrumentalness" );
            info.duration = read_double_attribute( attrs, "duration" );
            info.loudness = read_double_attribute( attrs, "loudness" );
            info.valence = read_double_attribute( attrs, "valence" );
            info.danceability = read_double_attribute( attrs, "danceability" );

            cache[ link ] = info;

            entry = entry->NextSiblingElement();
        }
    }

    return true;
}
Exemplo n.º 2
0
// ----------------------------------------------------------------------------
//
Venue * VenueReader::read( TiXmlElement* self, Venue* venue ) {
    venue = new Venue();

    venue->m_scenes.clear();			// Kill the auto generated default scene

    venue->m_uid_pool = read_dword_attribute( self, "next_uid" );
    venue->m_current_scene = (UID)read_dword_attribute( self, "current_scene" );

    venue->m_name = read_text_element( self, "name" );
    venue->m_description = read_text_element( self, "description" );

    // Add all universes (up to the max, must be in correct order)
    std::vector<Universe *> universes = 
        read_xml_list<Universe>( self->FirstChildElement( "dmx_universes" ), "universe" );

    for ( std::vector<Universe *>::iterator it=universes.begin(); it != universes.end(); ++it ) {
        venue->addUniverse( (*it) );
    }

    TiXmlElement *dimmer = self->FirstChildElement( "dimmer" );
    if ( dimmer ) {
        venue->m_master_dimmer = (BYTE)read_int_attribute( dimmer, "master_dimmer" );
        venue->m_auto_backout_ms = read_dword_attribute( dimmer, "auto_blackout" );
        venue->m_whiteout_strobe_ms = read_unsigned_attribute( dimmer, "whiteout_strobe", venue->getWhiteoutStrobeMS() );
        venue->m_whiteout_color = read_rgbw_attribute( dimmer, "whiteout_color", RGBWA::WHITE );
        }

    TiXmlElement *audio = self->FirstChildElement( "audio" );
    if ( audio ) {
        venue->m_audio_capture_device = read_text_element( audio, "capture_device" );
        venue->m_audio_boost = (float)read_double_attribute( audio, "scale" );
        venue->m_audio_boost_floor = (float)read_double_attribute( audio, "floor" );
        venue->m_audio_sample_size = (UINT)read_unsigned_attribute( audio, "sample_size", 1024 );
    }

    venue->m_venue_layout = read_text_element( self, "venue_layout" );

    // Add all fixtures
    std::vector<Fixture *> fixtures = 
        read_xml_list<Fixture>( self->FirstChildElement( "fixtures" ), "fixture" );

    for ( std::vector<Fixture *>::iterator it=fixtures.begin(); it != fixtures.end(); ++it ) {
        venue->addFixture( *(*it) );
        delete (*it);
    }

    // Add scenes
    std::vector<Scene *> scenes = 
        read_xml_list<Scene>( self->FirstChildElement( "scenes" ), "scene" );

    for ( std::vector<Scene *>::iterator it=scenes.begin(); it != scenes.end(); ++it ) {
        venue->addScene( *(*it), (*it)->getNumber() == DEFAULT_SCENE_NUMBER);
        delete (*it);
    }

    // Add fixture groups
    std::vector<FixtureGroup *> fixture_groups = 
        read_xml_list<FixtureGroup>( self->FirstChildElement( "fixture_groups" ), "fixture_group" );

    for ( std::vector<FixtureGroup *>::iterator it=fixture_groups.begin(); it != fixture_groups.end(); ++it ) {
        venue->addFixtureGroup( *(*it) );
        delete (*it);
    }

    // Add chases
    std::vector<Chase *> chases = 
        read_xml_list<Chase>( self->FirstChildElement( "chases" ), "chase" );

    for ( std::vector<Chase *>::iterator it=chases.begin(); it != chases.end(); ++it ) {
        venue->addChase( *(*it) );
        delete (*it);
    }

    // Add music mappings
    TiXmlElement *music_scenes_element = self->FirstChildElement( "music_scenes" );
    if ( music_scenes_element ) {
        venue->m_music_scene_select_enabled = read_bool_attribute( music_scenes_element, "enabled" );
        std::vector<MusicSceneSelector *> music_scenes = 
            read_xml_list<MusicSceneSelector>( self->FirstChildElement( "music_scenes" ), "music_mapping" );

        for ( std::vector<MusicSceneSelector *>::iterator it=music_scenes.begin(); it != music_scenes.end(); ++it ) {
            venue->addMusicMapping( *(*it) );
            delete (*it);
        }
    }

    return venue;
}