|
import numpy as np |
|
import librosa.display |
|
import matplotlib.pyplot as plt |
|
|
|
|
|
|
|
|
|
def plot_UV(signal, audio_interv, sr): |
|
fig, ax = plt.subplots(nrows=2, sharex=True) |
|
librosa.display.waveshow(signal, sr=sr, ax=ax[0]) |
|
ax[0].set_title("Signal") |
|
ax[1].set_title("U/V") |
|
uv_flag = np.zeros(len(signal)) |
|
for i in audio_interv: |
|
uv_flag[i[0]: i[1]] = 1 |
|
|
|
ax[1].plot(np.arange(len(signal))/sr, uv_flag, "r") |
|
ax[1].set_ylim([-0.1, 1.1]) |
|
return fig |
|
|
|
|
|
|
|
|
|
def get_speech_interval(signal, db): |
|
audio_interv = librosa.effects.split(signal, top_db=db) |
|
pause_end = [x[0] for x in audio_interv[1:]] |
|
pause_start = [x[1] for x in audio_interv[0: -1]] |
|
pause_interv = [[x, y] for x, y in zip(pause_start, pause_end)] |
|
return audio_interv, pause_interv |
|
|