2025-09-11 18:07:45 +09:00

139 lines
4.4 KiB
Python

from lib.singleton import Singleton
class AppStatus(Singleton):
"""アプリケーションの状態を管理するシングルトンクラス"""
def __init__(self):
if hasattr(self, '_initialized') and self._initialized:
return # すでに初期化済みなら何もしない
self.status = {}
self._initialized = True
def reset(self):
"""状態をリセット"""
self.status.clear()
def set_status(self, key, value):
self.status[key] = value
def get_status(self, key, default=None):
return self.status.get(key, default)
@property
def input_filepath(self)-> str:
"""入力音声ファイルのパス"""
return self.get_status('input_filepath')
@input_filepath.setter
def input_filepath(self, value:str):
"""入力音声ファイルのパス"""
self.set_status('input_filepath', value)
@property
def request_id(self) -> str:
"""リクエストID"""
return self.get_status('request_id')
@request_id.setter
def request_id(self, value: str):
"""リクエストID"""
self.set_status('request_id', value)
@property
def output_base_dir(self)-> str:
"""出力ディレクトリのベースパス"""
return self.get_status('output_base_dir', default='.output')
@output_base_dir.setter
def output_base_dir(self, value:str):
"""出力ディレクトリのベースパス"""
self.set_status('output_base_dir', value)
@property
def output_dir(self)-> str:
"""出力ディレクトリのパス"""
output_dir = f"{self.output_base_dir}/{self.request_id}"
return output_dir
@property
def source_dir(self)-> str:
"""ソースディレクトリのパス"""
source_dir = f"{self.output_base_dir}/{self.request_id}/source"
return source_dir
@property
def preprocess_dir(self)-> str:
"""前処理ディレクトリのパス"""
preprocess_dir = f"{self.output_base_dir}/{self.request_id}/preprocess"
return preprocess_dir
@property
def preprocess_index(self)-> int:
"""前処理のインデックス"""
return self.get_status('preprocess_index', default=0)
@preprocess_index.setter
def preprocess_index(self, value:int):
"""前処理のインデックス"""
self.set_status('preprocess_index', value)
if value == 0:
self.set_status('preprocess_inputfile', self.unified_file)
@property
def preprocess_inputfile(self)-> str:
"""前処理の入力ファイルのパス"""
return self.get_status('preprocess_inputfile')
@preprocess_inputfile.setter
def preprocess_inputfile(self, value:str):
"""前処理の入力ファイルのパス"""
self.set_status('preprocess_inputfile', value)
@property
def preprocess_outputfile(self)-> str:
"""前処理の出力ファイルのパス"""
index = self.preprocess_index
filename = f"preprocess_{index:02d}.wav"
output_file = f"{self.preprocess_dir}/{filename}"
return output_file
@property
def chunk_dir(self)-> str:
"""チャンクディレクトリのパス"""
chunk_dir = f"{self.output_base_dir}/{self.request_id}/chunk"
return chunk_dir
@property
def chunk_manifest(self)-> str:
"""チャンクマニフェストのパス"""
return f"{self.chunk_dir}/chunks.manifest.json"
@property
def transcript_dir(self)-> str:
"""文字起こし結果ディレクトリのパス"""
transcript_dir = f"{self.output_base_dir}/{self.request_id}/transcripts"
return transcript_dir
@property
def source_file(self)-> str:
"""ソースファイルのパス"""
return self.get_status('source_file')
@source_file.setter
def source_file(self, value:str):
"""ソースファイルのパス"""
self.set_status('source_file', value)
@property
def unified_file(self)-> str:
"""統一ファイルのパス"""
return f"{self.output_dir}/unified.wav"
@property
def diarization_file(self)-> str:
"""話者分離のJSONファイルのパス"""
return f"{self.output_dir}/diarization.json"