1 回の呼び出しでタイムラインの 1 行が読み上げられ、Whisper による単語単位のアラインメントつきで返ります。字幕は音節に合います。別の呼び出しはその下に流れる曲を書きます。音声プロバイダーは 4 つ、それぞれ 1 つのエンドポイントです。
POSThttps://autostud.ai/api/v1/actions/timeline.generate_audioブロックに声を入れ、必要なら曲を足し、最後にまとめてレンダリングします。
タイムラインのブロックと使いたい声を指定します。返るのは音声、その正確な長さ、そして字幕を音節に合わせる Whisper の単語タイミングです。
export AUTOSTUD_API_KEY="sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
curl -X POST https://autostud.ai/api/v1/actions/timeline.generate_audio \
-H "Authorization: Bearer $AUTOSTUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_id": "0f4c8b71-2d95-47a3-9e6c-15b8ad7f3c20",
"block_id": "block_2",
"voice_settings": {
"voice_provider": "elevenlabs",
"voice_id": "rachel",
"playback_speed": 1
}
}'ブリーフ、スタイル、あるいは自前の歌詞。音楽は非同期です。呼び出しはタスクを返し、music.completed がホスト済みのトラックを届けます。
curl -X POST https://autostud.ai/api/v1/actions/music.generate \
-H "Authorization: Bearer $AUTOSTUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Lighthouse",
"style": "warm lo-fi, slow, no drums",
"prompt": "A calm bed under a voice-over about the sea",
"instrumental": true
}'
# Already wrote the words? Send lyrics instead of prompt.ブロックの長さを決めるのは音声です。声が入れば、renders.create がタイムラインをすべて同期した mp4 にします。
curl -X POST https://autostud.ai/api/v1/webhooks \
-H "Authorization: Bearer $AUTOSTUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/hooks/autostud",
"events": ["music.completed", "music.failed"],
"description": "Audio"
}'ブロックを読み上げるのに 3 つ、曲を発注するのに 1 つ。
video_id読み上げ対象のブロックを含むタイムラインを持つ動画。
block_idどのブロックに声を入れるか。長さは音声に従い、その逆ではありません。
voice_settings声そのもの。プロバイダー、ボイス参照、速度。自分のプロバイダーキーを使えば生成は無料です。
promptmusic.generate 用の、曲のブリーフ。歌詞ができているなら代わりに lyrics を渡してください。
声はカタログであって、ハードコードされた一覧ではありません。自分のプロバイダーキーを持ち込めば生成は無料、当社のキーを使えば他と同じくクレジットで課金されます。
読み上げはレスポンスで返ります。曲は時間がかかるのでイベントを発火します。Webhook を一度登録すれば、トラックはホストされた状態で届き、クレジットも精算済みです。
generation.completedmusic.completedmusic.failedできます。生成直後の音声に対して Whisper のアラインメントが走るため、レスポンスは単語ごとのタイミングを完全な精度で持ちます。秒に丸めることはありません。
使えます。デュアルモードの要点がそこです。自分のキーなら生成のクレジットはゼロで、音声はそれでもホストされ、アラインされ、ブロックに配置されます。
ミリ秒ではなく分単位です。だから音楽は非同期になっています。Webhook が使えない構成なら music.get_task で読み直してください。
音声が決めます。ブロックの長さは中の読み上げに設定した間を足したものになるので、あとから手作業でタイミングを合わせる必要はありません。