본문으로 건너뛰기

HeartMuLa로 녹음을 확인된 가사 시트로 만들기

노래 오디오를 HeartMuLa에 보내고 반복되는 후렴과 확실하지 않은 단어를 확인한 뒤, 요청 예산을 세우고 확인된 가사를 자막으로 동기화하는 방법입니다.

작성자
Lydia
발행
읽는 시간
약 7분
수정
헤드폰을 쓴 여성과 어쿠스틱 기타를 든 남자가 따뜻한 나무 스튜디오에서 노을을 맞으며 마이크를 사이에 두고 마주 앉아 있다

HeartMuLa Transcribe는 노래 녹음을 요청당 $0.05의 텍스트 초안으로 바꿉니다. 트랙이 스무 초든 육 분이든 상관없습니다. 오디오 URL을 직접 보내고 data.output.text에서 가사를 읽은 뒤, 같은 녹음과 대조해 반복되는 구간과 확실하지 않은 단어를 확인하세요. 이 작업은 줄별 시간, 가수 표시, 신뢰도 점수를 반환하지 않습니다. 그래서 확인된 가사 시트와 동기화된 자막 파일은 서로 다른 두 가지 작업입니다.

작업이 받는 것과 돌려주는 것

HeartMuLa Transcribe 페이지에는 입력란이 하나뿐이며, audio_url로 90 MB 이하의 MP3 또는 WAV를 받습니다. 프롬프트, 모델 크기, 타임스탬프 필드가 없고 언어 설정도 없습니다. 모델이 오디오에서 언어를 알아내므로 다른 언어의 가사도 똑같이 동작합니다. 음악 위의 보컬용으로 만들어졌습니다. 인터뷰나 팟캐스트라면 Grok STT 같은 범용 음성 모델이 더 맞습니다. 검열 없는 모델로, 명시적인 가사는 부른 그대로 돌아오고 마스킹이나 거부가 없습니다. 오디오 권리에 대한 책임은 여전히 사용자에게 있습니다.

HeartMuLa의 오픈 가사 인식기 HeartTranscriptor는 Whisper를 기반으로 하며 분리된 보컬 트랙으로 학습되었습니다. 저자들은 먼저 보컬을 분리하라고 권장합니다. 호스팅된 요청에는 분리 스위치가 없습니다. 반주가 짙게 섞인 녹음이라면 Demucs 같은 분리 도구를 직접 실행하고 보컬 트랙을 두 번째 요청으로 보낼 수 있습니다. 그 트랙은 실험으로 취급하세요. 분리 때문에 바뀐 단어는 원래 믹스와 비교해야 합니다. 분리는 아티팩트를 만들 수 있고, 스튜디오 보컬로 다른 연주의 단어를 확정할 수는 없기 때문입니다. 속삭이거나 소리치는 보컬, 비트레이트가 아주 낮은 파일은 결과가 더 나빠집니다. 가장 좋은 품질의 MP3나 WAV를 보내세요.

먼저 Playground에서 해보기

HeartMuLa Transcribe 페이지를 열고 Playground 탭에 그대로 머무르세요.

  1. Input audio에서 Choose a file을 누릅니다(MP3 또는 WAV, 최대 90 MB). 다른 곳에 호스팅된 파일이면 Asset URL로 바꾸고 Add URL을 누릅니다. 이 필드가 전부입니다.
  2. 가격 예상치를 확인합니다. 길이와 상관없이 $0.05입니다.
  3. 로그인하고 실행합니다. 가사 텍스트는 Output 패널에 나타나고, 미리보기 옆에 JSON 뷰가 함께 보입니다.

URL은 플레이어, 공유 페이지, 로그인 페이지가 아니라 오디오 파일 자체를 반환해야 합니다. 그렇지 않으면 작업이 잘못된 에셋으로 실패합니다. 제출한 것과 정확히 같은 버전을 직접 보관하세요. 그래야 전사가 그 연주와 연결된 채로 남습니다. 일괄 처리로 넘기기 전에 여기서 가장 까다로운 트랙을 먼저 해보세요.

