텍스트-음악 변환
보컬과 반주가 포함된 노래를 MP3 파일로 만드는 두 가지 방법. 모든 요청은 두 개의 변형을 생성합니다.
- 생성 — 음악 설명과 가사로 새로운 노래를 만듭니다.
- 커버 — 기존 노래의 멜로디는 유지하고 새로운 스타일로 다시 부릅니다. 가사는 원본(자동 인식) 또는 새 가사를 사용할 수 있습니다.
트리거
- 노래 만들어 줘 / 음악 생성 / 텍스트를 음악으로 / 작곡
- 이 가사로 노래 만들어 줘 / 이걸 불러 줘 / 징글 / 테마송 / 생일 축하 노래
- 이 노래 커버해 줘 / 재즈 버전으로 만들어 줘 / 다른 스타일로 다시 만들어 줘
- 写歌 / 生成音乐 / 作曲 / 唱首歌 / 歌词谱曲 / 翻唱 / 改编 / 换个风格唱
생성 — 텍스트로 새 노래 만들기
요청에는 프롬프트(음악 설명)와 정확히 하나의 가사 출처가 필요합니다:
# 서버가 주제로 가사를 작성하도록 함
python3 skills/text-to-music/scripts/t2m.py "밝은 인디 팝, 경쾌한 기타, 120 BPM" \
--lyrics-prompt "친구들과의 여름 여행에 관한 노래"
# 직접 가사 사용 (인라인 또는 파일에서)
python3 skills/text-to-music/scripts/t2m.py "만돕 발라드, 피아노와 현악기" \
--lyrics $'[Verse]\n창밖에 비가 그쳤어\n[Chorus]\n난 아직 널 기다려' --vocal-gender Female --title "비 그친 후"
python3 skills/text-to-music/scripts/t2m.py "로파이 힙합, 부드러운, LP 잡음" \
--lyrics-file song.txt --duration 120 -o chill.mp3
# 보컬/스타일을 참조 곡에 모델링 (로컬 파일 20MB 이하 또는 공개 URL)
python3 skills/text-to-music/scripts/t2m.py "꿈꾸는 듯한 신스팝" --lyrics-file song.txt --ref-audio ./ref.mp3
출력: song_v1.mp3 및 song_v2.mp3 (또는 -o 사용 시 <stem>_v1.mp3 / <stem>_v2.mp3). 서버가 가사를 작성한 경우 <stem>_lyrics.txt에도 저장됩니다.
| 인자 | 기본값 | 설명 |
|---|---|---|
prompt | 필수 | 음악 설명: 장르, 분위기, 악기, 템포 (최대 1500자) |
--lyrics / -l | — | 가사 텍스트; [Verse], [Chorus], [Bridge] 마커가 구조에 도움 |
--lyrics-file | — | 가사가 포함된 UTF-8 .txt 파일 (최대 64KB) |
--lyrics-prompt | — | 서버 측 가사 작성을 위한 주제 |
--tags | — | 스타일 태그, 쉼표로 구분 (최대 50자) |
--negative-tags | — | 피해야 할 스타일 |
--duration / -d | 자동 | 대상 길이 힌트: 60, 120, 또는 180초. 힌트이며 보장되지 않습니다. |
--ref-audio | — | 참조 곡, 로컬 경로 또는 공개 URL |
--lyrics, --lyrics-file, --lyrics-prompt는 상호 배타적입니다. 하나는 필수입니다.
커버 — 기존 노래 다시 부르기
원본 곡, 가사, 그리고 새로운 사운드에 대한 설명(--style 및/또는 --prompt)이 필요합니다:
# 같은 가사, 새로운 스타일: 원본에서 가사를 인식한 다음 커버
python3 skills/text-to-music/scripts/t2m.py cover original.mp3 \
--style "재즈, 스모키한 여성 보컬" --recognize-lyrics -o jazz_cover.mp3
# 원본 멜로디에 새 가사, 더 자유로운 편곡
python3 skills/text-to-music/scripts/t2m.py cover https://example.com/song.mp3 \
--prompt "어쿠스틱 포크, 핑거픽 기타, 친밀한" --lyrics-file new_lyrics.txt \
--adherence main_melody --vocal-gender Male
# 가사만 인식 (커버 전에 검토하거나 편집하려는 경우)
python3 skills/text-to-music/scripts/t2m.py lyrics original.mp3 -o lyrics.txt
사용자가 가사를 수정하려는 경우 권장 흐름: lyrics 실행 → 파일 편집 → cover --lyrics-file.
| 인자 | 기본값 | 설명 |
|---|---|---|
source | 필수 | 원본 곡: 로컬 파일 (최대 100MB; mp3/wav/m4a/aac/flac/ogg) 또는 공개 URL |
--style / -s | — | 짧은 스타일 태그, 예: "록, 남성 보컬" (최대 50자) |
--prompt / -p | — | 커버 사운드에 대한 긴 설명 (최대 1500자) |
--adherence | high | high = 원본 편곡을 밀접하게 따름; main_melody = 메인 멜로디만 유지, 더 자유로움 |
--lyrics / -l | — | 부를 가사 |
--lyrics-file | — | 가사가 포함된 UTF-8 .txt 파일 (최대 64KB) |
--recognize-lyrics | 꺼짐 | 원본의 가사를 먼저 전사하여 사용 |
--output / -o | cover.mp3 | 출력 경로; 변형에는 _v1 / _v2 접미사가 붙음 |
--style / --prompt 중 하나 이상은 필수입니다. 정확히 하나의 가사 출처가 필요합니다.
공통 인자
| 인자 | 기본값 | 설명 |
|---|---|---|
--title | — | 노래 제목 (최대 80자) |
--vocal-gender | — | Male 또는 Female |
--vocal-timbre | — | 자유 형식 음성 설명, 예: "허스키하고 따뜻한 알토" (최대 50자) |
--output / -o | song.mp3 (커버는 cover.mp3) | 출력 경로; 변형에는 _v1 / _v2 접미사가 붙음 |
--no-wait | 꺼짐 | 제출하고 작업 ID를 출력한 후 종료 |
--poll-interval | 10 | 상태 확인 사이의 간격(초) |
--timeout | 1800 | 최대 대기 시간(초) (작업은 서버에서 계속 실행됨) |
--api-key | 환경/설정에서 | Noiz API 키 (저장된 키를 재정의) |
작업 재개 / 확인
생성은 두 개의 gen_product_id를 출력하고, 커버는 하나의 task_id를 출력합니다. 대기가 시간 초과되거나 --no-wait를 사용한 경우 다음으로 재개하세요:
python3 skills/text-to-music/scripts/t2m.py status <id_v1> <id_v2> -o song.mp3
python3 skills/text-to-music/scripts/t2m.py status --cover <task_id> -o cover.mp3
python3 skills/text-to-music/scripts/t2m.py status --cover <task_id> --no-wait # 상태만 출력
상태는 submitted → running → succeeded / failed 순서입니다. 커버는 또한 stage를 보고합니다 (분석이 노래보다 먼저 실행되므로 커버가 더 오래 걸립니다). 다운로드 URL은 약 24시간 후에 만료됩니다. 새 URL을 받으려면 status를 다시 실행하세요.
좋은 프롬프트 작성법
- 프롬프트 / 스타일 = 사운드: 장르 + 분위기 + 악기 + 템포.
"시네마틱 오케스트라 팝, 웅장한 현악기, 90 BPM, 희망찬". - 가사: 섹션을 짧게 유지하고 레이블을 붙이세요. 중국어, 영어, 혼합 가사 모두 작동합니다.
- 짧은 노래: 징글이나 인사말의 경우
-d 60을 전달하고 절과 후렴만 작성하세요. - 커버:
high를 선택하면 커버를 알아볼 수 있게 유지하고, 더 큰 장르 변경을 원하면main_melody를 선택하세요. - 마음에 들지 않으면 다시 실행하세요 — 각 실행은 두 개의 새로운 변형을 제공합니다.
비용
- 노래 및 커버는 작업당 한 번 청구됩니다(변형당 아님):
ceil(가장 긴 변형 초) × 15크레딧, 두 변형이 모두 성공한 후 청구됩니다. 2분짜리 노래는 약 1,800크레딧입니다. 구독 크레딧이 전체 작업을 충당하지 못하면 종량제로 $0.00015/초로 청구됩니다. 스크립트는 완료 시 청구된 금액을 출력합니다. - 가사 인식(
lyrics/--recognize-lyrics): 100크레딧 (또는 종량제 $0.001), 보컬이 감지된 경우에만 청구됩니다.
속도 제한: 키당 엔드포인트당 분당 5개 제출; 상태 폴링 분당 60회.
제한 사항
- 순수 악기 음악은 지원되지 않습니다 — 가사가 항상 필요합니다.
--duration은 힌트일 뿐입니다. 실제 길이는 다를 수 있습니다. 커버는 원본의 길이를 따릅니다.- 민감한 내용을 포함하는 프롬프트 또는 가사는 거부됩니다(
code=400).
설정
python3 skills/text-to-music/scripts/t2m.py config --set-api-key YOUR_KEY
# 또는
export NOIZ_API_KEY=YOUR_KEY
API 키는 developers.noiz.ai에서 받으세요.
요구 사항
- Python 3.6+
requests패키지:uv pip install requests- Noiz API 키 (developers.noiz.ai에서)
보안 및 데이터 공개
- API 키:
~/.config/noiz/api_key(권한0600) 또는NOIZ_API_KEY환경 변수를 통해 저장됩니다. - 네트워크: 프롬프트, 가사, 모든 참조/원본 오디오(파일 업로드 또는 URL)는
https://noiz.ai/v1/text-to-music및https://noiz.ai/v1/text-to-music/cover*로 전송되며, 작업 상태는 동일한 엔드포인트에서 폴링됩니다. 다른 데이터는 전송되지 않습니다. - 출력: 생성된 MP3(및 가사 텍스트 파일)는 서명된 Noiz 스토리지 URL에서 다운로드되어 출력 경로에 저장됩니다. 다른 파일은 수정되지 않습니다.