annotate tests/test_PitchBihist.py @ 36:3b67cd634b9a branch-tests

tests for pitch bihist, before refactoring
author Maria Panteli
date Thu, 14 Sep 2017 14:16:29 +0100
parents
children 2cc444441f42
rev   line source
Maria@36 1 # -*- coding: utf-8 -*-
Maria@36 2 """
Maria@36 3 Created on Fri Sep 1 19:11:52 2017
Maria@36 4
Maria@36 5 @author: mariapanteli
Maria@36 6 """
Maria@36 7
Maria@36 8 import pytest
Maria@36 9
Maria@36 10 import numpy as np
Maria@36 11
Maria@36 12 import scripts.PitchBihist as PitchBihist
Maria@36 13
Maria@36 14
Maria@36 15 pbi = PitchBihist.PitchBihist()
Maria@36 16
Maria@36 17
Maria@36 18 def test_hz_to_cents():
Maria@36 19 freq_Hz = np.array([32.703, 65.406, 55, 110])
Maria@36 20 freq_cents = pbi.hz_to_cents(freq_Hz)
Maria@36 21 freq_cents_true = np.array([0, 1200, 900, 2100])
Maria@36 22 assert np.array_equal(freq_cents, freq_cents_true)
Maria@36 23
Maria@36 24
Maria@36 25 def test_wrap_to_octave():
Maria@36 26 cents = np.array([900, 2100, 1200])
Maria@36 27 octave_cents = pbi.wrap_to_octave(cents)
Maria@36 28 octave_cents_true = np.array([900, 900, 0])
Maria@36 29 assert np.array_equal(octave_cents, octave_cents_true)
Maria@36 30
Maria@36 31
Maria@36 32 def test_get_melody_from_file():
Maria@36 33 melodia_file = 'data/sample_dataset/Melodia/mel_1_2_1.csv'
Maria@36 34 melody = pbi.get_melody_from_file(melodia_file)
Maria@36 35 assert len(melody) < 12. * pbi.chromasr
Maria@36 36
Maria@36 37
Maria@36 38 def test_get_melody_matrix():
Maria@36 39 melody = 440 * np.ones(1000)
Maria@36 40 melody_matrix = pbi.get_melody_matrix(melody)
Maria@36 41 n_frames = melody_matrix.shape[1]
Maria@36 42 assert np.array_equal(melody_matrix[45, :], np.ones(n_frames))
Maria@36 43
Maria@36 44
Maria@36 45 def test_bihist_from_melodia():
Maria@36 46 melodia_file = 'data/sample_dataset/Melodia/mel_1_2_1.csv'
Maria@36 47 bihist = pbi.bihist_from_melodia(melodia_file, secondframedecomp=False)
Maria@36 48 assert bihist.shape == (60, 60)
Maria@36 49
Maria@36 50
Maria@36 51 def test_bihist_from_melodia_n_frames():
Maria@36 52 melodia_file = 'data/sample_dataset/Melodia/mel_1_2_1.csv'
Maria@36 53 bihist = pbi.bihist_from_melodia(melodia_file, secondframedecomp=True)
Maria@36 54 dur_sec = 11.5 # duration of first file in metadata.csv is > 11 seconds
Maria@36 55 n_frames_true = np.round((dur_sec - pbi.win2sec) * 2) # for .5 sec hop size
Maria@36 56 assert bihist.shape[1] == n_frames_true
Maria@36 57
Maria@36 58
Maria@36 59 def test_bihistogram():
Maria@36 60 melody = 440 * np.ones(1000)
Maria@36 61 melody_matrix = pbi.get_melody_matrix(melody)
Maria@36 62 bihist = pbi.bihistogram(melody_matrix, align=False)
Maria@36 63 assert np.array_equal(bihist, np.zeros((60, 60)))
Maria@36 64
Maria@36 65
Maria@36 66 def test_bihistogram_values():
Maria@36 67 melody = np.concatenate([440 * np.ones(500), 32.703 * np.ones(500)])
Maria@36 68 melody_matrix = pbi.get_melody_matrix(melody)
Maria@36 69 # melody transitions from A to C (bin 45/60 to bin 0/60)
Maria@36 70 bihist = pbi.bihistogram(melody_matrix, align=False)
Maria@36 71 # expect only element [45, 0] to be non-zero
Maria@36 72 assert bihist[45, 0] > 0 and (np.sum(bihist) - bihist[45, 0]) == 0
Maria@36 73
Maria@36 74
Maria@36 75