Librosa Split не может разделить звукPython

Программы на Python
Anonymous
Librosa Split не может разделить звук

Сообщение Anonymous »

Я пытаюсь создать фильтр, чтобы отделить соответствующий звук от тишины. Я следовал указаниям, перечисленным в этом посте: Найдите лучший порог децибел для разделения звука на сегменты с человеческим голосом и без него в Python.
Я записал файл с шумом и фоновым звуком. тишина. Я пытаюсь использовать функцию 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

Вернуться в «Python»