|
|
- #!/usr/bin/env python
- # coding: utf8
-
- """ Unit testing for audio adapter. """
-
- __email__ = 'spleeter@deezer.com'
- __author__ = 'Deezer Research'
- __license__ = 'MIT License'
-
- from os.path import join
- from tempfile import TemporaryDirectory
-
- from spleeter import SpleeterError
- from spleeter.audio.adapter import AudioAdapter
- from spleeter.audio.ffmpeg import FFMPEGProcessAudioAdapter
-
- # pyright: reportMissingImports=false
- # pylint: disable=import-error
- from pytest import fixture, raises
-
- import numpy as np
- import ffmpeg
- # pylint: enable=import-error
-
- TEST_AUDIO_DESCRIPTOR = 'audio_example.mp3'
- TEST_OFFSET = 0
- TEST_DURATION = 600.
- TEST_SAMPLE_RATE = 44100
-
-
- @fixture(scope='session')
- def adapter():
- """ Target test audio adapter fixture. """
- return AudioAdapter.default()
-
-
- @fixture(scope='session')
- def audio_data(adapter):
- """ Audio data fixture based on sample loading from adapter. """
- return adapter.load(
- TEST_AUDIO_DESCRIPTOR,
- TEST_OFFSET,
- TEST_DURATION,
- TEST_SAMPLE_RATE)
-
-
- def test_default_adapter(adapter):
- """ Test adapter as default adapter. """
- assert isinstance(adapter, FFMPEGProcessAudioAdapter)
- assert adapter is AudioAdapter._DEFAULT
-
-
- def test_load(audio_data):
- """ Test audio loading. """
- waveform, sample_rate = audio_data
- assert sample_rate == TEST_SAMPLE_RATE
- assert waveform is not None
- assert waveform.dtype == np.dtype('float32')
- assert len(waveform.shape) == 2
- assert waveform.shape[0] == 479832
- assert waveform.shape[1] == 2
-
-
- def test_load_error(adapter):
- """ Test load ffprobe exception """
- with raises(SpleeterError):
- adapter.load(
- 'Paris City Jazz',
- TEST_OFFSET,
- TEST_DURATION,
- TEST_SAMPLE_RATE)
-
-
- def test_save(adapter, audio_data):
- """ Test audio saving. """
- with TemporaryDirectory() as directory:
- path = join(directory, 'ffmpeg-save.mp3')
- adapter.save(
- path,
- audio_data[0],
- audio_data[1])
- probe = ffmpeg.probe(TEST_AUDIO_DESCRIPTOR)
- assert len(probe['streams']) == 1
- stream = probe['streams'][0]
- assert stream['codec_type'] == 'audio'
- assert stream['channels'] == 2
- assert stream['duration'] == '10.919184'
|