Я записал файл с шумом и фоновым звуком. тишина. Я пытаюсь использовать функцию librosa.effects.split для разделения звука. Я ожидал, что смогу определить максимальное значение тишины в дБ и пороговое значение при этом значении, но мне не повезло.
Вот мой код:
Визуализация аудиофайлов:
`
y, sr_noise = librosa.load(noise, sr=16000)
S_noise = np.abs(librosa.stft(y))
Код: Выделить всё
y, sr_silence = librosa.load(silence, sr=16000)
S_silence = np.abs(librosa.stft(y))
import librosa
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=2, sharex=True, sharey=True)
imgpow = librosa.display.specshow(librosa.power_to_db(S_noise**2, ref=np.max),
sr=sr_noise, y_axis='log', x_axis='time',
ax=ax[0])
ax[0].set(title='Noise Log-Power spectrogram (max)')
ax[0].label_outer()
imgdb1 = librosa.display.specshow(librosa.power_to_db(S_silence**2, ref=np.max),
sr=sr_silence, y_axis='log', x_axis='time',
ax=ax[1])
ax[1].set(title='Silence Log-Power spectrogram (max)')
fig.colorbar(imgpow, ax=ax[0], format="%+2.0f dB")
fig.colorbar(imgdb1, ax=ax[1], format="%+2.0f dB")`
Определение значения top_db:
Код: Выделить всё
db_noise = core.power_to_db(S_noise**2, ref=np.max, top_db=None)
db_silence = core.power_to_db(S_silence**2, ref=np.max, top_db=None)
print(np.min(db_noise), np.max(db_noise)) #-136.57549 -3.8146973e-06
print(np.min(db_silence), np.max(db_silence)) #-111.44477 -9.536743e-07
Код: Выделить всё
top_db = -5 # selected manually because it is about half way between np.max(db_noise) and np.max(db_silence)
print(librosa.effects.split(S_noise, top_db=top_db)) # []
print(librosa.effects.split(S_silence, top_db=top_db)) #[]
Подробнее здесь: https://stackoverflow.com/questions/790 ... rate-audio