PiCoGen / sheetsage /representations /handcrafted.py
Vansh Chugh
vendor jukebox+sheetsage source and recovered weights, use_jukebox=True
ff7b988
Raw
History Blame Contribute Delete
1.35 kB
import pickle
import librosa
import numpy as np
from ..utils import decode_audio
from .base import Representation
class OAFMelSpec(Representation):
# NOTE: This configuration is from Onsets & Frames (Hawthorne et al. 17).
# https://github.com/magenta/magenta/blob/9885adef56d134763a89de5584f7aa18ca7d53b6/magenta/models/onsets_frames_transcription/constants.py
# https://github.com/magenta/magenta/blob/9885adef56d134763a89de5584f7aa18ca7d53b6/magenta/models/onsets_frames_transcription/data.py#L89
_SR = 16000
_NFFT = 2048
_HOP_SIZE = 512
_FMIN = 30.0
_NMELS = 229
_HTK = False
_LOG = True
def __call__(self, audio_path, offset=0.0, duration=None):
sr, audio = decode_audio(
audio_path,
sr=self._SR,
offset=offset,
duration=duration,
mono=True,
normalize=False,
)
features = librosa.feature.melspectrogram(
y=audio[:, 0],
sr=self._SR,
n_fft=self._NFFT,
hop_length=self._HOP_SIZE,
fmin=self._FMIN,
n_mels=self._NMELS,
htk=self._HTK,
).T
features = features.astype(np.float32)
if self._LOG:
features = librosa.power_to_db(features)
return self._SR / self._HOP_SIZE, features