Coverage for src/bob/bio/spear/transformer/resample.py: 95%

19 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-12-06 22:04 +0100

1#!/usr/bin/env python 

2# @author: Yannick Dayer <yannick.dayer@idiap.ch> 

3# @date: Wed 25 May 2022 17:27:31 UTC+02 

4 

5import logging 

6 

7from typing import List, Optional 

8 

9import numpy 

10 

11from sklearn.base import BaseEstimator, TransformerMixin 

12 

13from bob.bio.spear.audio_processing import resample 

14 

15logger = logging.getLogger(__name__) 

16 

17 

18class Resample(BaseEstimator, TransformerMixin): 

19 """Transforms a Sample's audio data with a new sample rate.""" 

20 

21 def __init__(self, target_sample_rate: Optional[int] = None) -> None: 

22 """ 

23 Parameters 

24 ---------- 

25 target_sample_rate: 

26 The target sample rate for the audio output. 

27 """ 

28 super().__init__() 

29 self.target_sample_rate = target_sample_rate 

30 

31 def transform( 

32 self, audio_streams: List[numpy.ndarray], sample_rates: List[int] 

33 ) -> List[numpy.ndarray]: 

34 output = [] 

35 for audio, sample_rate in zip(audio_streams, sample_rates): 

36 output.append(resample(audio, sample_rate, self.target_sample_rate)) 

37 return output 

38 

39 def fit(self, X, y=None): 

40 return self 

41 

42 def _more_tags(self): 

43 return { 

44 "stateless": True, 

45 "requires_fit": False, 

46 "bob_transform_extra_input": [("sample_rates", "rate")], 

47 } # TODO: add multi-output tag