From 9f2a014b060913ad15f049bf2fffaa8d60d826ff Mon Sep 17 00:00:00 2001 From: zgldh Date: Mon, 9 Dec 2024 02:47:54 +0800 Subject: [PATCH] fix: fix_loudness to -12 dB --- melo/api.py | 2 +- melo/utils.py | 11 +++++++++++ requirements.txt | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/melo/api.py b/melo/api.py index 236ea8f17..567df0678 100644 --- a/melo/api.py +++ b/melo/api.py @@ -122,7 +122,7 @@ def tts_to_file(self, text, speaker_id, output_path=None, sdp_ratio=0.2, noise_s )[0][0, 0].data.cpu().float().numpy() del x_tst, tones, lang_ids, bert, ja_bert, x_tst_lengths, speakers # - audio_list.append(audio) + audio_list.append(utils.fix_loudness(audio,self.hps.data.sampling_rate)) torch.cuda.empty_cache() audio = self.audio_numpy_concat(audio_list, sr=self.hps.data.sampling_rate, speed=speed) diff --git a/melo/utils.py b/melo/utils.py index bafca5a6d..bbe3fdeae 100644 --- a/melo/utils.py +++ b/melo/utils.py @@ -13,11 +13,22 @@ from melo.text.cleaner import clean_text from melo import commons +import pyloudnorm as pyln + MATPLOTLIB_FLAG = False logger = logging.getLogger(__name__) +def fix_loudness(input, rate): + # 峰值归一化至 -1 dB + peak_normalized_audio = pyln.normalize.peak(input, -1.0) + + # 测量响度 + meter = pyln.Meter(rate) + loudness = meter.integrated_loudness(peak_normalized_audio) + # 响度归一化至 -12 dB LUFS + return pyln.normalize.loudness(peak_normalized_audio, loudness, -12.0) def get_text_for_tts_infer(text, language_str, hps, device, symbol_to_id=None): norm_text, phone, tone, word2ph = clean_text(text, language_str) diff --git a/requirements.txt b/requirements.txt index a79f61599..1cc2f0086 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,3 +27,4 @@ langid==1.1.6 tqdm tensorboard==2.16.2 loguru==0.7.2 +pyloudnorm \ No newline at end of file