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]))