SpyC0der77's picture
Upload folder using huggingface_hub
1a942eb verified
"""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)