또는 코드로 호출하기

파이썬 SDK를 설치하고(pip install spicyapi, Python 3.11+), SPICY_API_KEY를 서버 측 키로 설정한 뒤 실행합니다:

python
from pathlib import Path
import uuid

from spicyapi import SpicyClient

client = SpicyClient()  # reads SPICY_API_KEY from the environment

song = client.upload_file("./authorized-original-song.wav")  # uploads are kept for one day
task = client.create_task(
    model="heartmula/transcribe/speech-to-text",
    input_data={"audio_url": song["uri"]},
    idempotency_key=str(uuid.uuid4()),  # new key per new request; reuse only to retry the same one
)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
    raise RuntimeError(f"Task {task['taskId']} ended as {final['state']}")

# The lyrics are text on the task, not a file; save them now, task content is not permanent
Path("lyrics-draft.txt").write_text(final["output"]["text"])

업로드, 대기, 오류, 재시도는 파이썬 SDK 레퍼런스에 있고, 작업 가이드는 작업의 수명 주기와 콜백을 다룹니다. 연주곡 트랙은 거의 아무것도 반환하지 않지만 그럼에도 성공한 실행으로 과금됩니다. 그래서 일괄 처리로 넘기기 전에 보컬이 없는 트랙은 걸러내세요. 완료된 작업이 증명하는 것은 완료 여부이지 정확도가 아닙니다.

또는 Agent에게 맡기기

어시스턴트가 노래 폴더를 대신 전사하게 하려면 CLI나 MCP 서버를 주면 됩니다. 둘 다 가격을 보여주고 유료 호출 전에 확인을 요청합니다. Skill을 사용하면 여기에 지침이 더해집니다.

  • CLI. spicyapi는 터미널에서 작업 하나를 실행합니다(npx @spicyapi/cli로 설치 없이도 동작합니다):

``bash spicyapi files upload ./song.wav # prints a spicy:// URI spicyapi tasks create --model heartmula/transcribe/speech-to-text \ --input-json '{"audio_url": "spicy://YOUR-UPLOAD-URI"}' --wait ``

  • MCP 서버. 어시스턴트에 MCP 서버를 추가한 뒤 이렇게 물어보세요: "./song.wav의 가사를 HeartMuLa Transcribe로 전사해 줘." spicyapi_upload_file을 호출하고, 이어서 spicyapi_task_create(가격 확인을 위해 멈춥니다)를 호출한 뒤 spicyapi_task_wait을 호출합니다.

``json { "mcpServers": { "spicyapi": { "command": "npx", "args": ["--yes", "--package=@spicyapi/mcp", "spicyapi-mcp"], "env": { "SPICY_API_KEY": "YOUR_SPICY_API_KEY" } } } } ``

  • Skill. npx skills add spicyapi-ai/spicy-skill은 Agent Skill을 설치합니다. 코딩 어시스턴트에 현재 스키마를 읽고 멱등성 키를 재사용하는 법을 가르칩니다. 그 자체로는 작업을 실행하지 못하므로 CLI나 MCP와 함께 쓰세요.

문장부호보다 전체 구성을 먼저 확인하기

소스를 한 번 재생하고 구조를 적어 두세요: 절(벌스), 후렴, 브리지, 아웃트로. 그 순서를 초안과 맞춰 보세요. 매끄러운 전사는 두 개의 후렴을 하나로 합쳐 버릴 수 있고, 문장부호를 정리해도 빠진 연주는 되돌아오지 않습니다. Whisper 계열 모델은 한 줄을 반복하거나, 짧은 구간을 누락하거나, 긴 "oooh"나 흥얼거림 위에 단어를 만들어 낼 수도 있으니 텍스트가 되풀이되거나 이상하리만큼 확신해 보이는 곳은 반드시 다시 들어보세요.

