Gap 13: BWF/INFO metadata cho WAV export — wav_bwf.patch_bwf_metadata chen bext + LIST/INFO (INAM/IART/ISRC/ICMT) truoc data chunk, giu nguyen PCM bits; render_project(metadata=) + RenderRequest.metadata + cloud render task; ExportModal Title/Artist/ISRC; test_66 (178 passed)

This commit is contained in:
2026-08-23 09:11:18 +07:00
parent 94a0bc7401
commit 1d4ff1282b
9 changed files with 222 additions and 10 deletions
+3
View File
@@ -616,6 +616,8 @@ class RenderRequest(BaseModel):
normalize: Optional[bool] = False
normalize_target: Optional[str] = "-1dbtp"
mono_check: Optional[bool] = False
# Gap 13: BWF/INFO metadata (title/artist/isrc/comment/description/...)
metadata: Optional[dict] = None
class FxGuiRequest(BaseModel):
@@ -1212,6 +1214,7 @@ def render_project(
dither=bool(req.dither),
normalize=bool(req.normalize),
normalize_target=req.normalize_target or "-1dbtp",
metadata=req.metadata or None,
)
# EBU R128 loudness + true peak (D1) — trả kèm response để mastering
# panel hiển thị LUFS/dBTP ngay sau export mà không cần đọc lại file.
+3 -1
View File
@@ -546,6 +546,7 @@ async def cleanup_all_backups(req: CleanupBackupsRequest, current_user: dict = D
class RenderProjectRequest(BaseModel):
sample_rate: Optional[int] = 44100
metadata: Optional[dict] = None # Gap 13: BWF/INFO metadata (title/artist/isrc/...)
@router.post("/cloud/{project_id}/render")
async def render_project_endpoint(project_id: str, req: RenderProjectRequest, current_user: dict = Depends(get_current_user)):
@@ -568,7 +569,8 @@ async def render_project_endpoint(project_id: str, req: RenderProjectRequest, cu
project_id=project_id,
project_name=row["name"],
project_json_str=row["data_json"],
sample_rate=req.sample_rate or 44100
sample_rate=req.sample_rate or 44100,
metadata=req.metadata or None
)
return {