
Hugging Face는 AI 기반 오픈소스 커뮤니티이다.Hugging Face의 무료 오픈 소스 중 하나인MusicGen API를 사용하여 텍스트로 음악을 생성하는 방법에 대해 알아보자.
📌 Hugging Face MusicGen API 샘플 코드
=> 이 중 Text Conditional Generation 방식 코드를 참고하여 작성하였다.

from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy.io.wavfile as wav
from google.colab import files
# Musicgen 모델과 프로세서 불러오기
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
# 텍스트 프롬프트 입력
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
)
# 모델을 사용해 텍스트에 해당하는 음악 생성
audio_values = model.generate(
**inputs,
do_sample=True, # 샘플링을 사용하여 다양한 결과 생성
guidance_scale=3, # 텍스트와 음악의 일치를 향상시킬 가이드라인
max_new_tokens=256 # 최대 생성 토큰 수
)
# 생성된 음악을 WAV 파일로 저장
sampling_rate = model.config.audio_encoder.sampling_rate
wav.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy())
files.download('/content/musicgen_out.wav')
print("생성된 음악이 'musicgen_out.wav'로 저장되었습니다.")
👇👇 자세한 설명은 아래에서 확인할 수 있다.
먼저, Hugging Face에서 제공하는
facebook/musicgen-small
모델과 프로세서를 불러온다.
이 때 프로세서는 텍스트 프롬프트를 모델이 이해할 수 있는 형식으로 변환하는 역할을 한다.
from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy.io.wavfile as wav
from google.colab import files
# Musicgen 모델과 프로세서 불러오기
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
from transformers import AutoProcessor, MusicgenForConditionalGeneration
Hugging Face의 transformers 라이브러리에서 AutoProcessor와 MusicgenForConditionalGeneration 클래스를 불러오는 역할, 즉 음악 생성을 담당
import scipy.io.wavfile as wav
생성된 음악 데이터를 WAV 형식으로 저장하는 데 사용
from google.colab import files
생성된 WAV 파일을 사용자의 로컬 시스템으로 다운로드하는 데 사용
생성하려는 음악의 스타일을 정의하는 텍스트를
text인자에 넣는다. (어떤 음악을 생성하고 싶은지~)
아래의 예시에서는"80s pop track with bassy drums and synth"80년대 팝 스타일의 음악과"90s rock song with loud guitars and heavy drums"는 90년대 록 스타일을 음악을 입력해주었다.
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
)
model.generate() 메서드를 사용해 텍스트 프롬프트에 맞는 음악을 생성한다.
audio_values = model.generate(
**inputs,
do_sample=True, # 샘플링을 사용하여 다양한 결과 생성
guidance_scale=3, # 텍스트와 음악의 일치를 향상시킬 가이드라인
max_new_tokens=256 # 최대 생성 토큰 수
)
do_sample: 샘플링 여부(음악의 다양성)를 결정한다.
True로 설정하면, 같은 입력에 대해서도 매번 다른 출력을 생성
False로 설정하면, 같은 입력에 대해 항상 동일한 출력을 생성
guidance_scale: 텍스트 프롬프트와 생성된 음악의 일치도를 조절하는 가이드라인의 강도를 설정한다.
값이 클수록 텍스트 프롬프트에 더 충실한 음악을 생성
값이 작을수록 창의적인 변형을 허용
max_new_tokens: 생성할 최대 토큰 수를 지정한다.
생성되는 음악의 길이를 결정
생성된 음악을 WAV 파일로 저장한다.
sampling_rate는 생성된 음악의 샘플링 주파수를 의미한다.
마지막으로 Google Colab 환경에서 로컬로 파일을 다운로드할 수 있도록files.download()를 작성한다.
sampling_rate = model.config.audio_encoder.sampling_rate
wav.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy())
files.download('/content/musicgen_out.wav')
print("생성된 음악이 'musicgen_out.wav'로 저장되었습니다.")
코드를 돌려보면 내가 설정한 출력파일 이름으로(musicgen_out.wav) 프롬프트가 적용된 음악이 생성된 것을 확인할 수 있다.

ai 연동개발은 이후 확실히 잘 알아야 되는 부분이긴 해요!!
ps : 그래도 자프링 코프링 버리면안되요 ㅠ_ㅠ 하연쓰 님의 메인 무기는 자프링코프링!! 아자아자!!