반복되는 단어를 자동으로 지우지 마세요. 노래로 부른 에코일 수도, 반복되는 주제구일 수도, 인식 오류일 수도 있습니다. 그 자리를 다시 재생하고 판단하세요. 편집자의 수정이 모델 탓으로 옮겨붙지 않도록 손대지 않은 초안을 보관하세요.

반복은 부른 그대로 두세요. 첫 후렴이 "Leave the lamp beside the window"를 부르고 마지막 후렴이 "Leave the lamp beneath the window"를 부르는 가상의 노래를 생각해 보세요. 둘 다 멜로디에 맞습니다. 전사는 실제로 부른 변경을 그대로 남겨야 하며, 첫 후렴을 두 번째 후렴에 덮어쓰면 안 됩니다.

뜻을 뒤집는 단어 확정하기

부정, 이름, 숫자, 그리고 한 줄을 뒤집는 짧은 단어를 우선하세요. "Do not close the garden gate"와 "Do close the garden gate"는 모두 그럴듯하게 읽히면서 정반대를 뜻합니다. 양쪽에 몇 초씩 문맥을 두고 다시 재생하세요. 자음 하나만 떼어 내면 온전한 구절보다 듣기 어렵습니다.

오디오가 여전히 애매하면 부른 사람에게 물어보거나 비공개로 불확실성 메모를 남기세요. 반복된 전사들 사이에서 다수결로 의견이 갈리는 단어를 확정하지는 마세요. 똑같은 추측은 독립적인 근거가 아닙니다. 여러 겹의 보컬이라면 가사 시트가 리드만 담는지, 들리는 모든 반주 라인을 담는지 정하고, 역할 표시는 직접 들어본 내용이나 제작 노트에서만 붙이세요.

단어를 확인한 뒤에 자막 넣기

이 작업은 타임스탬프를 반환하지 않습니다. 최종 오디오나 영상 편집을 자막 편집기에서 열고, 부른 구절마다 큐를 하나씩 넣고, 그 연주를 기준으로 시작과 종료 시각을 정하세요. 첫 보컬 진입, 반복되는 각 후렴, 마지막 줄을 확인하세요. 길이에 맞춰 고르게 줄을 나눠 놓는 방법은 실패합니다. 연주 사이 쉼과 길게 늘인 모음이 고르지 않기 때문입니다.

오디오를 고친 뒤에는 재정렬하세요. 원문 언어의 텍스트는 번역과 따로 두세요. 이 작업에는 번역 필드가 없고, 부를 수 있는 번안은 말과 박자를 모두 바꾸기 때문입니다.

녹음 단위로 예산 잡기

비용은 요청 수에 $0.05를 곱한 값입니다. 보컬 편곡 두 개는 $0.10이고, 각각에 보컬 트랙 요청을 더하면 $0.20이 되며, 스물넷 곡 녹음은 재시도 전까지 $1.20입니다. 길이는 가격에 전혀 반영되지 않으므로 짧은 클립이 잔뜩 든 폴더는 분당으로 환산하면 상대적으로 비쌉니다. 요청당 노래 하나만 보내세요. 여러 노래를 한 파일에 이어 붙이면 경계 없는 하나의 텍스트 덩어리로 돌아오고, 경계를 복원할 시간 정보도 없습니다.

문제다음 단계
URL이 HTML을 반환하거나 로그인을 요구함직접 오디오 URL로 바꾸거나 파일을 업로드하세요
마지막 후렴이 빠져 있음그 구간을 다시 듣고, 보컬 트랙을 두 번째 요청으로 시도하세요
자음 하나가 확실하지 않음문맥 속에서 다시 들거나 부른 사람에게 물어보세요
텍스트는 맞는데 자막이 어긋남최종 편집본을 기준으로 재정렬하세요. 전사를 다시 해도 타임스탬프는 나오지 않습니다

다른 언어 English · 日本語 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

직접 해 보기

실행한 만큼만 결제하세요. 요금제도, 구독도 없습니다.

사용 모델: MiniMax H3 · ByteDance Seedance 2.0 Fast