32blogby StudioMitsu
renpy10 min read

Ren'Pyの音声・BGM管理ガイド

Ren'Py 8.5でBGM・効果音・ボイスを扱う方法を解説。フォーマット選択、チャンネルの仕組み、ループポイント設定、音声ファイルの整理まで。

renpyvisual-novelgame-devbeginner
目次

ビジュアルノベルの没入感を決めるのは、テキストでも画像でもなく音だ。BGMが途切れたり、効果音のタイミングがずれたりすると、一気に現実に引き戻される。

この記事では、Ren'Py 8.5.2 でBGM・効果音・ボイスを扱う方法を基礎から解説する。

音声フォーマットの選び方

Ren'Py は複数の音声フォーマットに対応しているが、何でもいいわけではない。

フォーマットループサイズ推奨用途
OGG Vorbis (.ogg)シームレスBGM・SE(最も実績あり)
Opus (.opus)シームレス最小BGM・SE(高圧縮)
FLAC (.flac)シームレスアーカイブ用(ゲーム配布には不向き)
WAV (.wav)短い効果音のみ
MP3 (.mp3)ギャップあり非推奨

WAV は非圧縮のため、ファイルサイズが大きい。BGMに使うとゲームの配布サイズが膨らむ。ドアの開閉音や足音のような短い効果音なら問題ない。

BGM・SE・ボイスの再生

Ren'Py には3つの再生文がある。

play music — BGMを流す

renpy
# BGMを再生(デフォルトでループ)
play music "audio/main_theme.ogg"

# フェードアウト → フェードインで切り替え
play music "audio/battle.ogg" fadeout 1.0 fadein 0.5

# ループしない
play music "audio/ending.ogg" noloop

# すでに同じ曲が流れていれば再起動しない
play music "audio/main_theme.ogg" if_changed

play musicmusic チャンネルで再生する。デフォルトでループする。

play sound — 効果音を鳴らす

renpy
# 効果音を再生(1回だけ)
play sound "audio/explosion.ogg"

# 音量を調整
play sound "audio/rain.ogg" volume 0.3

# ループする効果音(環境音など)
play sound "audio/rain.ogg" loop

play soundsound チャンネルで再生する。デフォルトではループしない。

voice — ボイスを再生する

renpy
voice "voice/001.ogg"
e "こんにちは。"

voice "voice/002.ogg"
e "今日はいい天気ですね。"

voicevoice チャンネルで再生する。次のインタラクション(セリフ送りなど)で自動的に停止する。ボイス付きゲームではセリフごとに1行ずつ voice を書く。

停止する

renpy
# BGMを停止
stop music

# フェードアウトしてから停止
stop music fadeout 2.0

# 効果音を停止
stop sound

# ボイスを停止
stop voice

チャンネルの仕組み

Ren'Py の音声は チャンネル で管理される。各チャンネルは独立して再生・停止・音量調整ができる。

デフォルトチャンネル

チャンネルミキサーループ用途
musicmusicありBGM
soundsfxなし効果音
voicevoiceなしボイス(次のインタラクションで自動停止)
audiosfxなし複数音の同時再生(queue/stop 不可)

music チャンネルに新しい曲を流すと、前の曲は自動的に停止する。同時に2曲流したい場合はカスタムチャンネルを作る。

audio チャンネルは play audio で再生するたびに新しいチャンネルが自動生成される特殊なチャンネルだ。複数の効果音を同時に鳴らせるが、queue audiostop audio は使えない。同時再生+停止制御が必要なら、カスタムチャンネルを使おう。

カスタムチャンネルを作る

環境音(雨音、風の音)を BGM と独立して制御したい場合、カスタムチャンネルを登録する。

renpy
init python:
    renpy.music.register_channel("ambient", "sfx", loop=True)

label start:
    play music "audio/main_theme.ogg"
    play ambient "audio/rain.ogg"

    "雨の中、旅は続く。"

    stop ambient fadeout 2.0

    "雨が止んだ。"

register_channel の第2引数はミキサー名。"sfx" を指定すると、設定画面の SE 音量スライダーで制御される。

queue で次の曲を予約する

renpy
# 現在の曲が終わったら次の曲を再生
play music "audio/intro.ogg" noloop
queue music "audio/main_theme.ogg"

queue は現在再生中の曲が終了したタイミングで次の曲を開始する。イントロ → メインテーマの切り替えに使える。

フェードとループポイント

フェードイン・フェードアウト

renpy
# 現在のBGMを2秒かけてフェードアウト → 新しいBGMを1秒かけてフェードイン
play music "audio/battle.ogg" fadeout 2.0 fadein 1.0

# BGMを3秒かけてフェードアウトして停止
stop music fadeout 3.0

fadeout現在再生中の曲 に適用される。fadein新しい曲 に適用される。この区別を間違えると期待通りの効果にならない。

ループポイントの指定

多くのBGMには「イントロ → ループ部分」の構成がある。ループポイントを指定すると、イントロは1回だけ再生し、以降はループ部分だけを繰り返す。

renpy
# 6.333秒地点からループ(それ以前はイントロとして1回だけ再生)
play music "<loop 6.333>audio/main_theme.ogg"

# 特定の区間だけを再生
play music "<from 5.0 to 30.0>audio/long_track.ogg"

音量の動的制御

renpy
# チャンネル全体の音量を変更(1秒かけてフェード)
$ renpy.music.set_volume(0.3, delay=1.0, channel="music")

# 個別ファイルの音量を指定
play sound "audio/loud_explosion.ogg" volume 0.5

renpy.music.set_volume() はチャンネル全体の音量を変える。volume キーワードは個別のファイルの相対音量を設定する。

音声ファイルを整理する

ファイルが増えてくると、パスを直接書くのが面倒になる。defineaudio 名前空間にエイリアスを作ると管理しやすい。

audio名前空間

renpy
define audio.main_theme = "audio/bgm/main_theme.ogg"
define audio.battle = "audio/bgm/battle.ogg"
define audio.click = "audio/se/click.ogg"
define audio.explosion = "audio/se/explosion.ogg"

label start:
    play music main_theme
    play sound click

    "冒険が始まる。"

    play music battle fadeout 1.0
    play sound explosion

audio 名前空間に定義したエイリアスは、play 文で直接使える。ファイルパスを毎回書く必要がなくなり、タイポも防げる。

フォルダ構成の例

text
game/
└── audio/
    ├── bgm/
    │   ├── main_theme.ogg
    │   ├── battle.ogg
    │   └── ending.ogg
    ├── se/
    │   ├── click.ogg
    │   ├── explosion.ogg
    │   └── door_open.ogg
    └── voice/
        ├── 001.ogg
        ├── 002.ogg
        └── 003.ogg

BGM・SE・ボイスをサブフォルダで分けると見通しが良くなる。Ren'Py は game/audio/ とそのサブフォルダ内のファイルを自動検出する。

まとめ

この記事で解説したこと:

  • フォーマット選択: BGMには OGG か Opus。MP3 はループギャップがあるので避ける
  • 再生文: play music(BGM)、play sound(SE)、voice(ボイス)
  • チャンネル: music / sound / voice / audio の4チャンネル。カスタムチャンネルも作れる
  • フェードとループポイント: fadeout/fadein パラメータ、<loop> 構文でイントロ+ループ
  • ファイル整理: define audio.xxx で名前空間にエイリアスを作る

Ren'Pyの基本は 入門ガイド を、画像表示は 画像表示ガイド を、UIの作り方は screen言語入門 を参照してほしい。

公式リソース: