Ecoacoustics

Setup

# Import libraries
from pathlib import Path
import soundfile as sf
import librosa
import numpy as np
import matplotlib.pyplot as plt
import cmcrameri as cmc
import cmasher as cmr

Set path

file = "meadow.wav"
filepath = Path.cwd() / "data" / file
print(filepath)
/Users/baharmon/academia/computational-ecology/data/meadow.wav

Import audio

# Set parameters
offset = 30
duration = 15

# Import audio
y, sr = librosa.load(filepath, offset=offset, duration=duration)

Filter audio

# Import library
from scipy import signal

# Set parameters
frequency = 2000
nyquist = 0.75 * sr
cutoff = frequency / nyquist
order = 6

# Butterworth filter
sos = signal.butter(order, cutoff, btype="low", analog=False, output="sos")
y = signal.sosfiltfilt(sos, y)

Calculate spectrogram

M = librosa.feature.melspectrogram(y=y, sr=sr)
M_db = librosa.power_to_db(M, ref=np.max)

Plot spectrogram

# Create figure
fig, ax = plt.subplots(figsize=(10, 2), frameon=False)

# Plot spectrogram
img = librosa.display.specshow(
    M_db,
    y_axis="mel",
    x_axis="time",
    cmap="cmc.acton"
)
ax.set_title("Mel spectrogram")
ax.tick_params(axis="x", length=0)
ax.tick_params(axis="y", length=0)
colorbar = fig.colorbar(img, ax=ax, format="%+2.f dB")

# Save plot
plt.savefig(
    "spectrogram.png",
    dpi=300,
    pad_inches=0,
    bbox_inches="tight",
    transparent=True
    )