def test_isvalid(audio): assert audio.dtype is np.dtype(np.int16) assert audio.is_valid() # brutal cast from int16 to float32, still with values greater than 1 audio2 = Audio( audio.data.astype(np.float32), audio.sample_rate, validate=False) assert audio2.dtype is np.dtype(np.float32) assert not audio2.is_valid() with pytest.raises(ValueError) as err: Audio(audio.data.astype(np.float32), audio.sample_rate, validate=True) 'invalid audio data' in err # smooth cast from int16 to float32 audio3 = audio.astype(np.float32) assert audio3.dtype is np.dtype(np.float32) assert audio3.is_valid() # just add a silly value in float32 audio data = audio3.data.copy() data[6] = 1.1 with pytest.raises(ValueError) as err: Audio(data, audio.sample_rate) assert 'invalid audio data for type' in err audio4 = Audio(data, audio.sample_rate, validate=False) assert not audio4.is_valid() # brutal cast to invalid uint8 dtype audio5 = Audio( audio.data.astype(np.uint8), audio.sample_rate, validate=False) assert audio5.dtype is np.dtype(np.uint8) assert not audio5.is_valid()
def test_kaldi_audio(wav_file, audio, dtype): # make sure we have results when loading a wav file with # shennong.Audio and with the Kaldi code. with tempfile.NamedTemporaryFile('w+') as tfile: tfile.write('test {}\n'.format(wav_file)) tfile.seek(0) with SequentialWaveReader('scp,t:' + tfile.name) as reader: for key, wave in reader: audio_kaldi = Audio(wave.data().numpy().reshape( audio.data.shape), audio.sample_rate, validate=False) audio = audio.astype(dtype) assert audio.duration == audio_kaldi.duration assert audio.dtype == dtype assert audio.is_valid() assert audio_kaldi.dtype == np.float32 assert not audio_kaldi.is_valid() # not in [-1, 1] but [-2**15, 2**15-1] mfcc = MfccProcessor().process(audio) mfcc_kaldi = MfccProcessor().process(audio_kaldi) assert mfcc.shape == mfcc_kaldi.shape assert np.array_equal(mfcc.times, mfcc_kaldi.times) assert mfcc.properties == mfcc_kaldi.properties assert mfcc.dtype == mfcc_kaldi.dtype assert pytest.approx(mfcc.data, mfcc_kaldi.data)