from audiocraft.models import MusicGen
import torchaudio
# 加载模型
model = MusicGen.get_pretrained('facebook/musicgen-medium')
model.set_generation_params(duration=15) # seconds
# 生成
prompt = "upbeat electronic dance music with heavy bass"
output = model.generate([prompt])
# 保存
audio = output[0].cpu()
torchaudio.save("music.wav", audio, sample_rate=32000)
prompts = [
"relaxing piano jazz",
"epic orchestral cinematic",
"acoustic guitar folk song",
"aggressive heavy metal"
]
outputs = model.generate(prompts)
for i, output in enumerate(outputs):
torchaudio.save(f"music_{i}.wav", output.cpu(), sample_rate=32000)
from audiocraft.models import MusicGen
import torchaudio
# 加载旋律模型
model = MusicGen.get_pretrained('facebook/musicgen-melody')
model.set_generation_params(duration=15)
# 加载参考旋律
melody, sr = torchaudio.load("reference.wav")
melody = melody.unsqueeze(0).cuda()
# 使用旋律生成
output = model.generate_with_chroma(
["jazz piano version"],
melody,
sr
)
torchaudio.save("jazz_version.wav", output[0].cpu(), sample_rate=32000)
from audiocraft.models import AudioGen
# 加载模型
model = AudioGen.get_pretrained('facebook/audiogen-medium')
model.set_generation_params(duration=5)
# 生成声音
prompts = [
"dog barking in the distance",
"rain on a window",
"car engine starting",
"crowd cheering at a concert"
]
outputs = model.generate(prompts)
for i, output in enumerate(outputs):
torchaudio.save(f"sound_{i}.wav", output.cpu(), sample_rate=16000)
from fastapi import FastAPI
from fastapi.responses import FileResponse
from audiocraft.models import MusicGen
import torchaudio
import tempfile
app = FastAPI()
model = MusicGen.get_pretrained('facebook/musicgen-medium')
@app.post("/generate")
async def generate_music(prompt: str, duration: int = 10):
model.set_generation_params(duration=duration)
output = model.generate([prompt])
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
torchaudio.save(f.name, output[0].cpu(), sample_rate=32000)
return FileResponse(f.name, media_type="audio/wav")
@app.post("/generate_with_melody")
async def generate_with_melody(prompt: str, melody_path: str, duration: int = 15):
melody, sr = torchaudio.load(melody_path)
model_melody = MusicGen.get_pretrained('facebook/musicgen-melody')
model_melody.set_generation_params(duration=duration)
output = model_melody.generate_with_chroma([prompt], melody.unsqueeze(0).cuda(), sr)
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
torchaudio.save(f.name, output[0].cpu(), sample_rate=32000)
return FileResponse(f.name, media_type="audio/wav")
# 运行:uvicorn server:app --host 0.0.0.0 --port 8000
# 风格 + 乐器 + 情绪
"upbeat jazz with saxophone and piano, happy and energetic"
# 风格参考
"lo-fi hip hop beat, chill study music, vinyl crackle"
# 电影风格
"epic orchestral trailer music, building tension, dramatic"
# 具体元素
"acoustic guitar strumming pattern, folk song, campfire vibes"