Skip to main content
가사 싱크는 가사 텍스트를 오디오에 맞춰 정렬하여, 단어가 정확한 순간에 하이라이트되도록 합니다. 가사가 업데이트되었거나, 다른 모델을 사용하거나, 새 언어로 실행해야 하는 경우 client.projects.syncLyrics(...)를 사용해 어떤 프로젝트든 싱크를 다시 실행할 수 있습니다.

client.projects.syncLyrics(projectId, body, options?)

새 가사 싱크 작업을 시작합니다.
const operation = await client.projects.syncLyrics("prj_abc123", {
  lyricsSource: {
    type: "align",
    lyrics: "First line\nSecond line\n...",
    syncModel: "audioshake-alignment",
  },
});

const { project } = await client.projects.wait(operation);
console.log(project.alignments);

Lyrics source

요청 본문에 lyricsSource 객체를 전달하세요:
모델이 오디오에서 가사를 전사하도록 합니다.
{
  lyricsSource: {
    type: "transcribe",
    syncModel: "audioshake-transcription",
    language: "en",
  },
}

Sync models

정렬 모델 (정확한 가사가 있을 때 align와 함께 사용):
  • audioshake-alignment
  • musicai-alignment
  • musicai-alignment-subword
전사 모델 (transcribe와 함께 사용):
  • audioshake-transcription
  • musicai-transcription
  • wav2vec2
  • whisper
자세한 안내는 Sync model reference를 참고하세요.

End-to-end example

import { YoukaClient } from "@youka/sdk";
import { readFile } from "node:fs/promises";

const client = new YoukaClient({ apiKey: process.env.YOUKA_API_KEY! });

async function reAlignLyrics(projectId: string) {
  const lyrics = await readFile("./lyrics.txt", "utf8");

  const operation = await client.projects.syncLyrics(projectId, {
    lyricsSource: {
      type: "align",
      lyrics,
      syncModel: "audioshake-alignment",
      language: "en",
    },
  });

  const { project } = await client.projects.wait(operation);
  console.log("Updated lyrics with", project.lyrics?.length, "lines");
}

What’s next

  • Stems — 재동기화 전에 스템 분리를 다시 실행
  • Tasks — 작업 핸들과 중단(abort) 패턴
  • Sync model reference — 올바른 모델 선택