Spaces:
Runtime error
Runtime error
"""Module which defines functions to manage audio files.""" | |
import operator | |
import shutil | |
from collections.abc import Sequence | |
from pathlib import Path | |
import gradio as gr | |
from ultimate_rvc.core.common import ( | |
INTERMEDIATE_AUDIO_BASE_DIR, | |
OUTPUT_AUDIO_DIR, | |
display_progress, | |
) | |
from ultimate_rvc.core.exceptions import ( | |
Entity, | |
InvalidLocationError, | |
Location, | |
NotFoundError, | |
NotProvidedError, | |
UIMessage, | |
) | |
from ultimate_rvc.typing_extra import StrPath | |
def get_saved_output_audio() -> list[tuple[str, str]]: | |
""" | |
Get the name and path of all output audio files. | |
Returns | |
------- | |
list[tuple[str, Path]] | |
A list of tuples containing the name and path of each output | |
audio file. | |
""" | |
if OUTPUT_AUDIO_DIR.is_dir(): | |
named_output_files = [ | |
(file_path.name, str(file_path)) for file_path in OUTPUT_AUDIO_DIR.iterdir() | |
] | |
return sorted(named_output_files, key=operator.itemgetter(0)) | |
return [] | |
def delete_intermediate_audio( | |
directories: Sequence[StrPath], | |
progress_bar: gr.Progress | None = None, | |
percentage: float = 0.5, | |
) -> None: | |
""" | |
Delete provided directories containing intermediate audio files. | |
The provided directories must be located in the root of the | |
intermediate audio base directory. | |
Parameters | |
---------- | |
directories : Sequence[StrPath] | |
Paths to directories containing intermediate audio files to | |
delete. | |
progress_bar : gr.Progress, optional | |
Gradio progress bar to update. | |
percentage : float, default=0.5 | |
Percentage to display in the progress bar. | |
Raises | |
------ | |
NotProvidedError | |
If no paths are provided. | |
NotFoundError | |
if a provided path does not point to an existing directory. | |
InvalidLocationError | |
If a provided path does not point to a location in the root of | |
the intermediate audio base directory. | |
""" | |
if not directories: | |
raise NotProvidedError(entity=Entity.DIRECTORIES, ui_msg=UIMessage.NO_SONG_DIRS) | |
display_progress( | |
"[~] Deleting directories ...", | |
percentage, | |
progress_bar, | |
) | |
for directory in directories: | |
dir_path = Path(directory) | |
if not dir_path.is_dir(): | |
raise NotFoundError(entity=Entity.DIRECTORY, location=dir_path) | |
if dir_path.parent != INTERMEDIATE_AUDIO_BASE_DIR: | |
raise InvalidLocationError( | |
entity=Entity.DIRECTORY, | |
location=Location.INTERMEDIATE_AUDIO_ROOT, | |
path=dir_path, | |
) | |
shutil.rmtree(dir_path) | |
def delete_all_intermediate_audio( | |
progress_bar: gr.Progress | None = None, | |
percentage: float = 0.5, | |
) -> None: | |
""" | |
Delete all intermediate audio files. | |
Parameters | |
---------- | |
progress_bar : gr.Progress, optional | |
Gradio progress bar to update. | |
percentage : float, default=0.5 | |
Percentage to display in the progress bar. | |
""" | |
display_progress( | |
"[~] Deleting all intermediate audio files...", | |
percentage, | |
progress_bar, | |
) | |
if INTERMEDIATE_AUDIO_BASE_DIR.is_dir(): | |
shutil.rmtree(INTERMEDIATE_AUDIO_BASE_DIR) | |
def delete_output_audio( | |
files: Sequence[StrPath], | |
progress_bar: gr.Progress | None = None, | |
percentage: float = 0.5, | |
) -> None: | |
""" | |
Delete provided output audio files. | |
The provided files must be located in the root of the output audio | |
directory. | |
Parameters | |
---------- | |
files : Sequence[StrPath] | |
Paths to the output audio files to delete. | |
progress_bar : gr.Progress, optional | |
Gradio progress bar to update. | |
percentage : float, default=0.5 | |
Percentage to display in the progress bar. | |
Raises | |
------ | |
NotProvidedError | |
If no paths are provided. | |
NotFoundError | |
If a provided path does not point to an existing file. | |
InvalidLocationError | |
If a provided path does not point to a location in the root of | |
the output audio directory. | |
""" | |
if not files: | |
raise NotProvidedError( | |
entity=Entity.FILES, | |
ui_msg=UIMessage.NO_OUTPUT_AUDIO_FILES, | |
) | |
display_progress( | |
"[~] Deleting output audio files...", | |
percentage, | |
progress_bar, | |
) | |
for file in files: | |
file_path = Path(file) | |
if not file_path.is_file(): | |
raise NotFoundError(entity=Entity.FILE, location=file_path) | |
if file_path.parent != OUTPUT_AUDIO_DIR: | |
raise InvalidLocationError( | |
entity=Entity.FILE, | |
location=Location.OUTPUT_AUDIO_ROOT, | |
path=file_path, | |
) | |
file_path.unlink() | |
def delete_all_output_audio( | |
progress_bar: gr.Progress | None = None, | |
percentage: float = 0.5, | |
) -> None: | |
""" | |
Delete all output audio files. | |
Parameters | |
---------- | |
progress_bar : gr.Progress, optional | |
Gradio progress bar to update. | |
percentage : float, default=0.5 | |
Percentage to display in the progress bar. | |
""" | |
display_progress("[~] Deleting all output audio files...", percentage, progress_bar) | |
if OUTPUT_AUDIO_DIR.is_dir(): | |
shutil.rmtree(OUTPUT_AUDIO_DIR) | |
def delete_all_audio( | |
progress_bar: gr.Progress | None = None, | |
percentage: float = 0.5, | |
) -> None: | |
""" | |
Delete all audio files. | |
Parameters | |
---------- | |
progress_bar : gr.Progress, optional | |
Gradio progress bar to update. | |
percentage : float, default=0.5 | |
Percentage to display in the progress bar. | |
""" | |
display_progress("[~] Deleting all audio files...", percentage, progress_bar) | |
if INTERMEDIATE_AUDIO_BASE_DIR.is_dir(): | |
shutil.rmtree(INTERMEDIATE_AUDIO_BASE_DIR) | |
if OUTPUT_AUDIO_DIR.is_dir(): | |
shutil.rmtree(OUTPUT_AUDIO_DIR) | |