ACE-Step 1.5 連続曲生成システム完全ガイド

目次
この記事はClaudeCodeにまとめさせた記事になります。当方の環境に最適化した処理となっていますので、環境依存の問題などそのまま参考にはならないかもしれませんが、一応書いてみるという話です。
当方の今までの記事の中で実装してきた内容がさも当たり前のように書いてありますので、気になる方は過去の記事をお読みください。特に大前提としてClaudeCodeの利用が根底にありますのでご注意ください。読んでみたら好きなことを書いていますが、基本書きっぱなしなので悪しからず。
ちなみにAMD Radeon 780M(共有VRAM 32GB)を実現しようと思うと、それなりの機種(とは言ってもミニPCの中で)でそれなりのメモリを積まないといけません。場合によってはLLMをCPU側に振るか、クラウドAPIを使うと良いと思います。
今確認したところ歌詞に関しては処理を指示した際にClaudeCodeが歌詞も作っているようだが、ここら辺は設定次第のような気がする。
概要
この記事では、MINIPC内蔵GPUを使用してACE-Step 1.5で連続的に楽曲を生成し、自動マスタリングまで行うシステムの構築方法を解説します。外部GPUを使わず、APIベースで複数の曲を自動生成できる環境を実現しています。
歌詞の作成はClaude CodeまたはAIアシスタントが担当し、楽曲生成とマスタリングは完全自動化されています。人間とAIの役割分担により、高品質な楽曲を効率的に量産できます。
役割分担
このシステムでは、人間(Claude Code)とコンピュータが明確に役割分担しています。
Claude Codeが担当:
歌詞の全文作成(Intro、Verse、Chorus、Bridge等)
セクションタグの付与([Intro]、[Chorus - HOOK 30s]等)
テーマからの具体的なシチュエーション展開
ジャンルとBPMに適した歌詞スタイルの設計
日本語フレーズの自然な統合(必要に応じて)
コンピュータが担当(自動処理):
ACE-Step 1.5による楽曲生成(歌詞をもとに音楽を生成)
48kHz/24bit WAVへの変換
AI Masteringによる自動音質調整(EQ、ダイナミクス、LUFS正規化)
スプレッドシートへのステータス更新
生成ファイルの保存と管理
この分担により、創作的な部分(歌詞)は人間が品質を保証し、機械的な処理(楽曲生成、マスタリング)は自動化されます。
システムの特徴
このシステムの特徴は以下の通りです。
内蔵GPU活用: MINIPC搭載のAMD Radeon 780M(共有VRAM 32GB)で動作します。外部GPUは不要で、コンパクトな環境で楽曲生成が可能です。
API連続処理: ACE-Step 1.5をAPIサーバーとして起動し、バッチ処理スクリプトが自動的に複数の曲を順次生成します。人間の介入なしに10曲、20曲と連続生成できます。
自動マスタリング: 生成された楽曲は自動的に48kHz/24bit WAVに変換され、AI Masteringによって音質調整されます。LUFSノーマライゼーション、EQ、ダイナミクス処理まで自動化されています。
事前設計による連続生成: Claude CodeまたはAIアシスタントが事前に歌詞やプロンプトを設計し、Googleスプレッドシートに登録します。スプレッドシートに登録された実験データを元に、自動的に連続生成が行われます。
実行環境
実際に動作している環境のスペックを以下に示します。
ハードウェア
CPU: 8コア以上推奨(AMD Ryzen 7000シリーズまたは同等)
統合GPU: AMD Radeon 780M(RDNA 3アーキテクチャ、共有VRAM 32GB)
VRAMは共有メモリから確保されます
ACE-Step Turboモデルで約4-6GB使用
ACE-Step Baseモデルで約8-10GB使用
メモリ(RAM): 32GB以上推奨(LLMサーバーなしの場合は16GBでも可)
システム: 8GB
LLMサーバー(Qwen3-30B、将来の拡張用): 約18GB(現在はオプション)
ACE-Step実行時: 4-10GB
その他(OS、バッファ): 2-4GB
注: 現在の実装ではLLMサーバーを使用しないため、16GB RAMでも動作可能です。将来的にLLM自動生成を実装する場合は32GB推奨です。
ストレージ: SSD 256GB以上推奨(LLMサーバーなしの場合)、500GB推奨(LLMサーバーありの場合)
ACE-Stepモデル: 約20GB
LLMモデル(将来の拡張用、オプション): 約20GB
生成曲保存用: 数百GB(1曲あたり40-50MB)
ソフトウェア
OS: Ubuntu 24.04 LTS(Linuxであれば他のディストリビューションでも可)
GPU環境: ROCm 6.2以降(AMDの場合)、CUDA 12.x以降(NVIDIAの場合)
Python: 3.10以上
必須Pythonパッケージ:
torch(ROCmまたはCUDA対応版)
torchaudio
ACE-Step 1.5(公式リポジトリから)
gspread(Googleスプレッドシート連携用)
oauth2client
librosa
soundfile
scipy
numpy
LLMサーバー(将来の拡張用、現在はオプション):
llama.cpp(Qwen3-30B用)
Vulkanバックエンド(AMD統合GPU対応)
注: 現在の実装では歌詞生成には使用していません
システム構成図
システム全体の構成を説明します。
コンポーネント構成
Googleスプレッドシート: 実験管理データベースとして機能します。各行に実験番号、BPM、キー、歌詞、ジャンル、ステータスなどを記録します。
バッチ処理スクリプト(run_1pass_hq_mastered.py): スプレッドシートを監視し、ステータスが「pending」の実験を自動処理します。
ACE-Step API Server(ポート8002): AMD 780M上でACE-Step 1.5 Turboモデルを実行します。HTTPリクエストを受け取り、楽曲を生成して返します。
LLMサーバー(ポート8081、将来の拡張用): Qwen3-30Bモデルが起動可能ですが、現在の実装では歌詞生成には使用していません。将来的に自動バリエーション生成に利用可能です。
AI Masteringエンジン: 生成された楽曲を自動的にマスタリングします。スペクトル解析、EQ、コンプレッション、LUFSノーマライゼーションを実行します。
データフロー
実験データ作成の段階(Claude Codeが担当): Claude CodeまたはAIアシスタントが、テーマやジャンルから具体的な歌詞を事前に作成します。歌詞は辞書形式で定義され、Pythonスクリプト内に記述されます。スクリプトを実行すると、歌詞、BPM、キー、ジャンルなどの実験データがGoogleスプレッドシートに保存され、ステータスは「pending」に設定されます。
バッチ処理の開始段階: run_1pass_hq_mastered.pyがスプレッドシートをスキャンし、「pending」ステータスの実験を検出します。
楽曲生成の段階: バッチスクリプトが実験データ(歌詞、BPM、キー、ジャンル)を読み取り、ACE-Step APIサーバー(ポート8002)にPOSTリクエストを送信します。ACE-Stepが楽曲を生成し、WAVファイルとして返します。
後処理の段階: 生成されたWAVファイルを48kHz/24bitに変換し、AI Masteringエンジンが自動的にマスタリング処理を適用します。最終的なマスタリング済みWAVファイルが保存され、スプレッドシートのステータスが「完了」に更新されます。
セットアップ手順
実際にシステムをセットアップする手順を示します。
ステップ1: ROCmとPyTorchのインストール
AMD統合GPUでACE-Stepを動作させるには、ROCmとPyTorch ROCm版が必要です。
# ROCm 6.2のインストール(Ubuntu 24.04)
sudo apt update
sudo apt install rocm-hip-sdk rocm-libs
# PyTorch ROCm版のインストール
pip install torch torchaudio --index-url https://download.pytorch.org/whl/rocm6.2NVIDIAの場合はCUDA版をインストールします。
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121ステップ2: ACE-Step 1.5のインストール
ACE-Step 1.5の公式リポジトリをクローンし、依存関係をインストールします。
git clone https://github.com/ace-step/ACE-Step-1.5.git
cd ACE-Step-1.5
pip install -r requirements.txt
pip install -e .AMD 780M用の互換性対応として、一部のライブラリを削除します。torchaoとflash-attnはROCmで非対応のため、requirements.txtから除外します。
ステップ3: ACE-Step APIサーバーの起動
ACE-Step 1.5をAPIサーバーモードで起動します。
# AMD 780M Turboモデル用の起動スクリプト(start_acestep_api_780m.sh)
#!/bin/bash
export HIP_VISIBLE_DEVICES=0
export PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
cd ~/ACE-Step-1.5
source ace780m/bin/activate
python -m acestep.api.server \
--host 0.0.0.0 \
--port 8002 \
--model turbo \
--device cuda \
--max-batch-size 1ポイントは以下の通りです。
モデル選択: Turboモデル(8 steps)はVRAM 4-6GB、Baseモデル(32 steps)はVRAM 8-10GBを使用します。
max-batch-size: メモリ制約がある場合は1に設定します。
device: ROCmの場合もcudaを指定します(PyTorchの互換レイヤー経由)。
ステップ4: LLMサーバーの起動(将来の拡張用、現在はスキップ可)
将来的に歌詞自動生成を実装する場合、LLMサーバーを起動できます。現在の実装では歌詞は事前作成されているため、このステップはスキップできます。
# Qwen3-30B起動スクリプト(将来の拡張用)
llama-server \
-m ~/models/Qwen3-30B-Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8081 \
--ctx-size 8192 \
--n-gpu-layers 99 \
--device Vulkan0 \
--threads 8 \
--parallel 1注: 現在はこのステップをスキップしても問題なく動作します。
ステップ5: Google API認証情報の設定
Googleスプレッドシートと連携するため、サービスアカウントを作成します。
Google Cloud Consoleでプロジェクトを作成し、Google Sheets APIとGoogle Drive APIを有効化します。サービスアカウントを作成し、JSONキーファイルをダウンロードします。JSONファイルを安全な場所に保存し、config.pyでパスを指定します。
# config.py
GOOGLE_CREDENTIALS = '/path/to/credentials.json'
SPREADSHEET_ID = 'your-spreadsheet-id'ステップ6: バッチ処理スクリプトの準備
run_1pass_hq_mastered.pyを配置します。このスクリプトがスプレッドシートを監視し、自動的に楽曲を生成します。
使用方法
実際の使用フローを説明します。
実験データの作成
実験データは、Claude CodeまたはAIアシスタントが事前に作成します。
ステップ1: 歌詞の事前作成(Claude Codeが担当)
Claude Codeが、テーマやジャンルに基づいて歌詞を作成します。例:
# create_japanese_phrase_dance_batch.py の例
# Claude Codeが作成した歌詞辞書
JAPANESE_PHRASE_LYRICS = {
"Kawaii Overload": """[Intro]
Everything is kawaii kawaii
Can't stop saying kawaii
[Chorus - HOOK 30s]
Kawaii overload
Everything I see
Kawaii overload
Kawaii constantly...""",
"Sugoi Moment": """[Intro]
Sugoi sugoi every day
Sugoi in every way...""",
# ... 他の歌詞(10曲分)
}ステップ2: スプレッドシートへの登録
作成した歌詞をスプレッドシートに登録するスクリプトを実行します。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from config import Config
# スプレッドシート接続
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
Config.GOOGLE_CREDENTIALS, scope)
client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(Config.SPREADSHEET_ID)
sheet = spreadsheet.worksheet('プロンプト実験')
# 実験データの定義
EXPERIMENTS = [
(168, "C", 165, "Kawaii Overload",
"bubblegum bass, female vocaloid, cute culture, kawaii energy, English + Japanese"),
# ... 他の実験
]
# スプレッドシートに追加
for bpm, key, duration, title, genre_style in EXPERIMENTS:
lyrics = JAPANESE_PHRASE_LYRICS[title] # 事前作成した歌詞を取得
row_data = [
exp_num, # A列: 実験番号
genre_style, # B列: ジャンルとスタイル
lyrics, # C列: 歌詞
bpm, # D列: BPM
key, # E列: キー
"4/4", # F列: 拍子
duration, # G列: 尺(秒)
exp_num * 100, # H列: seed値
"1pass", # I列: パス数
"pending", # J列: ステータス
f"{title}.wav", # K列: 出力ファイル名
"", # L列: エラーログ
metadata, # M列: メタデータ
image_prompt, # N列: 画像プロンプト
]
sheet.append_row(row_data)このスクリプトを実行すると、10曲分の実験データがスプレッドシートに登録され、ステータスは「pending」になります。
バッチ処理の実行
スプレッドシートに実験データが追加されたら、バッチ処理を開始します。
cd ~/sunoanalysis
source venv/bin/activate
nohup python -u run_1pass_hq_mastered.py > batch_process.log 2>&1 &バッチ処理は以下の流れで進行します。
スプレッドシートから「pending」ステータスの実験を取得します。
各実験について、歌詞、BPM、キー、ジャンルをACE-Step APIに送信します。
payload = {
"caption": f"{genre_style}, {bpm} BPM, key of {key}",
"lyrics": lyrics,
"bpm": bpm,
"key": key,
"duration": duration,
"vocal_language": "en", # 英語ボーカル
"seed": seed_value,
}
response = requests.post(
"http://localhost:8002/generate",
json=payload,
timeout=300
)生成されたWAVファイルを受信し、48kHz/24bitに変換します。
AI Masteringエンジンを適用します。
from pipeline.ai_mastering import AIMasteringEngine
engine = AIMasteringEngine(mode='balanced', platform='spotify')
mastered_path = engine.process(raw_wav_path, output_path)スプレッドシートのステータスを「完了」に更新します。
進捗の監視
バッチ処理の進捗はログファイルで確認できます。
tail -f batch_process.logログには以下のような情報が出力されます。
[1/10] Processing experiment 215
Theme: Kawaii Overload (JP Phrase Dance)
BPM: 168.0, Key: C
Language: English
Task ID: 71948e02-0acc-48b7-900c-40496d08acbc
Waiting... (60s)
✓ Generation complete
✓ Converted to HQ WAV (48kHz/24bit)
Applying AI mastering...
✓ Mastering complete
LUFS: -10.0
Peak: 0.0 dB
Structure Preservation: 97.8%
✓ Pipeline complete現在のワークフロー: Claude Codeによる歌詞作成
現在の実装では、歌詞は全てClaude Codeが事前に作成しています。
実際の作成プロセス
ステップ1: テーマの決定
ユーザーが大まかなテーマを指定します。例: 「日常あるあるシチュエーション」「日本語キラーフレーズを含むダンス曲」
ステップ2: Claude Codeが歌詞を作成
Claude Codeが以下の要件に従って歌詞を作成します:
ジャンルとBPMに適した構造
30秒キラーフック(Chorus部分)
深いが簡単な意味
安易な繰り返しを避ける
日常的に共感できるシチュエーション
例: テーマ「日常あるある」から10曲のバリエーション
Shower Thoughts Hit Different(172 BPM、Hyperpop): シャワー中の哲学的思考
Fake Laugh Symphony(168 BPM、UK Garage): 作り笑いの社会
Accidental Eye Contact(175 BPM、Jersey Club): 偶然のアイコンタクト
Song I Don't Know(165 BPM、Breakcore Lite): 知らない曲でノる気まずさ
ステップ3: Pythonスクリプトに記述
作成した歌詞をPythonスクリプトの辞書形式で定義します:
LYRICS = {
"Shower Thoughts Hit Different": """[Intro]
Three AM water running hot
Random thoughts I forgot I got
[Chorus - HOOK 30s]
Shower thoughts hit different
When the world is sleeping
Deep existential questions
While I'm water keeping...""",
# ... 他の9曲
}ステップ4: スプレッドシートに登録
スクリプトを実行して、全ての歌詞とメタデータをスプレッドシートに登録します。
Claude Codeの役割
Claude Codeは以下を担当します:
歌詞の全文作成(Intro、Verse、Pre-Chorus、Chorus、Bridge、Final Chorus)
セクションタグの付与([Intro]、[Chorus - HOOK 30s]など)
ジャンルとBPMに適した歌詞スタイル
日本語フレーズの自然な統合(外国人発音可能なローマ字表記)
30秒キラーフックの設計
Claude Codeが作成した歌詞は、そのままACE-Stepに送信され、楽曲として生成されます。
将来の拡張: LLMによる自動生成(未実装)
将来的には、Qwen3-30BなどのローカルLLMを使って歌詞を自動生成することも可能です。
拡張案の実装例
import requests
def generate_lyrics_with_llm(theme, genre, bpm):
"""将来の拡張: LLMで歌詞を自動生成"""
prompt = f"""Create English song lyrics for a {genre} track at {bpm} BPM.
Theme: {theme}
Style: Female vocaloid, catchy, danceable, viral potential for TikTok/Reels
Structure: Intro, Verse 1, Pre-Chorus, Chorus (30s hook), Verse 2, Bridge, Final Chorus
Requirements:
- English lyrics with natural flow
- 30-second killer hook in chorus
- Deep but simple meaning
- Relatable daily life situations
- Avoid cheap repetition
"""
response = requests.post(
"http://localhost:8081/v1/completions",
json={
"prompt": prompt,
"max_tokens": 800,
"temperature": 0.7,
"repeat_penalty": 1.2
}
)
return response.json()['choices'][0]['text']注: この機能は現在実装されていません。歌詞の品質を重視し、現在は全てClaude Codeが手動で作成しています。
AI Masteringの仕組み
生成された楽曲の自動マスタリング処理について説明します。
マスタリングパイプライン
AI Masteringエンジンは以下の処理を自動実行します。
Phase 1 AI特性解析: スペクトル指紋検出でAI生成楽曲の特性を把握し、高域カットオフ検出(通常15-17kHz)を行い、保護すべき周波数リストを生成します。
Phase 2 スペクトル処理: 30Hz以下のハイパスフィルターを適用し、3kHz付近のクラリティブースト(最大2dB)を行い、12kHz以上のエア復元を実施します。処理は位相コヒーレントを維持します。
Phase 3 ダイナミクス処理: セクション認識コンプレッション(Intro 0.85、Verse 0.90、Chorus 1.00、Bridge 0.88)を適用し、マイクロダイナミクス復元で自然さを追加します。控えめなマルチバンドコンプ(ratio 1.5:1)を使用します。
Phase 4 位相補正: 250Hz以下の低域モノ化を行い、ステレオ相関を改善します。位相コヒーレンス0.7未満の場合のみ適用されます。
Phase 5 LUFS正規化: Spotify/YouTube向けに-14 LUFS、Apple Music向けに-16 LUFS、Universal設定で-14 LUFSに正規化します。True Peakリミッティングは-1.0 dBTPで実施します。
品質保証
マスタリング後の品質チェックとして、Structure Preservation Score(構造保存スコア)が96-99%以上であることを確認します。LUFSが目標値±0.5dB以内であることを確認し、True Peakが-1.0 dBTP以下であることを検証します。
自動ログ出力の例を示します。
AI Mastering: Kawaii_Overload_raw_48k24bit.wav
Loaded: (2, 7920000), sr=48000
AI Detection: Yes (confidence=0.70, hint=suno)
Before: LUFS=-11.4, Peak=0.0
Applied: EQ (2 filters)
Applied: dynamics (breathing=True)
After: LUFS=-10.0, Peak=0.0
Structure preservation: 97.8%
Saved: Kawaii_Overload_mastered.wavメモリ管理とパフォーマンス最適化
共有VRAM環境での最適化手法を説明します。
VRAM配分戦略
32GB共有VRAMの場合の配分例を示します。
システム予約として8GBを確保します。LLMサーバー(Qwen3-30B)は将来の拡張用として起動可能ですが、現在の実装では必須ではありません(起動する場合は約18GB使用)。ACE-Step実行用として4-10GBを使用し、バッファとして2-4GBを残します。
現在の実装では、LLMサーバーなしでACE-Stepのみ起動する構成も可能です。この場合、VRAM使用量は約12-18GB(システム + ACE-Step)となり、余裕が生まれます。
ACE-Stepモデル選択
モデルによるVRAM使用量の違いは以下の通りです。
Turboモデル: 8 steps、4-6GB VRAM使用、生成時間約30-50秒、品質は良好で日常利用に適します。
Baseモデル: 32 steps、8-10GB VRAM使用、生成時間約60-120秒、品質は最高で最終出力向けです。
共有VRAM環境ではTurboモデルを推奨します。メモリ圧迫時は他のプロセス(LLMなど)を一時停止することも検討します。
バッチサイズの調整
ACE-Step APIサーバーの設定として、max-batch-size=1を使用します。これにより複数リクエストの並列処理は行わず、メモリを節約します。
バッチ処理スクリプト側では、順次処理(1曲ずつ)を行い、前の曲の完了を待ってから次の曲を生成します。
PyTorchメモリ最適化
環境変数を設定してメモリ使用を最適化します。
export PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:Trueこれにより、メモリアロケーションが動的に拡張可能になり、フラグメンテーションが削減されます。
トラブルシューティング
よくある問題と解決方法を示します。
VRAM不足エラー
症状として、CUDA out of memory、HIP out of memoryというエラーが発生します。
対処法は以下の通りです。
ACE-StepをTurboモデルに切り替えます。
python -m acestep.api.server --model turbo --max-batch-size 1LLMサーバーを一時停止してVRAMを解放します。
pkill -f llama-serverシステムメモリを増設します(32GB → 64GB推奨)。
生成が遅い
症状として、1曲の生成に5分以上かかる場合があります。
対処法は以下の通りです。
Turboモデル(8 steps)を使用します。CPUスレッド数を最適化します。
export OMP_NUM_THREADS=8SSDを使用します(HDDは避ける)。ROCm/CUDAドライバーを最新版に更新します。
APIタイムアウト
症状として、requests.exceptions.Timeout、Connection refusedエラーが発生します。
対処法は以下の通りです。
タイムアウト値を増やします。
response = requests.post(url, json=payload, timeout=600) # 10分ACE-Step APIサーバーが起動しているか確認します。
curl http://localhost:8002/healthポート番号が正しいか確認します(8001 vs 8002)。
マスタリングでエラー
症状として、Structure preservation score が90%未満になる場合があります。
対処法は以下の通りです。
マスタリングモードを変更します。
engine = AIMasteringEngine(mode='gentle') # より控えめな処理元のWAV品質を確認します(48kHz/24bit推奨)。AI Masteringを無効化して生成だけ実行することも検討します。
まとめ
このシステムにより、MINIPC内蔵GPUだけで以下が実現できます。
事前設計による連続生成: Claude CodeまたはAIアシスタントが事前に歌詞を設計し、10曲、20曲、50曲と自動的に生成可能です。
高品質マスタリング: AI Masteringによる自動音質調整が行われます。
品質重視のワークフロー: 歌詞は全てClaude Codeが作成するため、品質が保証されます。
外部GPU不要: AMD 780Mなどの内蔵GPUで完結します。
半自動化プロセス: 歌詞作成(Claude Code担当)→ スプレッドシート登録 → バッチ処理(自動)→ マスタリング(自動)という流れです。
必要なのは32GB以上のメモリと内蔵GPU、そして少しのセットアップ時間だけです。このガイドを参考に、あなたも自分の楽曲生成システムを構築してみてください。
参考リンク
ACE-Step 1.5公式リポジトリ: https://github.com/ace-step/ACE-Step-1.5
ROCmインストールガイド: https://rocm.docs.amd.com/
llama.cpp(LLMサーバー用): https://github.com/ggerganov/llama.cpp
Google Sheets API: https://developers.google.com/sheets/api
補足: 実際の生成例
このシステムで実際に生成された楽曲の例を紹介します。
出力例:
https://youtu.be/vXsX2XDeNEI?si=OFYH1P_lLoSQRTD6
https://youtu.be/wLf3MNSs0Ek?si=f3_pjWZempp5xLh3
制作プロセス:
Claude Codeが10曲分の歌詞を作成
Pythonスクリプトに記述してスプレッドシートに登録
バッチ処理で自動生成
自動マスタリング
これらの手順により、10曲の完成品が得られます。
SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。
大きいセールがある場合はAmazonもしくは楽天から購入するとお得です。
買い物情報はこちらからご確認ください。気分で紹介しています。
アリエクのクーポン情報もまとめています。こちらをご覧ください。
当ページにはアフィリエイトリンクを含む場合があります。