From e9ddbb586aa7d8bcc52b6ee156c77aaeca03c44f Mon Sep 17 00:00:00 2001 From: dillonj Date: Wed, 8 Apr 2026 01:52:54 -0600 Subject: [PATCH] projects include proper noun stuff --- gui_proper_noun_player.py | 45 +++++++++++++++++++++++++++++++++------ projects.json | 8 +++++-- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/gui_proper_noun_player.py b/gui_proper_noun_player.py index 0743540..714c6c3 100644 --- a/gui_proper_noun_player.py +++ b/gui_proper_noun_player.py @@ -68,6 +68,8 @@ from PySide6.QtGui import * class Project(NamedTuple): name: str source_paths: list[Path] + proper_nouns_output_dir: Path + proper_nouns_audio_dir: Path def _project_slug(name: str) -> str: return re.sub(r"[^a-zA-Z0-9_-]", "_", name).strip("_")[:60].lower() @@ -79,12 +81,29 @@ def load_projects() -> list[Project]: projects = [] for item in data: paths = [Path(p) for p in item["source_paths"]] - projects.append(Project(name=item["name"], source_paths=paths)) + output_dir = Path(item["proper_nouns_output_dir"]) + audio_dir = Path(item["proper_nouns_audio_dir"]) + projects.append( + Project( + name=item["name"], + source_paths=paths, + proper_nouns_output_dir=output_dir, + proper_nouns_audio_dir=audio_dir, + ) + ) return projects return [] def save_projects(projects: list[Project]) -> None: - data = [{"name": p.name, "source_paths": [str(path) for path in p.source_paths]} for p in projects] + data = [ + { + "name": p.name, + "source_paths": [str(path) for path in p.source_paths], + "proper_nouns_output_dir": str(p.proper_nouns_output_dir), + "proper_nouns_audio_dir": str(p.proper_nouns_audio_dir), + } + for p in projects + ] Path("projects.json").write_text(json.dumps(data, indent=2), encoding="utf-8") VOICE = "am_michael" @@ -97,6 +116,8 @@ class BookSource(NamedTuple): slug: str # Filesystem-safe identifier used for subdirectory names source_paths: list # list[Path] — one or more source .txt files fixed_out: Path # Where "Apply Fixes to Text" writes the TTS-ready copy + proper_nouns_output_dir: Path + proper_nouns_audio_dir: Path def _book_slug(text: str) -> str: @@ -111,7 +132,9 @@ def load_books_from_projects() -> list[BookSource]: slug = _project_slug(project.name) fixed_out = Path(f"{project.name} (TTS Fixed).txt") books.append(BookSource(label=project.name, slug=slug, - source_paths=project.source_paths, fixed_out=fixed_out)) + source_paths=project.source_paths, fixed_out=fixed_out, + proper_nouns_output_dir=project.proper_nouns_output_dir, + proper_nouns_audio_dir=project.proper_nouns_audio_dir)) return books # ── Colours ──────────────────────────────────────────────────────────────────── @@ -368,11 +391,11 @@ class ProperNounAuditor(QMainWindow): @property def _data_dir(self) -> Path: - return Path("output_proper_nouns") / self.book.slug + return self.book.proper_nouns_output_dir @property def _audio_dir(self) -> Path: - return Path("proper_nouns_audio") / self.book.slug + return self.book.proper_nouns_audio_dir @property def _manifest_file(self) -> Path: @@ -434,7 +457,9 @@ class ProperNounAuditor(QMainWindow): slug = _project_slug(project.name) fixed_out = Path(f"{project.name} (TTS Fixed).txt") book = BookSource(label=project.name, slug=slug, - source_paths=project.source_paths, fixed_out=fixed_out) + source_paths=project.source_paths, fixed_out=fixed_out, + proper_nouns_output_dir=project.proper_nouns_output_dir, + proper_nouns_audio_dir=project.proper_nouns_audio_dir) self.books = [book] self._load_book(book) @@ -449,7 +474,13 @@ class ProperNounAuditor(QMainWindow): files, _ = QFileDialog.getOpenFileNames(self, "Select TXT files", "", "Text files (*.txt)") if files: paths = [Path(f) for f in files] - project = Project(name=name, source_paths=paths) + slug = _project_slug(name) + project = Project( + name=name, + source_paths=paths, + proper_nouns_output_dir=Path("output_proper_nouns") / slug, + proper_nouns_audio_dir=Path("proper_nouns_audio") / slug, + ) self.projects.append(project) save_projects(self.projects) # Update combobox values diff --git a/projects.json b/projects.json index 3569c99..be20bd8 100644 --- a/projects.json +++ b/projects.json @@ -3,12 +3,16 @@ "name": "Audio Text for Novel Lightbringer", "source_paths": [ "/home/dillon/_code/voice_model/Audio Text for Novel Lightbringer/Audio Text for Novel Lightbringer.txt" - ] + ], + "proper_nouns_output_dir": "output_proper_nouns/audio_text_for_novel_lightbringer", + "proper_nouns_audio_dir": "proper_nouns_audio/audio_text_for_novel_lightbringer" }, { "name": "visions glory canada", "source_paths": [ "/home/dillon/_code/voice_model/Visions of Glory_ Zion in Canada pg 162-193.txt" - ] + ], + "proper_nouns_output_dir": "output_proper_nouns/visions_glory_canada", + "proper_nouns_audio_dir": "proper_nouns_audio/visions_glory_canada" } ] \ No newline at end of file