Plotting segmentation from TextGrid with librosa
Showing segmentation on a spectrogram
%%capture
!pip install seaborn
%matplotlib inline
import seaborn
import numpy as np, scipy, matplotlib.pyplot as plt, IPython.display as ipd
import librosa, librosa.display
plt.rcParams['figure.figsize'] = (13, 5)
Change to match files:
_TEXTGRID = ""
_AUDIO = ""
from praatio import textgrid
tg = textgrid.openTextgrid(_TEXTGRID, False)
x, sr = librosa.load(_AUDIO)
ends = [tg.tierDict['phones'].entryList[0].start] + [end.end for end in tg.tierDict['phones'].entryList]
phones = [end.label for end in tg.tierDict['phones'].entryList]
S = librosa.stft(x, n_fft=2048, hop_length=512)
logS = librosa.amplitude_to_db(np.abs(S), ref=np.max)
librosa.display.specshow(logS, sr=sr, x_axis='time', y_axis='log')
for xc in ends:
plt.axvline(x=xc, color='w')