Skip to content

Commit

Permalink
Ensure that discrete_samples works in multiple dimensions
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnVinyard committed May 4, 2018
1 parent d980da7 commit 7a9d0c9
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
2 changes: 1 addition & 1 deletion zounds/timeseries/samplerate.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def __mul__(self, other):
return new

def discrete_samples(self, ts):
td = ts.dimensions[0]
td = next(dim for dim in ts.dimensions if hasattr(dim, 'frequency'))
windowsize = np.round((self.duration - td.overlap) / td.frequency)
stepsize = np.round(self.frequency / td.frequency)
return int(stepsize), int(windowsize)
Expand Down
1 change: 1 addition & 0 deletions zounds/timeseries/test_functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ def test_can_invert_categorical_distribution(self):
self.assertIsInstance(inverted, ArrayWithUnits)
self.assertSequenceEqual(windowed.dimensions, inverted.dimensions)


21 changes: 14 additions & 7 deletions zounds/timeseries/test_samplerate.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
import unittest2
import numpy as np
from duration import Seconds, Milliseconds
from zounds.core import ArrayWithUnits
from zounds.core import ArrayWithUnits, IdentityDimension
from timeseries import TimeDimension
from samplerate import \
SampleRate, SR96000, SR48000, SR44100, SR22050, SR11025, \
audio_sample_rate, HalfLapped
from zounds.synthesize import SilenceSynthesizer


class SampleRateTests(unittest2.TestCase):

def test_raises_value_error_for_zero_frequency(self):
self.assertRaises(
ValueError, lambda: SampleRate(Seconds(0), Seconds(1)))
Expand Down Expand Up @@ -39,10 +39,19 @@ def test_can_unpack_audio_samplerate(self):
self.assertEqual(sr.frequency, frequency)
self.assertEqual(sr.duration, duration)

def test_discrete_samples_multiple_dimensions(self):
sr = SR22050()
samples = SilenceSynthesizer(sr).synthesize(Milliseconds(6666))
stacked = ArrayWithUnits(
np.zeros((10,) + samples.shape, dtype=samples.dtype),
(IdentityDimension(),) + samples.dimensions)
stacked[:] = samples
self.assertEqual((512, 1024), HalfLapped().discrete_samples(stacked))

def test_discrete_samples_11025(self):
sr = SR11025()
ts = ArrayWithUnits(
np.zeros(sr.samples_per_second), [TimeDimension(*sr)])
np.zeros(sr.samples_per_second), [TimeDimension(*sr)])
hl = HalfLapped()
freq, duration = hl.discrete_samples(ts)
self.assertEqual(256, freq)
Expand All @@ -51,7 +60,7 @@ def test_discrete_samples_11025(self):
def test_discrete_samples_22050(self):
sr = SR22050()
ts = ArrayWithUnits(
np.zeros(sr.samples_per_second), [TimeDimension(*sr)])
np.zeros(sr.samples_per_second), [TimeDimension(*sr)])
hl = HalfLapped()
freq, duration = hl.discrete_samples(ts)
self.assertEqual(512, freq)
Expand All @@ -60,7 +69,7 @@ def test_discrete_samples_22050(self):
def test_discrete_samples_44100(self):
sr = SR44100()
ts = ArrayWithUnits(
np.zeros(sr.samples_per_second), [TimeDimension(*sr)])
np.zeros(sr.samples_per_second), [TimeDimension(*sr)])
hl = HalfLapped()
freq, duration = hl.discrete_samples(ts)
self.assertEqual(1024, freq)
Expand Down Expand Up @@ -164,5 +173,3 @@ def test_overlap_ratio_half(self):
def test_overlap_ratio_type(self):
sr = SampleRate(frequency=Milliseconds(500), duration=Seconds(1))
self.assertIsInstance(sr.overlap_ratio, float)


0 comments on commit 7a9d0c9

Please sign in to comment.