Ejemplo n.º 1
0
def process_audio(func_name, audio_io):
    """
    Check inputs and return spectrogram images

    Check that inputs are in correct format (single-channel,
    between 5-20 seconds), and convert to images

    Args:
        func_name (str): name of calling function (for printing)
        audio_io (bytes):

    Returns:
        array of 299x299 images, each representing up to
            5s of the original audio

    """
    print(f"runserver.py: {func_name}() checking inputs")
    # Just return error if no data was posted
    if not audio_io:
        return {"error": "No data was given with post?"}

    # Make sure we can load the data given to us
    print(f"runserver.py: {func_name}() loading samples")
    try:
        audio = Audio.from_bytesio(
            audio_io, sample_rate=22050, resample_type="kaiser_fast"
        )
    except:
        return {"error": "Unable to load audio, multi-chennel input is ignored"}
    print(
        f"runserver.py: {func_name}() loaded samples at sample_rate {audio.sample_rate}"
    )

    # Check the duration is between 5 and 20 seconds
    duration = audio.duration()
    if duration < 5:
        return {"error": "Audio is shorter than 5 seconds"}
    elif duration > 20:
        return {"error": "Audio is longer than 20 seconds"}

    # 1. split audio into 5 second chunks
    # 2. generate spectrograms
    # 3. generate images
    audio_splits = birds_detector.split_audio(audio)
    spectrograms = [Spectrogram.from_audio(x) for x in audio_splits]
    images = [x.to_image(shape=(224, 224)) for x in spectrograms]

    print(f"runserver.py: {func_name}(), opening audio as spectrograms")
    return {"images": images}
Ejemplo n.º 2
0
def test_load_pathlib_and_bytesio_are_almost_equal(veryshort_wav_pathlib,
                                                   veryshort_wav_bytesio):
    s_pathlib = Audio.from_file(veryshort_wav_pathlib)
    s_bytesio = Audio.from_bytesio(veryshort_wav_bytesio)
    np.testing.assert_allclose(s_pathlib.samples, s_bytesio.samples, atol=1e-7)
Ejemplo n.º 3
0
def test_load_veryshort_wav_bytesio(veryshort_wav_bytesio):
    s = Audio.from_bytesio(veryshort_wav_bytesio, sample_rate=22050)
    assert s.samples.shape == (3133, )