SYMBOL INDEX (596 symbols across 88 files) FILE: SonicVale/app/core/audio_engin.py class AudioProcessor (line 10) | class AudioProcessor: method __init__ (line 11) | def __init__(self, audio_path: str, keep_format=True, default_sr=44100... method _create_tmp_file (line 25) | def _create_tmp_file(self): method _run_ffmpeg (line 31) | def _run_ffmpeg(self, cmd): method _normalize (line 37) | def _normalize(self, path): method cut (line 47) | def cut(self, start_ms: int, end_ms: int): method insert_silence (line 67) | def insert_silence(self, insert_ms: int, duration_sec: float): method append_silence (line 88) | def append_silence(self, duration_sec: float): method change_speed (line 137) | def change_speed(self, speed: float): method change_volume (line 151) | def change_volume(self, volume: float): method export (line 165) | def export(self, out_path: str): FILE: SonicVale/app/core/config.py function getConfigPath (line 6) | def getConfigPath(): function getFfmpegPath (line 17) | def getFfmpegPath(): FILE: SonicVale/app/core/enums.py class TaskEnum (line 3) | class TaskEnum(str, Enum): FILE: SonicVale/app/core/llm_engine.py class LLMEngine (line 15) | class LLMEngine: method __init__ (line 16) | def __init__(self, api_key: str, base_url: str, model_name: str, custo... method _extract_result_tag (line 39) | def _extract_result_tag(self, text: str) -> str: method generate_text_test (line 46) | def generate_text_test(self, prompt: str) -> str: method generate_text (line 57) | def generate_text(self, prompt: str, retries: int = 3, delay: float = ... method save_load_json (line 91) | def save_load_json(self, json_str: str): method generate_smart_text (line 110) | def generate_smart_text(self, prompt: str) -> str: FILE: SonicVale/app/core/prompts.py function get_context2lines_prompt (line 6) | def get_context2lines_prompt(possible_characters, novel_content,possible... function get_prompt_str (line 75) | def get_prompt_str(): function get_auto_fix_json_prompt (line 145) | def get_auto_fix_json_prompt(json_str: str) -> str: function get_add_smart_role_and_voice (line 166) | def get_add_smart_role_and_voice(original_text: str, role_name, voice_na... function get_subtitle_correction_prompt (line 210) | def get_subtitle_correction_prompt(original_text: str, subtitle_lines: l... FILE: SonicVale/app/core/response.py class Res (line 7) | class Res(GenericModel, Generic[T]): FILE: SonicVale/app/core/subtitle/ASRData.py class ASRDataSeg (line 7) | class ASRDataSeg: method __init__ (line 8) | def __init__(self, text, start_time, end_time): method to_srt_ts (line 13) | def to_srt_ts(self) -> str: method to_lrc_ts (line 18) | def to_lrc_ts(self) -> str: method to_ass_ts (line 22) | def to_ass_ts(self) -> tuple[str, str]: method _ms_to_lrc_time (line 26) | def _ms_to_lrc_time(self, ms) -> str: method _ms_to_srt_time (line 32) | def _ms_to_srt_time(ms) -> str: method _ms_to_ass_ts (line 40) | def _ms_to_ass_ts(ms) -> str: method transcript (line 50) | def transcript(self) -> str: method __str__ (line 54) | def __str__(self) -> str: class ASRData (line 58) | class ASRData: method __init__ (line 59) | def __init__(self, segments: List[ASRDataSeg]): method __iter__ (line 62) | def __iter__(self): method __len__ (line 65) | def __len__(self) -> int: method has_data (line 68) | def has_data(self) -> bool: method is_word_timestamp (line 72) | def is_word_timestamp(self) -> bool: method save (line 95) | def save(self, save_path: str, ass_style: str = None, layout: str = "原... method to_txt (line 112) | def to_txt(self) -> str: method to_srt (line 116) | def to_srt(self, save_path=None) -> str: method to_lrc (line 126) | def to_lrc(self, save_path=None) -> str: method to_json (line 136) | def to_json(self) -> dict: method to_ass (line 153) | def to_ass(self, style_str: str = None, layout: str = "原文在上", save_pat... method merge_segments (line 218) | def merge_segments(self, start_index: int, end_index: int, merged_text... method merge_with_next_segment (line 230) | def merge_with_next_segment(self, index: int) -> None: method __str__ (line 248) | def __str__(self): function from_subtitle_file (line 251) | def from_subtitle_file(file_path: str) -> 'ASRData': function from_json (line 287) | def from_json(json_data: dict) -> 'ASRData': function from_srt (line 303) | def from_srt(srt_str: str) -> 'ASRData': function from_vtt (line 343) | def from_vtt(vtt_str: str) -> 'ASRData': function from_youtube_vtt (line 392) | def from_youtube_vtt(vtt_str: str) -> 'ASRData': function from_ass (line 470) | def from_ass(ass_str: str) -> 'ASRData': FILE: SonicVale/app/core/subtitle/BaseASR.py class BaseASR (line 11) | class BaseASR: method __init__ (line 16) | def __init__(self, audio_path: [str, bytes], use_cache: bool = False): method _load_cache (line 27) | def _load_cache(self): method _save_cache (line 42) | def _save_cache(self): method _set_data (line 54) | def _set_data(self): method _get_key (line 66) | def _get_key(self): method run (line 69) | def run(self): method _make_segments (line 81) | def _make_segments(self, resp_data: dict) -> list[ASRDataSeg]: method _run (line 84) | def _run(self) -> dict: FILE: SonicVale/app/core/subtitle/BcutASR.py class BcutASR (line 30) | class BcutASR(BaseASR): method __init__ (line 37) | def __init__(self, audio_path: [str, bytes], use_cache: bool = False): method upload (line 55) | def upload(self) -> None: method __upload_part (line 89) | def __upload_part(self) -> None: method __commit_upload (line 105) | def __commit_upload(self) -> None: method create_task (line 124) | def create_task(self) -> str: method result (line 135) | def result(self, task_id: Optional[str] = None): method _run (line 142) | def _run(self): method _make_segments (line 154) | def _make_segments(self, resp_data: dict) -> list[ASRDataSeg]: FILE: SonicVale/app/core/subtitle/JianYingASR.py class JianYingASR (line 19) | class JianYingASR(BaseASR): method __init__ (line 20) | def __init__(self, audio_path: Union[str, bytes], use_cache: bool = Fa... method submit (line 42) | def submit(self) -> str: method upload (line 69) | def upload(self): method query (line 78) | def query(self, query_id: str): method _run (line 99) | def _run(self, callback=None): method _make_segments (line 114) | def _make_segments(self, resp_data: dict) -> list[ASRDataSeg]: method _get_key (line 121) | def _get_key(self): method _generate_sign_parameters (line 124) | def _generate_sign_parameters(self, url: str, pf: str = '4', appvr: st... method _build_headers (line 150) | def _build_headers(self, device_time: str, sign: str) -> Dict[str, str]: method _uplosd_headers (line 162) | def _uplosd_headers(self): method _upload_sign (line 170) | def _upload_sign(self): method _upload_auth (line 185) | def _upload_auth(self): method _upload_file (line 214) | def _upload_file(self): method _upload_check (line 223) | def _upload_check(self): method _upload_commit (line 232) | def _upload_commit(self): function sign (line 240) | def sign(key: bytes, msg: str) -> bytes: function get_signature_key (line 245) | def get_signature_key(secret_key: str, date_stamp: str, region_name: str... function aws_signature (line 254) | def aws_signature(secret_key: str, request_parameters: str, headers: Dic... FILE: SonicVale/app/core/subtitle/KuaiShouASR.py class KuaiShouASR (line 7) | class KuaiShouASR(BaseASR): method __init__ (line 8) | def __init__(self, audio_path: [str, bytes], use_cache: bool = False): method _run (line 11) | def _run(self) -> dict: method _make_segments (line 14) | def _make_segments(self, resp_data: dict) -> list[ASRDataSeg]: method _submit (line 17) | def _submit(self) -> dict: FILE: SonicVale/app/core/subtitle/WhisperASR.py class WhisperASR (line 10) | class WhisperASR(BaseASR): method __init__ (line 11) | def __init__(self, audio_path: [str, bytes], model: str = MODEL, use_c... method _run (line 20) | def _run(self) -> dict: method _make_segments (line 23) | def _make_segments(self, resp_data: dict) -> list[ASRDataSeg]: method _get_key (line 26) | def _get_key(self) -> str: method _submit (line 29) | def _submit(self) -> dict: FILE: SonicVale/app/core/subtitle/subtitle_engine.py function generate_subtitle (line 7) | def generate_subtitle(audio_file,save_path): function is_same_char (line 25) | def is_same_char(c1: str, c2: str) -> bool: function correct_text_with_pinyin (line 31) | def correct_text_with_pinyin(original: str, recognized: str) -> str: function read_srt (line 59) | def read_srt(path: str): function write_srt (line 69) | def write_srt(path: str, entries): function flatten_for_align (line 76) | def flatten_for_align(text: str) -> str: function segment_corrected_by_recognized_boundaries (line 79) | def segment_corrected_by_recognized_boundaries(recognized_full: str, function correct_srt_file (line 155) | def correct_srt_file(original_text: str, srt_path: str, function correct_srt_file_with_llm (line 200) | def correct_srt_file_with_llm( function clean_subtitle_text (line 281) | def clean_subtitle_text(text: str) -> str: FILE: SonicVale/app/core/text_correct_engine.py class TextCorrectorFinal (line 8) | class TextCorrectorFinal: method __init__ (line 14) | def __init__(self, base_threshold: float = None, base_window: int = No... method clean_text (line 25) | def clean_text(self, text: str) -> str: method clean_for_compare (line 31) | def clean_for_compare(self, text: str) -> str: method get_adaptive_threshold (line 38) | def get_adaptive_threshold(self, sentence: str) -> float: method _looks_like_abbreviation (line 58) | def _looks_like_abbreviation(self, sentence_with_dot: str) -> bool: method split_sentences (line 87) | def split_sentences(self, text: str) -> List[str]: method find_best_sentence_match (line 134) | def find_best_sentence_match(self, ai_sentence: str, original_sentence... method correct_ai_text (line 199) | def correct_ai_text(self, original_text: str, ai_data: List[Dict]) -> ... function read_files (line 302) | def read_files(): function save_corrected_data (line 318) | def save_corrected_data(corrected_data: List[Dict]): function main (line 328) | def main(): FILE: SonicVale/app/core/tts_engine.py class TTSEngine (line 6) | class TTSEngine: method __init__ (line 7) | def __init__(self, base_url: str): method synthesize (line 14) | def synthesize( method get_models (line 70) | def get_models(self) -> dict: method check_audio_exists (line 80) | def check_audio_exists(self, filename: str) -> bool: method upload_audio (line 92) | def upload_audio(self, file_path: str,full_path=None) -> dict: FILE: SonicVale/app/core/tts_runtime.py function emotion_text_to_vector (line 13) | def emotion_text_to_vector(emotion: str, intensity: str) -> list[float]: function tts_worker (line 51) | async def tts_worker(app: FastAPI): FILE: SonicVale/app/core/ws_manager.py class WSManager (line 5) | class WSManager: method __init__ (line 6) | def __init__(self): method connect (line 9) | async def connect(self, ws: WebSocket): method disconnect (line 13) | def disconnect(self, ws: WebSocket): method broadcast (line 17) | async def broadcast(self, data: dict): FILE: SonicVale/app/db/database.py function get_db (line 25) | def get_db() -> Generator[Session, Any, None]: FILE: SonicVale/app/dto/chapter_dto.py class ChapterCreateDTO (line 7) | class ChapterCreateDTO(BaseModel): class ChapterResponseDTO (line 14) | class ChapterResponseDTO(BaseModel): FILE: SonicVale/app/dto/emotion_dto.py class EmotionCreateDTO (line 8) | class EmotionCreateDTO(BaseModel): class EmotionResponseDTO (line 15) | class EmotionResponseDTO(BaseModel): FILE: SonicVale/app/dto/line_dto.py class LineInitDTO (line 6) | class LineInitDTO(BaseModel): class LineOrderDTO (line 13) | class LineOrderDTO(BaseModel): class LineAudioProcessDTO (line 16) | class LineAudioProcessDTO(BaseModel): class LineCreateDTO (line 27) | class LineCreateDTO(BaseModel): class LineResponseDTO (line 43) | class LineResponseDTO(BaseModel): FILE: SonicVale/app/dto/llm_provider_dto.py class LLMProviderCreateDTO (line 11) | class LLMProviderCreateDTO(BaseModel): class LLMProviderResponseDTO (line 24) | class LLMProviderResponseDTO(BaseModel): FILE: SonicVale/app/dto/multi_emotion_voice_dto.py class MultiEmotionVoiceCreateDTO (line 7) | class MultiEmotionVoiceCreateDTO(BaseModel): class MultiEmotionVoiceResponseDTO (line 16) | class MultiEmotionVoiceResponseDTO(BaseModel): FILE: SonicVale/app/dto/project_dto.py class ProjectCreateDTO (line 7) | class ProjectCreateDTO(BaseModel): class ProjectResponseDTO (line 19) | class ProjectResponseDTO(BaseModel): class ProjectImportDTO (line 35) | class ProjectImportDTO(BaseModel): FILE: SonicVale/app/dto/prompt_dto.py class PromptCreateDTO (line 7) | class PromptCreateDTO(BaseModel): class PromptResponseDTO (line 17) | class PromptResponseDTO(BaseModel): FILE: SonicVale/app/dto/role_dto.py class RoleCreateDTO (line 7) | class RoleCreateDTO(BaseModel): class RoleResponseDTO (line 13) | class RoleResponseDTO(BaseModel): FILE: SonicVale/app/dto/strength_dto.py class StrengthCreateDTO (line 9) | class StrengthCreateDTO(BaseModel): class StrengthResponseDTO (line 17) | class StrengthResponseDTO(BaseModel): FILE: SonicVale/app/dto/tts_provider_dto.py class TTSProviderCreateDTO (line 7) | class TTSProviderCreateDTO(BaseModel): class TTSProviderResponseDTO (line 16) | class TTSProviderResponseDTO(BaseModel): FILE: SonicVale/app/dto/voice_dto.py class VoiceCreateDTO (line 7) | class VoiceCreateDTO(BaseModel): class VoiceResponseDTO (line 16) | class VoiceResponseDTO(BaseModel): class VoiceExportDTO (line 27) | class VoiceExportDTO(BaseModel): class VoiceImportDTO (line 34) | class VoiceImportDTO(BaseModel): class VoiceImportResultDTO (line 41) | class VoiceImportResultDTO(BaseModel): class VoiceAudioProcessDTO (line 48) | class VoiceAudioProcessDTO(BaseModel): class VoiceCopyDTO (line 59) | class VoiceCopyDTO(BaseModel): FILE: SonicVale/app/entity/chapter_entity.py class ChapterEntity (line 9) | class ChapterEntity: FILE: SonicVale/app/entity/emotion_entity.py class EmotionEntity (line 8) | class EmotionEntity: FILE: SonicVale/app/entity/line_entity.py class LineEntity (line 9) | class LineEntity: FILE: SonicVale/app/entity/llm_provider_entity.py class LLMProviderEntity (line 8) | class LLMProviderEntity: FILE: SonicVale/app/entity/multi_emotion_voice_entity.py class MultiEmotionVoiceEntity (line 18) | class MultiEmotionVoiceEntity: FILE: SonicVale/app/entity/project_entity.py class ProjectEntity (line 9) | class ProjectEntity: FILE: SonicVale/app/entity/prompt_entity.py class PromptEntity (line 16) | class PromptEntity: FILE: SonicVale/app/entity/role_entity.py class RoleEntity (line 9) | class RoleEntity: FILE: SonicVale/app/entity/strength_entity.py class StrengthEntity (line 8) | class StrengthEntity: FILE: SonicVale/app/entity/tts_provider_entity.py class TTSProviderEntity (line 9) | class TTSProviderEntity: FILE: SonicVale/app/entity/voice_entity.py class VoiceEntity (line 9) | class VoiceEntity: FILE: SonicVale/app/main.py function add_prompt_id_column (line 89) | def add_prompt_id_column(): function add_is_done_column (line 99) | def add_is_done_column(): function add_custom_params_column (line 109) | def add_custom_params_column(): function add_is_precise_fill_column (line 134) | def add_is_precise_fill_column(): function add_project_root_path_column (line 145) | def add_project_root_path_column(): function get_tts_service (line 155) | def get_tts_service(db: Session = Depends(get_db)) -> TTSProviderService: function startup_event (line 159) | async def startup_event(): function shutdown_event (line 263) | async def shutdown_event(): function read_root (line 288) | def read_root(): function test_db (line 295) | def test_db(): function ws_endpoint (line 326) | async def ws_endpoint(ws: WebSocket): FILE: SonicVale/app/models/po.py class ProjectPO (line 11) | class ProjectPO(Base): class RolePO (line 32) | class RolePO(Base): class VoicePO (line 46) | class VoicePO(Base): class MultiEmotionVoicePO (line 62) | class MultiEmotionVoicePO(Base): class ChapterPO (line 76) | class ChapterPO(Base): class EmotionPO (line 94) | class EmotionPO(Base): class StrengthPO (line 105) | class StrengthPO(Base): class LinePO (line 116) | class LinePO(Base): class LLMProviderPO (line 162) | class LLMProviderPO(Base): class TTSProviderPO (line 192) | class TTSProviderPO(Base): class PromptPO (line 208) | class PromptPO(Base): FILE: SonicVale/app/repositories/chapter_repository.py class ChapterRepository (line 9) | class ChapterRepository: method __init__ (line 10) | def __init__(self, db: Session): method get_by_id (line 13) | def get_by_id(self, chapter_id: int) -> Optional[ChapterPO]: method get_all (line 17) | def get_all(self, project_id: int) -> Sequence[ChapterPO]: method create (line 22) | def create(self, chapter_data: ChapterPO) -> ChapterPO: method update (line 29) | def update(self, chapter_id: int, chapter_data: dict) -> Optional[Chap... method delete (line 42) | def delete(self, chapter_id: int) -> bool: method get_by_name (line 58) | def get_by_name(self, name: str, project_id: int) -> Optional[ChapterPO]: method search (line 67) | def search(self, keyword: str) -> Sequence[ChapterPO]: FILE: SonicVale/app/repositories/emotion_repository.py class EmotionRepository (line 8) | class EmotionRepository: method __init__ (line 9) | def __init__(self, db: Session): method get_by_id (line 12) | def get_by_id(self, id: int) -> Optional[EmotionPO]: method get_by_name (line 16) | def get_by_name(self, name: str) -> Optional[EmotionPO]: method get_all (line 20) | def get_all(self) -> list[type[EmotionPO]]: method create (line 24) | def create(self, emotion: EmotionPO) -> EmotionPO: method update (line 32) | def update(self, id: int, data: dict) -> Optional[EmotionPO]: method delete (line 44) | def delete(self, id: int) -> bool: FILE: SonicVale/app/repositories/line_repository.py class LineRepository (line 10) | class LineRepository: method __init__ (line 11) | def __init__(self, db: Session): method get_by_id (line 14) | def get_by_id(self, id: int) -> Optional[LinePO]: method get_all (line 18) | def get_all(self, chapter_id: int) -> Sequence[LinePO]: method create (line 28) | def create(self, data: LinePO) -> LinePO: method update (line 36) | def update(self, line_id: int, line_data: dict) -> Optional[LinePO]: method delete (line 49) | def delete(self, line_id: int) -> bool: method delete_all_by_chapter_id (line 57) | def delete_all_by_chapter_id(self, chapter_id: int) -> bool: method get_lines_by_role_id (line 65) | def get_lines_by_role_id(self, role_id: int): method batch_update_line_order (line 68) | def batch_update_line_order(self, line_orders:List[LineOrderDTO])-> int: FILE: SonicVale/app/repositories/llm_provider_repository.py class LLMProviderRepository (line 7) | class LLMProviderRepository: method __init__ (line 8) | def __init__(self, db: Session): method get_by_id (line 11) | def get_by_id(self, llm_provider_id: int) -> Optional[LLMProviderPO]: method get_all (line 15) | def get_all(self) -> Sequence[LLMProviderPO]: method create (line 19) | def create(self, llm_provider_data: LLMProviderPO) -> LLMProviderPO: method update (line 26) | def update(self, llm_provider_id: int, llm_provider_data: dict) -> Opt... method delete (line 38) | def delete(self, llm_provider_id: int) -> bool: method get_by_name (line 47) | def get_by_name(self, name: str) -> Optional[LLMProviderPO]: method search (line 52) | def search(self, keyword: str) -> Sequence[LLMProviderPO]: FILE: SonicVale/app/repositories/multi_emotion_voice_repository.py class MultiEmotionVoiceRepository (line 8) | class MultiEmotionVoiceRepository: method __init__ (line 9) | def __init__(self, db: Session): method get_by_id (line 12) | def get_by_id(self, id: int) -> Optional[MultiEmotionVoicePO]: method get_by_voice_id_emotion_id_strength_id (line 17) | def get_by_voice_id_emotion_id_strength_id(self, voice_id: int, emotio... method get_by_voice_id (line 23) | def get_by_voice_id(self, voice_id: int) -> Sequence[type[MultiEmotion... method get_all (line 27) | def get_all(self) -> list[type[MultiEmotionVoicePO]]: method create (line 31) | def create(self, multi_emotion_voice: MultiEmotionVoicePO) -> MultiEmo... method update (line 39) | def update(self, id: int, data: dict) -> Optional[MultiEmotionVoicePO]: method delete (line 51) | def delete(self, id: int) -> bool: method delete_multi_emotion_voice_by_voice_id (line 60) | def delete_multi_emotion_voice_by_voice_id(self, voice_id): FILE: SonicVale/app/repositories/project_repository.py class ProjectRepository (line 7) | class ProjectRepository: method __init__ (line 8) | def __init__(self, db: Session): method get_by_id (line 11) | def get_by_id(self, project_id: int) -> Optional[ProjectPO]: method get_all (line 15) | def get_all(self) -> Sequence[ProjectPO]: method create (line 19) | def create(self, project_data: ProjectPO) -> ProjectPO: method update (line 26) | def update(self, project_id: int, project_data: dict) -> Optional[Proj... method delete (line 37) | def delete(self, project_id: int) -> bool: method get_by_name (line 46) | def get_by_name(self, name: str) -> Optional[ProjectPO]: method search (line 51) | def search(self, keyword: str) -> Sequence[ProjectPO]: FILE: SonicVale/app/repositories/prompt_repository.py class PromptRepository (line 7) | class PromptRepository: method __init__ (line 8) | def __init__(self, db: Session): method get_by_id (line 11) | def get_by_id(self, prompt_id: int) -> Optional[PromptPO]: method get_all (line 15) | def get_all(self) -> Sequence[PromptPO]: method create (line 19) | def create(self, prompt_data: PromptPO) -> PromptPO: method update (line 26) | def update(self, prompt_id: int, prompt_data: dict) -> Optional[Prompt... method delete (line 38) | def delete(self, prompt_id: int) -> bool: method get_by_name (line 47) | def get_by_name(self, name: str) -> Optional[PromptPO]: method get_by_task (line 53) | def get_by_task(self, task: str) -> Sequence[PromptPO]: method search (line 58) | def search(self, keyword: str) -> Sequence[PromptPO]: FILE: SonicVale/app/repositories/role_repository.py class RoleRepository (line 9) | class RoleRepository: method __init__ (line 10) | def __init__(self, db: Session): method get_by_id (line 13) | def get_by_id(self, id: int) -> Optional[RolePO]: method get_all (line 17) | def get_all(self,project_id: int) -> Sequence[RolePO]: method create (line 22) | def create(self, data: RolePO) -> RolePO: method update (line 30) | def update(self, role_id: int, role_data: dict) -> Optional[RolePO]: method delete (line 43) | def delete(self, role_id: int) -> bool: method get_by_name (line 53) | def get_by_name(self, name: str,project_id: int) -> Optional[RolePO]: FILE: SonicVale/app/repositories/strength_repository.py class StrengthRepository (line 8) | class StrengthRepository: method __init__ (line 9) | def __init__(self, db: Session): method get_by_id (line 12) | def get_by_id(self, id: int) -> Optional[StrengthPO]: method get_by_name (line 16) | def get_by_name(self, name: str) -> Optional[StrengthPO]: method get_all (line 20) | def get_all(self) -> list[type[StrengthPO]]: method create (line 24) | def create(self, strength: StrengthPO) -> StrengthPO: method update (line 31) | def update(self, id: int, data: dict) -> Optional[StrengthPO]: method delete (line 43) | def delete(self, id: int) -> bool: FILE: SonicVale/app/repositories/tts_provider_repository.py class TTSProviderRepository (line 9) | class TTSProviderRepository: method __init__ (line 10) | def __init__(self, db: Session): method get_by_id (line 13) | def get_by_id(self, id: int) -> Optional[TTSProviderPO]: method get_all (line 17) | def get_all(self) -> Sequence[TTSProviderPO]: method create (line 22) | def create(self, data: TTSProviderPO) -> TTSProviderPO: method update (line 31) | def update(self, tts_provider_id: int, voice_data: dict) -> Optional[T... method get_by_name (line 54) | def get_by_name(self, name: str) -> Optional[TTSProviderPO]: FILE: SonicVale/app/repositories/voice_repository.py class VoiceRepository (line 9) | class VoiceRepository: method __init__ (line 10) | def __init__(self, db: Session): method get_by_id (line 13) | def get_by_id(self, id: int) -> Optional[VoicePO]: method get_all (line 17) | def get_all(self,tts_id: int) -> Sequence[VoicePO]: method get_by_ids (line 21) | def get_by_ids(self, tts_id: int, ids: list[int]) -> Sequence[VoicePO]: method create (line 30) | def create(self, data: VoicePO) -> VoicePO: method update (line 38) | def update(self, voice_id: int, voice_data: dict) -> Optional[VoicePO]: method delete (line 50) | def delete(self, voice_id: int) -> bool: method get_by_name (line 60) | def get_by_name(self, name: str,tts_id: int) -> Optional[VoicePO]: FILE: SonicVale/app/routers/chapter_router.py function get_chapter_service (line 50) | def get_chapter_service(db: Session = Depends(get_db)) -> ChapterService: function get_line_service (line 54) | def get_line_service(db: Session = Depends(get_db)) -> LineService: function get_project_service (line 61) | def get_project_service(db: Session = Depends(get_db)) -> ProjectService: function get_voice_service (line 65) | def get_voice_service(db: Session = Depends(get_db)) -> VoiceService: function get_role_service (line 70) | def get_role_service(db: Session = Depends(get_db)) -> RoleService: function get_emotion_service (line 74) | def get_emotion_service(db: Session = Depends(get_db)) -> EmotionService: function get_strength_service (line 78) | def get_strength_service(db: Session = Depends(get_db)) -> StrengthService: function get_multi_emotion_voice_service (line 82) | def get_multi_emotion_voice_service(db: Session = Depends(get_db)) -> Mu... function get_prompt_service (line 86) | def get_prompt_service(db: Session = Depends(get_db)) -> PromptService: function create_chapter (line 93) | async def create_chapter(dto: ChapterCreateDTO, chapter_service: Chapter... function get_chapter (line 120) | async def get_chapter(chapter_id: int, chapter_service: ChapterService =... function get_all_chapters (line 131) | async def get_all_chapters(project_id: int, chapter_service: ChapterServ... function update_chapter (line 143) | async def update_chapter(chapter_id: int, dto: ChapterCreateDTO, chapter... function delete_chapter (line 158) | async def delete_chapter(chapter_id: int, chapter_service: ChapterServic... function get_lines (line 174) | async def get_lines( function export_llm_prompt (line 269) | async def export_llm_prompt(project_id:int,chapter_id: int, chapter_serv... function import_lines (line 296) | async def import_lines(project_id: int,chapter_id: int,data:str=Form( ..... function add_smart_role_and_voice (line 364) | async def add_smart_role_and_voice(project_id: int,chapter_id: int, FILE: SonicVale/app/routers/emotion_router.py function get_emotion_service (line 23) | def get_emotion_service(db: Session = Depends(get_db)) -> EmotionService: function create_emotion (line 30) | def create_emotion(dto: EmotionCreateDTO, emotion_service: EmotionServic... function get_emotion (line 53) | def get_emotion(emotion_id: int, emotion_service: EmotionService = Depen... function get_all_emotions (line 64) | def get_all_emotions(emotion_service: EmotionService = Depends(get_emoti... function update_emotion (line 76) | def update_emotion(emotion_id: int, dto: EmotionCreateDTO, emotion_servi... function delete_emotion (line 91) | def delete_emotion(emotion_id: int, emotion_service: EmotionService = De... FILE: SonicVale/app/routers/line_router.py function get_line_service (line 36) | def get_line_service(db: Session = Depends(get_db)) -> LineService: function get_project_service (line 42) | def get_project_service(db: Session = Depends(get_db)) -> ProjectService: function get_chapter_service (line 46) | def get_chapter_service(db: Session = Depends(get_db)) -> ChapterService: function get_voice_service (line 50) | def get_voice_service(db: Session = Depends(get_db)) -> VoiceService: function get_role_service (line 55) | def get_role_service(db: Session = Depends(get_db)) -> RoleService: function create_line (line 61) | def create_line(project_id:int,dto: LineCreateDTO, line_service: LineSer... function get_line (line 100) | def get_line(line_id: int, line_service: LineService = Depends(get_line_... function get_all_lines (line 111) | def get_all_lines(chapter_id: int, line_service: LineService = Depends(g... function update_line (line 123) | def update_line(line_id: int, dto: LineCreateDTO, line_service: LineServ... function delete_line (line 138) | def delete_line(line_id: int, line_service: LineService = Depends(get_li... function delete_all_lines (line 147) | def delete_all_lines(chapter_id: int, line_service: LineService = Depend... function batch_update_line_order (line 159) | def batch_update_line_order( function update_line_audio_path (line 168) | def update_line_audio_path( function generate_audio (line 181) | async def generate_audio(request: Request, project_id: int, dto: LineCre... function process_audio (line 286) | async def process_audio(line_id: int, dto: LineAudioProcessDTO, line_ser... function export_audio (line 294) | async def export_audio(chapter_id: int, function correct_subtitle_pinyin (line 315) | async def correct_subtitle_pinyin( function correct_subtitle_llm (line 362) | async def correct_subtitle_llm( FILE: SonicVale/app/routers/llm_provider_router.py function get_llm_service (line 18) | def get_llm_service(db: Session = Depends(get_db)) -> LLMProviderService: function create_llm_provider (line 28) | def create_llm_provider(dto: LLMProviderCreateDTO, service: LLMProviderS... function get_llm_provider (line 56) | def get_llm_provider(llm_provider_id: int, service: LLMProviderService =... function get_all_llm_providers (line 67) | def get_all_llm_providers(service: LLMProviderService = Depends(get_llm_... function update_llm_provider (line 77) | def update_llm_provider(llm_provider_id: int, dto: LLMProviderCreateDTO,... function delete_llm_provider (line 95) | def delete_llm_provider(llm_provider_id: int, service: LLMProviderServic... function test_llm_provider (line 106) | def test_llm_provider(dto: LLMProviderCreateDTO, service: LLMProviderSer... FILE: SonicVale/app/routers/multi_emotion_voice_router.py function get_multi_emotion_voice_service (line 21) | def get_multi_emotion_voice_service(db: Session = Depends(get_db)) -> Mu... function get_voice_service (line 24) | def get_voice_service(db: Session = Depends(get_db)) -> VoiceService: function get_emotion_service (line 29) | def get_emotion_service(db: Session = Depends(get_db)) -> EmotionService: function get_strength_service (line 33) | def get_strength_service(db: Session = Depends(get_db)) -> StrengthService: function get_multi_emotion_voice_by_voice_id (line 39) | def get_multi_emotion_voice_by_voice_id(voice_id: int, multi_emotion_voi... function get_all_multi_emotion_voice (line 54) | def get_all_multi_emotion_voice(multi_emotion_voice_service: MultiEmotio... function create_multi_emotion_voice (line 62) | def create_multi_emotion_voice(dto: MultiEmotionVoiceCreateDTO, multi_em... function update_multi_emotion_voice (line 87) | def update_multi_emotion_voice(multi_emotion_voice_id: int, dto: MultiEm... function delete_multi_emotion_voice (line 101) | def delete_multi_emotion_voice(multi_emotion_voice_id: int, multi_emotio... FILE: SonicVale/app/routers/project_router.py function get_service (line 32) | def get_service(db: Session = Depends(get_db)) -> ProjectService: function get_chapter_service (line 36) | def get_chapter_service(db: Session = Depends(get_db)) -> ChapterService: function get_role_service (line 40) | def get_role_service(db: Session = Depends(get_db)) -> RoleService: function create_project (line 48) | def create_project(dto: ProjectCreateDTO, service: ProjectService = Depe... function get_project (line 76) | def get_project(project_id: int, service: ProjectService = Depends(get_s... function get_all_projects (line 87) | def get_all_projects(service: ProjectService = Depends(get_service)): function update_project (line 97) | def update_project(project_id: int, dto: ProjectCreateDTO, service: Proj... function delete_project (line 115) | def delete_project(project_id: int, service: ProjectService = Depends(ge... function import_project (line 143) | def import_project(project_id: int, dto: ProjectImportDTO,service: Proje... FILE: SonicVale/app/routers/prompt_router.py function get_service (line 19) | def get_service(db: Session = Depends(get_db)) -> PromptService: function create_prompt (line 29) | def create_prompt(dto: PromptCreateDTO, service: PromptService = Depends... function get_prompt (line 57) | def get_prompt(prompt_id: int, service: PromptService = Depends(get_serv... function get_all_prompts (line 68) | def get_all_prompts(service: PromptService = Depends(get_service)): function update_prompt (line 78) | def update_prompt(prompt_id: int, dto: PromptCreateDTO, service: PromptS... function delete_prompt (line 96) | def delete_prompt(prompt_id: int, service: PromptService = Depends(get_s... function get_all_tasks (line 106) | def get_all_tasks(service: PromptService = Depends(get_service)): function get_prompt_by_task (line 112) | def get_prompt_by_task(task: TaskEnum, service: PromptService = Depends(... FILE: SonicVale/app/routers/role_router.py function get_role_service (line 24) | def get_role_service(db: Session = Depends(get_db)) -> RoleService: function get_project_service (line 27) | def get_project_service(db: Session = Depends(get_db)) -> ProjectService: function get_line_service (line 31) | def get_line_service(db: Session = Depends(get_db)) -> LineService: function create_role (line 40) | def create_role(dto: RoleCreateDTO, role_service: RoleService = Depends(... function get_role (line 67) | def get_role(role_id: int, role_service: RoleService = Depends(get_role_... function get_all_roles (line 78) | def get_all_roles(project_id: int, role_service: RoleService = Depends(g... function update_role (line 90) | def update_role(role_id: int, dto: RoleCreateDTO, role_service: RoleServ... function delete_role (line 105) | def delete_role(role_id: int, role_service: RoleService = Depends(get_ro... FILE: SonicVale/app/routers/strength_router.py function get_strength_service (line 20) | def get_strength_service(db: Session = Depends(get_db)) -> StrengthService: function create_strength (line 27) | def create_strength(dto: StrengthCreateDTO, strength_service: StrengthSe... function get_strength (line 50) | def get_strength(strength_id: int, strength_service: StrengthService = D... function get_all_strengths (line 61) | def get_all_strengths(strength_service: StrengthService = Depends(get_st... function update_strength (line 73) | def update_strength(strength_id: int, dto: StrengthCreateDTO, strength_s... function delete_strength (line 88) | def delete_strength(strength_id: int, strength_service: StrengthService ... FILE: SonicVale/app/routers/tts_provider_router.py function get_service (line 18) | def get_service(db: Session = Depends(get_db)) -> TTSProviderService: function get_tts_provider (line 27) | def get_tts_provider(tts_provider_id: int, service: TTSProviderService =... function get_all_tts_providers (line 38) | def get_all_tts_providers(service: TTSProviderService = Depends(get_serv... function update_tts_provider (line 48) | def update_tts_provider(tts_provider_id: int, dto: TTSProviderCreateDTO,... function test_tts_provider (line 65) | def test_tts_provider(dto: TTSProviderCreateDTO, service: TTSProviderSer... FILE: SonicVale/app/routers/voice_router.py function get_voice_service (line 25) | def get_voice_service(db: Session = Depends(get_db)) -> VoiceService: function get_tts_provider_service (line 29) | def get_tts_provider_service(db: Session = Depends(get_db)) -> TTSProvid... function process_voice_audio (line 39) | def process_voice_audio(dto: VoiceAudioProcessDTO, voice_service: VoiceS... function export_voices (line 56) | def export_voices(dto: VoiceExportDTO, voice_service: VoiceService = Dep... function import_voices (line 71) | def import_voices(dto: VoiceImportDTO, voice_service: VoiceService = Dep... function copy_voice (line 94) | def copy_voice(dto: VoiceCopyDTO, voice_service: VoiceService = Depends(... function get_all_voices (line 111) | def get_all_voices(tts_provider_id: int, voice_service: VoiceService = D... function create_voice (line 123) | def create_voice(dto: VoiceCreateDTO, voice_service: VoiceService = Depe... function get_voice (line 154) | def get_voice(voice_id: int, voice_service: VoiceService = Depends(get_v... function update_voice (line 167) | def update_voice(voice_id: int, dto: VoiceCreateDTO, voice_service: Voic... function delete_voice (line 182) | def delete_voice(voice_id: int, voice_service: VoiceService = Depends(ge... FILE: SonicVale/app/services/chapter_service.py class ChapterService (line 32) | class ChapterService: method __init__ (line 34) | def __init__(self, repository: ChapterRepository): method create_chapter (line 38) | def create_chapter(self, entity: ChapterEntity): method get_chapter (line 61) | def get_chapter(self, chapter_id: int) -> ChapterEntity | None: method get_all_chapters (line 70) | def get_all_chapters(self,project_id: int) -> Sequence[ChapterEntity]: method update_chapter (line 81) | def update_chapter(self, chapter_id: int, data:dict) -> bool: method delete_chapter (line 98) | def delete_chapter(self, chapter_id: int) -> bool: method split_text (line 125) | def split_text(self, chapter_id: int, max_length: int = 1500) -> List[... method fill_prompt (line 161) | def fill_prompt(self,template: str, characters: list[str], emotions: l... method para_content (line 170) | def para_content(self, prompt:str,chapter_id: int,content: str = None,... method add_smart_role_and_voice (line 274) | def add_smart_role_and_voice(self,project,content, role_names, voice_n... FILE: SonicVale/app/services/emotion_service.py class EmotionService (line 8) | class EmotionService: method __init__ (line 10) | def __init__(self, repository: EmotionRepository): method create_emotion (line 14) | def create_emotion(self, entity: EmotionEntity): method get_emotion (line 36) | def get_emotion(self, emotion_id: int) -> EmotionEntity | None: method get_all_emotions (line 45) | def get_all_emotions(self) -> Sequence[EmotionEntity]: method update_emotion (line 56) | def update_emotion(self, emotion_id: int, data:dict) -> bool: method delete_emotion (line 66) | def delete_emotion(self, emotion_id: int) -> bool: method get_emotion_by_name (line 72) | def get_emotion_by_name(self, name: str) -> EmotionEntity | None: FILE: SonicVale/app/services/line_service.py function _lock_key (line 35) | def _lock_key(path: str) -> str: class LineService (line 38) | class LineService: method __init__ (line 40) | def __init__(self, repository: LineRepository,role_repository: RoleRep... method create_line (line 48) | def create_line(self, entity: LineEntity): method get_line (line 65) | def get_line(self, line_id: int) -> LineEntity | None: method get_all_lines (line 74) | def get_all_lines(self,chapter_id: int) -> Sequence[LineEntity]: method delete_line (line 85) | def delete_line(self, line_id: int) -> bool: method delete_all_lines (line 96) | def delete_all_lines(self, chapter_id: int) -> bool: method add_new_line (line 107) | def add_new_line(self, line: LineCreateDTO,project_id,chapter_id,index... method update_init_lines (line 128) | def update_init_lines(self, lines: list, project_id: object, chapter_i... method update_line (line 135) | def update_line(self, line_id: int, data: dict) -> bool: method generate_audio (line 145) | def generate_audio(self, reference_path: str,tts_provider_id,content,e... method clear_role_id (line 182) | def clear_role_id(self, role_id: int): method batch_update_line_order (line 188) | def batch_update_line_order(self,line_orders:List[LineOrderDTO]): method update_audio_path (line 193) | def update_audio_path(self, id, dto) -> bool: method process_audio_ffmpeg (line 222) | def process_audio_ffmpeg( method process_audio_ffmpeg_cut (line 293) | def process_audio_ffmpeg_cut( method process_audio (line 500) | def process_audio(self, line_id, dto:LineAudioProcessDTO): method concat_wav_files (line 541) | def concat_wav_files(self,paths, out_path, verify=True, block_frames=2... method export_lines_to_excel (line 576) | def export_lines_to_excel(self,lines, file_path="all_lines.xlsx"): method export_audio (line 602) | def export_audio(self, chapter_id, single=False): method generate_subtitle (line 720) | def generate_subtitle(self, line_id, dto): method correct_subtitle_pinyin (line 731) | def correct_subtitle_pinyin(self, text, output_subtitle_path): method correct_subtitle_llm (line 741) | def correct_subtitle_llm(self, text, output_subtitle_path, llm_provide... FILE: SonicVale/app/services/llm_provider_service.py class LLMProviderService (line 14) | class LLMProviderService: method __init__ (line 16) | def __init__(self, repository: LLMProviderRepository): method create_llm_provider (line 20) | def create_llm_provider(self, entity: LLMProviderEntity): method get_llm_provider (line 41) | def get_llm_provider(self, llm_provider_id: int) -> LLMProviderEntity ... method get_all_llm_providers (line 50) | def get_all_llm_providers(self) -> Sequence[LLMProviderEntity]: method update_llm_provider (line 61) | def update_llm_provider(self, llm_provider_id: int, data:dict) -> bool: method delete_llm_provider (line 72) | def delete_llm_provider(self, llm_provider_id: int) -> bool: method test_llm_provider (line 80) | def test_llm_provider(self, entity: LLMProviderEntity): FILE: SonicVale/app/services/multi_emotion_voice_service.py class MultiEmotionVoiceService (line 8) | class MultiEmotionVoiceService: method __init__ (line 10) | def __init__(self, repository: MultiEmotionVoiceRepository): method create_multi_emotion_voice (line 14) | def create_multi_emotion_voice(self, entity: MultiEmotionVoiceEntity): method get_multi_emotion_voice_by_voice_id_emotion_id_strength_id (line 34) | def get_multi_emotion_voice_by_voice_id_emotion_id_strength_id(self, v... method get_multi_emotion_voice_by_voice_id (line 43) | def get_multi_emotion_voice_by_voice_id(self, voice_id: int) -> list[M... method get_multi_emotion_voice_by_id (line 52) | def get_multi_emotion_voice_by_id(self, multi_emotion_voice_id: int) -... method get_all_multi_emotion_voices (line 60) | def get_all_multi_emotion_voices(self) -> list[MultiEmotionVoiceEntity]: method update_multi_emotion_voice (line 71) | def update_multi_emotion_voice(self, multi_emotion_voice_id: int, data... method delete_multi_emotion_voice (line 80) | def delete_multi_emotion_voice(self, multi_emotion_voice_id: int) -> b... method delete_multi_emotion_voice_by_voice_id (line 87) | def delete_multi_emotion_voice_by_voice_id(self, voice_id: int) -> bool: FILE: SonicVale/app/services/project_service.py class ProjectService (line 13) | class ProjectService: method __init__ (line 15) | def __init__(self, repository: ProjectRepository): method create_project (line 19) | def create_project(self, entity: ProjectEntity): method get_project (line 44) | def get_project(self, project_id: int) -> ProjectEntity | None: method get_all_projects (line 53) | def get_all_projects(self) -> Sequence[ProjectEntity]: method update_project (line 64) | def update_project(self, project_id: int, data:dict) -> bool: method delete_project (line 75) | def delete_project(self, project_id: int) -> bool: method search_projects (line 84) | def search_projects(self, keyword: str) -> Sequence[ProjectEntity]: method parse_content (line 88) | def parse_content(self, content): FILE: SonicVale/app/services/prompt_service.py class PromptService (line 13) | class PromptService: method __init__ (line 15) | def __init__(self, repository: PromptRepository): method validate_prompt_with_DUBBING (line 20) | def validate_prompt_with_DUBBING(self, content: str): method create_default_prompt (line 33) | def create_default_prompt(self): method create_prompt (line 41) | def create_prompt(self, entity: PromptEntity): method get_prompt (line 72) | def get_prompt(self, prompt_id: int) -> PromptEntity | None: method get_all_prompts (line 81) | def get_all_prompts(self) -> Sequence[PromptEntity]: method update_prompt (line 92) | def update_prompt(self, prompt_id: int, data:dict) -> bool: method delete_prompt (line 110) | def delete_prompt(self, prompt_id: int) -> bool: method get_prompt_by_task (line 118) | def get_prompt_by_task(self, task: str) -> Sequence[PromptEntity]: method get_all_tasks (line 127) | def get_all_tasks(self) -> Sequence[str]: method get_prompt_by_name (line 145) | def get_prompt_by_name(self, name: str) -> PromptEntity | None: FILE: SonicVale/app/services/role_service.py class RoleService (line 8) | class RoleService: method __init__ (line 10) | def __init__(self, repository: RoleRepository): method create_role (line 14) | def create_role(self, entity: RoleEntity): method get_role (line 36) | def get_role(self, role_id: int) -> RoleEntity | None: method get_all_roles (line 45) | def get_all_roles(self,project_id: int) -> Sequence[RoleEntity]: method update_role (line 56) | def update_role(self, role_id: int, data:dict) -> bool: method delete_role (line 73) | def delete_role(self, role_id: int) -> bool: FILE: SonicVale/app/services/strength_service.py class StrengthService (line 8) | class StrengthService: method __init__ (line 10) | def __init__(self, repository: StrengthRepository): method create_strength (line 14) | def create_strength(self, entity: StrengthEntity): method get_strength (line 36) | def get_strength(self, strength_id: int) -> StrengthEntity | None: method get_all_strengths (line 45) | def get_all_strengths(self) -> Sequence[StrengthEntity]: method update_strength (line 56) | def update_strength(self, strength_id: int, data:dict) -> bool: method delete_strength (line 67) | def delete_strength(self, strength_id: int) -> bool: method get_strength_by_name (line 73) | def get_strength_by_name(self, name: str) -> StrengthEntity | None: FILE: SonicVale/app/services/tts_provider_service.py class TTSProviderService (line 10) | class TTSProviderService: method __init__ (line 12) | def __init__(self, repository: TTSProviderRepository): method get_all_tts_providers (line 16) | def get_all_tts_providers(self) -> list[TTSProviderEntity]: method get_tts_provider (line 22) | def get_tts_provider(self, tts_provider_id: int) -> TTSProviderEntity ... method update_tts_provider (line 32) | def update_tts_provider(self, tts_provider_id: int, data:dict) -> bool: method delete_tts_provider (line 44) | def delete_tts_provider(self, tts_provider_id: int) -> bool: method create_default_tts_provider (line 50) | def create_default_tts_provider(self): method test_tts_provider (line 59) | def test_tts_provider(self, entity: TTSProviderEntity): FILE: SonicVale/app/services/voice_service.py class VoiceService (line 18) | class VoiceService: method __init__ (line 20) | def __init__(self, repository: VoiceRepository,multi_emotion_voice_rep... method create_voice (line 25) | def create_voice(self, entity: VoiceEntity): method get_voice (line 47) | def get_voice(self, voice_id: int) -> VoiceEntity | None: method get_all_voices (line 56) | def get_all_voices(self,tts_provider_id: int) -> Sequence[VoiceEntity]: method update_voice (line 67) | def update_voice(self, voice_id: int, data:dict) -> bool: method delete_voice (line 84) | def delete_voice(self, voice_id: int) -> bool: method export_voices (line 92) | def export_voices(self, tts_provider_id: int, export_path: str, ids: L... method import_voices (line 142) | def import_voices(self, tts_provider_id: int, zip_path: str, target_di... method process_audio (line 212) | def process_audio(self, dto: VoiceAudioProcessDTO) -> bool: method copy_voice (line 252) | def copy_voice(self, source_voice_id: int, new_name: str, target_dir: ... FILE: sonicvale-front/electron/logger.js function decodeText (line 21) | function decodeText(buffer) { FILE: sonicvale-front/electron/main.js function startBackend (line 14) | function startBackend() { function waitForBackendReady (line 42) | function waitForBackendReady(retries = 60, delay = 500) { function createWindow (line 58) | function createWindow() { function killBackendTree (line 125) | function killBackendTree(child) { function shutdown (line 148) | function shutdown() { FILE: sonicvale-front/electron/preload.js function pathToFileUrl (line 8) | function pathToFileUrl(p) { function getUserHome (line 17) | function getUserHome() { FILE: sonicvale-front/src/api/chapter.js function getChaptersByProject (line 4) | function getChaptersByProject(projectId) { function getChapterDetail (line 8) | function getChapterDetail(chapterId) { function createChapter (line 13) | function createChapter(title, projectId) { function updateChapter (line 21) | function updateChapter(id, payload) { function deleteChapter (line 25) | function deleteChapter(chapterId) { function splitChapterByLLM (line 30) | function splitChapterByLLM(projectId, chapterId) { function exportLLMPrompt (line 39) | function exportLLMPrompt(projectId, chapterId) { function importThirdLines (line 45) | function importThirdLines(projectId, chapterId, formData) { function addSmartRoleAndVoice (line 56) | function addSmartRoleAndVoice(projectId, chapterId) { FILE: sonicvale-front/src/api/enums.js function fetchEmotion (line 6) | function fetchEmotion(id) { function fetchAllEmotions (line 14) | function fetchAllEmotions() { function fetchStrength (line 22) | function fetchStrength(id) { function fetchAllStrengths (line 30) | function fetchAllStrengths() { FILE: sonicvale-front/src/api/line.js function deleteLinesByChapter (line 3) | function deleteLinesByChapter(chapterId) { function getLinesByChapter (line 6) | function getLinesByChapter(chapterId) { function generateAudio (line 9) | function generateAudio(projectId, chapterId, body) { function createLine (line 18) | function createLine(projectId, data) { function updateLine (line 24) | function updateLine(lineId, data) { function deleteLine (line 30) | function deleteLine(lineId) { function reorderLinesByPut (line 35) | async function reorderLinesByPut(orderList) { function updateLineAudioPath (line 45) | function updateLineAudioPath(lineId, data) { function processAudio (line 51) | function processAudio(line_id, payload) { function exportLines (line 57) | function exportLines(chapter_id, single = false) { function correctLinesByPinyin (line 65) | function correctLinesByPinyin(chapter_id) { function correctLinesByLLM (line 70) | function correctLinesByLLM(chapter_id, batch_size = 20) { FILE: sonicvale-front/src/api/multiEmotionVoice.js function fetchMultiEmotionVoicesByVoiceId (line 3) | function fetchMultiEmotionVoicesByVoiceId(voiceId) { function createMultiEmotionVoice (line 7) | function createMultiEmotionVoice(dto) { function deleteMultiEmotionVoice (line 11) | function deleteMultiEmotionVoice(id) { function updateMultiEmotionVoice (line 15) | function updateMultiEmotionVoice(id, dto) { FILE: sonicvale-front/src/api/project.js function fetchProjects (line 6) | function fetchProjects() { function deleteProject (line 33) | function deleteProject(id) { function createProject (line 38) | function createProject(data) { function getProjectDetail (line 42) | function getProjectDetail(projectId) { function updateProject (line 46) | function updateProject(projectId, data) { function importChapters (line 53) | function importChapters(projectId, data) { FILE: sonicvale-front/src/api/prompt.js function createPrompt (line 3) | function createPrompt(data) { function fetchPromptList (line 6) | async function fetchPromptList() { function fetchPromptById (line 13) | async function fetchPromptById(id) { function updatePrompt (line 20) | function updatePrompt(id, data) { function deletePrompt (line 23) | function deletePrompt(id) { function fetchAllTasks (line 27) | function fetchAllTasks() { FILE: sonicvale-front/src/api/provider.js function fetchLLMProviders (line 8) | function fetchLLMProviders() { function createLLMProvider (line 18) | function createLLMProvider(payload) { function updateLLMProvider (line 24) | function updateLLMProvider(id, payload) { function deleteLLMProvider (line 29) | function deleteLLMProvider(id) { function testLLMProvider (line 33) | function testLLMProvider(data) { function fetchTTSProviders (line 43) | function fetchTTSProviders() { function updateTTSProvider (line 55) | function updateTTSProvider(id, payload) { function testTTSProvider (line 61) | function testTTSProvider(data) { FILE: sonicvale-front/src/api/role.js function getRolesByProject (line 3) | function getRolesByProject(projectId) { function updateRole (line 7) | function updateRole(roleId, payload) { function deleteRole (line 12) | function deleteRole(roleId) { function createRole (line 16) | function createRole(payload) { FILE: sonicvale-front/src/api/voice.js function createVoice (line 4) | function createVoice(payload) { function fetchVoice (line 10) | function fetchVoice(id) { function fetchVoicesByTTS (line 18) | function fetchVoicesByTTS(tts_provider_id) { function getVoicesByTTS (line 25) | function getVoicesByTTS(ttsId = 1) { function updateVoice (line 32) | function updateVoice(id, payload) { function deleteVoice (line 37) | function deleteVoice(id) { function exportVoices (line 42) | function exportVoices(tts_provider_id, export_path, voice_ids = null) { function importVoices (line 49) | function importVoices(tts_provider_id, zip_path, target_dir) { function processVoiceAudio (line 58) | function processVoiceAudio(audio_path, params) { function copyVoice (line 71) | function copyVoice(source_voice_id, new_name, target_dir = null) { FILE: sonicvale-front/src/utils/utf8-or-gbk.js function decodeUtf8OrGbk (line 2) | function decodeUtf8OrGbk(arrayBuffer) {