diff --git a/voicevox-remotion-template/public/audio/common_bgm/casual_02_loop.wav.txt b/voicevox-remotion-template/public/audio/common_bgm/casual_02_loop.wav.txt new file mode 100644 index 0000000..713996e --- /dev/null +++ b/voicevox-remotion-template/public/audio/common_bgm/casual_02_loop.wav.txt @@ -0,0 +1,43 @@ +素材ファイル: +audio/common_bgm/casual_02_loop.wav + +出典: +Game Music Pack - SUITE +Publisher: GT-K +Unity Asset Store: +https://assetstore.unity.com/packages/audio/music/game-music-pack-suite-20997 +調査日: 2026-05-27 + +ライセンス: +Standard Unity Asset Store EULA +素材ページ上の表示: +- License type: Single Entity +- License agreement: Standard Unity Asset Store EULA +- Asset kind display: Extension Asset + +ライセンス内容の要約: +- 購入済みライセンスを前提に、Unity Asset Store EULA に従って利用する。 +- EULA は、非制限素材について、Asset Store 由来ではない実質的な独自内容を含む電子アプリケーションまたはデジタルメディアに、素材を埋め込みコンポーネントとして組み込むことを許諾している。 +- 組み込まれた Licensed Product の一部として、素材を再製、公衆表示、公衆実演、送信、配布できる。 +- Licensed Product 内での商用利用、非商用利用はいずれも可能とされている。 +- 素材そのもの、または素材が実質的部分を占める形での再配布、販売、サブライセンス、貸与、抽出可能な形での提供は不可。 +- Unity Asset Store または素材を、Provider/Unity の明示同意なしに AI / ML モデルの学習目的で使用することは不可。 + +表示義務: +- 2026-05-27 時点で確認した Unity Asset Store の素材ページ、Standard Unity Asset Store EULA、Unity Asset Store EULA FAQ には、この素材について動画内または説明欄でのクレジット表示を必須とする明示的な条項は見当たらない。 +- ただし、素材内または同梱ドキュメントに別途クレジット指定がある場合はそちらを優先する。 +- 任意表示を行う場合の例: + Music: "Game Music Pack - SUITE" by GT-K, licensed via Unity Asset Store. + +このプロジェクトでの利用適合性メモ: +- 本プロジェクトでは、VOICEVOX 音声、画像、動画、編集済みタイムライン等を含む動画作品の BGM として、この音声素材を埋め込み利用する想定である。 +- 公開動画は、素材ファイル単体の配布ではなく、独自内容を含むデジタルメディアとして固定化された Licensed Product と解釈できるため、購入済みライセンスの範囲では概ね適合すると判断する。 +- リポジトリに wav 素材そのものを含めて公開・共有する場合は、動画への埋め込み利用とは別に、素材ファイルを抽出可能な形で再配布するリスクがある。このファイルを含むリポジトリを公開する場合は、素材本体を除外し、購入者が各自取得する運用にするのが安全。 + +参照した一次情報: +- Unity Asset Store product page: https://assetstore.unity.com/packages/audio/music/game-music-pack-suite-20997 +- Unity Asset Store Terms of Service and EULA: https://unity.com/legal/as-terms +- Unity Asset Store EULA FAQ: https://assetstore.unity.com/browse/eula-faq + +注意: +このメモは制作管理用の要約であり、法律助言ではない。最終判断が必要な場合は、Unity Asset Store EULA、素材同梱ドキュメント、購入アカウントのライセンス状態を確認する。 diff --git a/voicevox-remotion-template/src/data/pizza-oven-project-01/script.ts b/voicevox-remotion-template/src/data/pizza-oven-project-01/script.ts index d47060d..dfc83f3 100644 --- a/voicevox-remotion-template/src/data/pizza-oven-project-01/script.ts +++ b/voicevox-remotion-template/src/data/pizza-oven-project-01/script.ts @@ -1,4 +1,5 @@ import { + audio, clearVideo, clearStill, defineVQTimeline, @@ -24,6 +25,10 @@ >; export const timeline = defineVQTimeline([ + audio("pizza-oven-project-01-bgm-001", "audio/common_bgm/casual_02_loop.wav", { + playback: "loop", + volume: 0.2, + }), say("pizza-oven-project-01-sayo-001", "sayo", "こんにちは。小夜です。"), say("pizza-oven-project-01-sayo-002", "sayo", "ピザって美味しいじゃないですか。"), say("pizza-oven-project-01-sayo-003", "sayo", "だから、作る事にしたんですよね。"), diff --git a/voicevox-remotion-template/src/data/pizza-oven-project-01/timing.ts b/voicevox-remotion-template/src/data/pizza-oven-project-01/timing.ts index d1bd36e..fc7402e 100644 --- a/voicevox-remotion-template/src/data/pizza-oven-project-01/timing.ts +++ b/voicevox-remotion-template/src/data/pizza-oven-project-01/timing.ts @@ -59,6 +59,18 @@ return durationForSpeech(event, fps); } + if (event.type === "audio") { + if (event.durationFrames && Number.isFinite(event.durationFrames)) { + return Math.max(1, Math.ceil(event.durationFrames)); + } + + if (event.durationSeconds && Number.isFinite(event.durationSeconds)) { + return Math.max(1, Math.ceil(event.durationSeconds * fps)); + } + + return 0; + } + if ( event.type === "clearStill" || event.type === "clearVideo" || diff --git a/voicevox-remotion-template/src/lib/VQRemotionLib/components/VQTimelineAudio.tsx b/voicevox-remotion-template/src/lib/VQRemotionLib/components/VQTimelineAudio.tsx new file mode 100644 index 0000000..e87bb0f --- /dev/null +++ b/voicevox-remotion-template/src/lib/VQRemotionLib/components/VQTimelineAudio.tsx @@ -0,0 +1,30 @@ +import React from "react"; +import {Audio} from "@remotion/media"; +import {staticFile} from "remotion"; +import type {VQAudioEvent} from "../timeline"; + +const externalAudioSourcePattern = /^(https?:|data:|blob:)/; + +// 用途: audioイベントのsrcをRemotionで再生できるURLへ変換する。 +// 使用方法: VQTimelineAudio内でpublic配下の相対パスと外部URLを同じpropsから扱う。 +// オプションや引数詳細: http/https/data/blobはそのまま返し、それ以外はstaticFileのpublic相対パスとして扱う。 +const resolveAudioSource = (src: string) => + externalAudioSourcePattern.test(src) ? src : staticFile(src); + +// 用途: VQAudioEventをタイムライン上の音声レイヤーとして再生する。 +// 使用方法: scheduled segmentのSequence内でaudioイベントを渡して使う。 +// オプションや引数詳細: 再生尺は親Sequenceで制御し、loop/音量/速度はeventから反映する。 +export const VQTimelineAudio: React.FC< + Readonly<{ + audio: VQAudioEvent; + }> +> = ({audio}) => ( +