def get_audio_summary(self, cache=True):
        """Get an audio summary of a song containing mode, tempo, key, duration, time signature, loudness, danceability, energy, and analysis_url.
        
        Args:
        
        Kwargs:
            cache (bool): A boolean indicating whether or not the cached value should be used (if available). Defaults to True.
        
        Returns:
            A dictionary containing mode, tempo, key, duration, time signature, loudness, danceability, energy and analysis_url keys.
            
        Example:
            >>> s = song.Song('SOGNMKX12B0B806320')
            >>> s.audio_summary
             {u'analysis_url': u'https://echonest-analysis.s3.amazonaws.com/TR/RnMKCg47J5LgQZr0SISyoPuRxKVQx3Z_YSuhVa/3/full.json?Signature=KBUbewLiP3sZ2X6rRZzXhrgh8fw%3D&Expires=1349809604&AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ',
              u'audio_md5': u'ca3fdfa72eed23d5ad89872c38cecc0e',
              u'danceability': 0.33712086491871546,
              u'duration': 470.70666999999997,
              u'energy': 0.58186979146361684,
              u'key': 0,
              u'liveness': 0.08676759933615498,
              u'loudness': -9.5960000000000001,
              u'mode': 1,
              u'speechiness': 0.036938896635994867,
              u'tempo': 126.949,
              u'time_signature': 4}
            >>> 
            
        """
        if not (cache and ('audio_summary' in self.cache)):
            response = self.get_attribute('profile', bucket='audio_summary')
            if response['songs'] and 'audio_summary' in response['songs'][0]:
                self.cache['audio_summary'] = response['songs'][0]['audio_summary']
            else:
                self.cache['audio_summary'] = {}
        return self.cache['audio_summary']