예제 #1
0
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()
예제 #2
0
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)