Пример #1
0
 def _build_plot(self):
     from sasha.tools import analysistools
     pta = PartialTrackingAnalysis(self)
     assert pta.exists
     partials = pta.read()
     assert len(partials)
     figure = analysistools.PartialTracker().plot(partials)
     return figure
 def _find_chord(self):
     pta = PartialTrackingAnalysis(self)
     tracks = pta.read()
     if not tracks:
         message = "Cannot find any partial tracks for {!r}"
         message = message.format(self.client.name)
         raise Exception(message)
     db_threshold = -7
     tracks = [_ for _ in tracks if 100 < len(_)]
     tracks = sorted(tracks, key=lambda x: x.amplitude_mean, reverse=True)
     tracks = [_ for _ in tracks if db_threshold < _.db(tracks[0])]
     tracks = tuple(tracks)
     semitones = [x.semitones_centroid for x in tracks]
     amplitudes = [x.db(tracks[0].amplitude_mean) for x in tracks]
     zipped = zip(semitones, amplitudes)
     chord_dict = {}
     for pair in zipped:
         pitch, amplitude = pair
         if pitch not in chord_dict:
             chord_dict[pitch] = amplitude
         elif chord_dict[pitch] < amplitude:
             chord_dict[pitch] = amplitude
     return tuple(sorted(((k, v) for k, v in chord_dict.iteritems()), key=lambda x: x[0]))