| from wrapper.chunk_loader import load_chunks, save_chunks |
| from wrapper.chunk_search import search_chunks |
| from wrapper.chunk_editor import update_chunk |
| from wrapper.chunk_player import play_chunk_audio |
| from wrapper.chunk_synthesizer import synthesize_chunk |
| from wrapper.chunk_revisions import accept_revision |
| import os |
| from config.config import AUDIOBOOK_ROOT |
| AUDIO_DIR = AUDIOBOOK_ROO |
|
|
| CHUNK_PATH = "Text_Input/my_book_chunks.json" |
|
|
|
|
| def run_chunk_repair_tool(): |
| print("\n๐ ๏ธ Chunk Repair & Revision Tool") |
| chunks = load_chunks(CHUNK_PATH) |
|
|
| while True: |
| query = input("\nSearch for text fragment (or 'Q' to quit): ").strip() |
| if query.lower() == "q": |
| print("Exiting revision tool.") |
| break |
|
|
| results = search_chunks(chunks, query) |
| if not results: |
| print("โ No matching chunks found.") |
| continue |
|
|
| print(f"\n๐ Found {len(results)} match(es):") |
| for i, chunk in enumerate(results): |
| print(f"[{i}] \"{chunk['text'][:60]}...\" | Index: {chunk['index']}") |
|
|
| sel = input("Select chunk index to revise: ").strip() |
| if not sel.isdigit() or int(sel) >= len(results): |
| print("Invalid selection.") |
| continue |
|
|
| chunk = results[int(sel)] |
| index = chunk['index'] |
| chunk_path = os.path.join(AUDIO_DIR, f"chunk_{index:03}.wav") |
|
|
| while True: |
| print(f"\n๐ Chunk: \"{chunk['text']}\"") |
| print(f" Boundary: {chunk['boundary_type']}, Sentiment: {chunk.get('sentiment_score', 'N/A')}, Pause: {chunk.get('pause_duration', 'N/A')}") |
| print("\nOptions:") |
| print(" 1. Play original") |
| print(" 2. Edit values") |
| print(" 3. Resynthesize") |
| print(" 4. Play revised") |
| print(" 5. Accept revision") |
| print(" 6. Back to search") |
|
|
| choice = input("Enter option number: ").strip() |
| if choice == "1": |
| play_chunk_audio(chunk_path) |
| elif choice == "2": |
| boundary = input("New boundary type (or Enter to skip): ").strip() |
| sentiment = input("New sentiment score (or Enter to skip): ").strip() |
| pause = input("New pause duration (or Enter to skip): ").strip() |
|
|
| update_chunk( |
| chunk, |
| boundary_type=boundary if boundary else None, |
| sentiment_score=float(sentiment) if sentiment else None, |
| pause_duration=float(pause) if pause else None |
| ) |
| save_chunks(CHUNK_PATH, chunks) |
| elif choice == "3": |
| synthesize_chunk(chunk, index, revision=True) |
| elif choice == "4": |
| rev_path = os.path.join(AUDIO_DIR, f"chunk_{index:03}_rev.wav") |
| play_chunk_audio(rev_path) |
| elif choice == "5": |
| accept_revision(index) |
| break |
| elif choice == "6": |
| break |
| else: |
| print("Invalid input. Try again.") |
|
|