| import librosa | |
| import gradio as gr | |
| import os | |
| from matplotlib import pyplot as plt | |
| from rvc.lib.predictors.F0Extractor import F0Extractor | |
| from assets.i18n.i18n import I18nAuto | |
| i18n = I18nAuto() | |
| def extract_f0_curve(audio_path: str, method: str) -> tuple: | |
| print("Extracting F0 Curve...") | |
| image_path = os.path.join("logs", "f0_plot.png") | |
| txt_path = os.path.join("logs", "f0_curve.txt") | |
| y, sr = librosa.load(audio_path, sr=None) | |
| hop_length = 160 | |
| librosa.note_to_hz("C1") | |
| librosa.note_to_hz("C8") | |
| f0_extractor = F0Extractor(audio_path, sample_rate=sr, method=method) | |
| f0 = f0_extractor.extract_f0() | |
| plt.figure(figsize=(10, 4)) | |
| plt.plot(f0) | |
| plt.title(method) | |
| plt.xlabel("Time (frames)") | |
| plt.ylabel("Frequency (Hz)") | |
| plt.savefig(image_path) | |
| plt.close() | |
| with open(txt_path, "w") as txtfile: | |
| for i, f0_value in enumerate(f0): | |
| frequency = i * sr / hop_length | |
| txtfile.write(f"{frequency},{f0_value}\n") | |
| print("F0 Curve extracted successfully!") | |
| return image_path, txt_path | |
| def f0_extractor_tab(): | |
| with gr.Accordion(label=i18n("Extract F0 Curve")): | |
| with gr.Row(): | |
| audio = gr.Audio(label=i18n("Upload Audio"), type="filepath") | |
| f0_method = gr.Radio( | |
| label=i18n("Pitch extraction algorithm"), | |
| info=i18n( | |
| "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases." | |
| ), | |
| choices=["crepe", "fcpe", "rmvpe"], | |
| value="rmvpe", | |
| ) | |
| button = gr.Button(i18n("Extract F0 Curve"), variant="primary") | |
| with gr.Accordion(label=i18n("Output Information")): | |
| txt_output = gr.File(label="F0 Curve", type="filepath") | |
| image_output = gr.Image(type="filepath", interactive=False) | |
| button.click( | |
| fn=extract_f0_curve, | |
| inputs=[ | |
| audio, | |
| f0_method, | |
| ], | |
| outputs=[image_output, txt_output], | |
| api_name="f0_extract", | |
| ) | |