import os
import numpy as np
from nose.tools import assert_almost_equals
import simpl
import simpl.peak_detection as peak_detection
import simpl.partial_tracking as partial_tracking
import simpl.synthesis as synthesis
import simpl.residual as residual

float_precision = 5
frame_size = 512
hop_size = 512
audio_path = os.path.join(
    os.path.dirname(__file__), 'audio/flute.wav'
)


class TestResidual(object):
    @classmethod
    def setup_class(cls):
        cls.audio = simpl.read_wav(audio_path)[0]

    def test_synthesis(self):
        pd = peak_detection.PeakDetection()
        frames = pd.find_peaks(self.audio)

        pt = partial_tracking.PartialTracking()
        frames = pt.find_partials(frames)

        s = synthesis.Synthesis()
        synth_audio = s.synth(frames)

        r = residual.Residual()
        residual_audio = r.find_residual(synth_audio, self.audio)
        assert len(residual_audio)