【Unity】ピッチで速度変更をしても高さを変えない方法

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

音程を高くすることなく、再生速度だけ変える。

Unityでゲームやアプリケーションを制作する際、
音声の再生速度を変更することは演出や操作感の向上に非常に有効です。

しかし、再生速度を単純に上げると、音の高さも一緒に上がってしまい
思い通りのサウンドにならないケースが多々あります。

本記事では、AudioSourceのピッチ設定を利用しつつ、
AudioMixerのPitch Shifterを併用することで、再生速度だけを変更し、
音程はそのまま維持する方法について詳しく説明します。

本記事は次の人におすすめ
  • Unityでオーディオ再生の速度調整に挑戦したい開発者
  • 高品質なサウンドを保ちつつ再生速度を操作したいゲームクリエイター
  • AudioMixerを活用して音程補正を実現したいエンジニア
  • UIコンポーネントと連動した実装方法を学びたい初心者プログラマー
  • 実践的なスクリプト例から学び、応用力を高めたい技術者
ブログを始めるならConoHaがおすすめ!

ConoHaWing開設方法|アリッシア
技術ブログを書くべき理由|アリッシア

スポンサーリンク

Pitch(AudioSource)

AudioSourceのピッチ(Pitch)は、音声の再生速度と周波数を決定する重要なパラメータです。

ピッチの値を上げると再生速度が速くなり、同時に音の高さ(周波数)も上昇します。
ピッチを上げるとこのサンプルレートが相対的に高くなり、
波形の周期が短縮されることで音程が上昇します。

たとえば、以下のようにピッチを1.5に設定すると、
元の再生速度よりも50%速く再生され、音程も高く聞こえるようになります。

ピッチの変更は、InspectorウィンドウのAudioSourceで操作できますが、
スクリプトを使うことでも制御可能です。

// AudioSourceのピッチを1.5に変更する例
audioSource.pitch = 1.5f;

PitchShifter

PitchShifterは、AudioMixer上で動作するオーディオエフェクトの一種です。
このエフェクトは、再生速度を変更した際に生じる音程の変化を補正するために利用されます。

音の高さを変えないためには、AudioSourceのピッチ操作によって速くなった再生速度に合わせ、
逆数の値を用いてPitch Shifterを調整することで、音程を元の状態に近づけることが可能となります。

AudioSourceのピッチ操作と同様にInspectorウィンドウからだけではなく、
スクリプト制御が可能です。

// AudioMixerのPitch Shifterパラメータを設定する例(パラメータ名:"PitchShifter")
audioMixer.SetFloat("PitchShifter", 0.75f);

PitchShifterの作成方法

PitchShifterを利用するためには、Unityエディタ内でAudioMixerを正しく設定し、
Pitch Shifterエフェクトを適用する必要があります。

作成したAudioMixerをダブルクリック、あるいはUnityエディタ上部のメニューから「Window」>「AudioMixer」を選択し、新規または既存のAudioMixerを開きます。

AudioMixerは複数のオーディオグループをまとめて管理できるため、
エフェクトの適用や音量調整が容易になります。

作成したAudioMixer内の適用対象となるミキサーグループを選択します。
本記事では、「Master」を使用します。
「Add…」ボタンをクリックし、リストから「Pitch Shifter」エフェクトを追加します。

Pitch Shifterエフェクトは、AudioSourceのピッチ変更に伴う音程のズレを補正する機能です。

エフェクトパラメータのExpose

Pitch Shifterエフェクトを導入して、ゲームを再生すると警告文が出てきます。

警告文の内容は、PitchShifterがないというもの。

Exposed name does not exist: PitchShifter
UnityEngine.StackTraceUtility:ExtractStackTrace ()

エフェクト追加後、Pitch Shifterのパラメータをスクリプトから操作できるようにExposeします。

InspectorウインドウのPitch Shifterエフェクトでパラメータ名を右クリックします。

「Expose pitch to script」でスクリプト制御を可能にします。
さらに、「Exposed Parameters」で名前を「PitchShifter」に変更します。

この設定でスクリプト側からAudioMixer.SetFloat(“PitchShifter”, 補正値)を利用して、
エフェクトのパラメータにアクセス可能となります。

再生速度だけ上げて高さはそのまま

再生速度だけを上げて音程(高さ)は変えないように、
AudioSourceとAudioMixerの両方を連動させる設定を行ってきました。

そこで、スライダーを操作して再生速度だけ上げる機能を作成します。

スライダーの使い方を紹介しています。

方法はAudioSourceのpitchプロパティを変更して、再生速度を調整する。
同時に、AudioMixer上のPitchShifterパラメータに、AudioSourceのpitch値の逆数を設定する。

csvでaudio再生する方法を紹介しています。

ソースコード

using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.Audio;

public class AudioPitchController : MonoBehaviour
{
    public AudioSource audioSource;  // 操作対象の AudioSource
    public Slider pitchSlider;       // スライダー
    public TMP_Text pitchText;       // 再生速度表示用の TMP
    public AudioMixer audioMixer;    // AudioMixer(Pitch Shifterを制御するため)

    private const string PitchShifterParam = "PitchShifter"; // Audio Mixer の Pitch パラメータ

    void Start()
    {
        if (pitchSlider != null)
        {
            pitchSlider.minValue = 0.5f; // スライダーの最小値を0.5
            pitchSlider.maxValue = 2.0f; // スライダーの最大値を2.0
            pitchSlider.value = 1.0f;    // 初期値を1.0
            pitchSlider.onValueChanged.AddListener(UpdatePitch);
        }

        UpdatePitch(pitchSlider.value); // 初期値の設定
    }

    void UpdatePitch(float value)
    {
        // AudioSource の pitch を変更
        if (audioSource != null)
        {
            audioSource.pitch = value; // 再生速度変更
            Debug.Log($"AudioSource.pitch = {audioSource.pitch}");
        }
        else
        {
            Debug.LogWarning("AudioSource が設定されていません!");
        }

        // AudioMixer の Pitch Shifter を調整
        if (audioMixer != null)
        {
            float pitchShifterValue = 1.0f / value; // 逆数にすることで音程を一定に保つ
            audioMixer.SetFloat(PitchShifterParam, pitchShifterValue);
            Debug.Log($"AudioMixer Pitch Shifter = {pitchShifterValue}");
        }
        else
        {
            Debug.LogWarning("AudioMixer が設定されていません!");
        }

        // Text 表示を更新
        if (pitchText != null)
        {
            pitchText.text = $"×{value:F2}"; // 小数2桁で表示
        }
    }
}

ブログを運営するメリット

プログラマーがブログを運営するメリットは沢山あります。
エンジニアはブログを運営するべき理由|アリッシア

  • アウトプットによるスキル向上
  • メモ帳代わり
  • ポートフォリオ(案件獲得)

ブログを始めるためには、「テーマ」・「ドメイン」・「サーバー」の3つが必要です。
3つはブログ運営の基盤となる要素ですが、これら全て自分で用意しなければいけません。

面倒で難しくブログ開設を断念してしまう人が多いです。

ConoHa Wingの「WordPressかんたんセットアップ」は
最短10分で契約可能!

WordPressかんたんセットアップの手順を紹介しています。

ConoHa WINGから契約をすれば、独自ドメインサーバーの用意WordPressとの連携も簡単にできます。

さらに、2つの独自ドメインが永久無料の特典もあり、
月660円からの破格価格にもかかわらず、表示速度は国内最速です。

解説

  • 名前空間

UnityEngine:ゲーム開発の基本機能(GameObject、Transform、MonoBehaviourなど)を利用するために必要です。
UnityEngine.UI:UIコンポーネント(スライダーなど)を利用するために必要です。
TMPro:TextMeshProのテキスト表示機能を利用するために必要です。
UnityEngine.Audio:オーディオの再生やミキシング、AudioMixerを操作するために必要です。

Unityで文字を表示する方法を紹介してます。
  • フィールド(メンバ変数)

audioSource:音声再生の制御を担うAudioSourceコンポーネントを参照します。
pitchSlider:再生速度(ピッチ)の調整に使用するスライダーコンポーネントを参照します。
pitchText:現在の再生速度をテキスト表示するためのTextMeshProコンポーネントを参照します。
audioMixer:ピッチシフターのパラメータを調整するためのAudioMixerコンポーネントを参照します。
PitchShifterParam:AudioMixer内のピッチシフターを制御するためのパラメータ名「PitchShifter」を保持する定数です。

  • Startメソッド

スライダーが存在する場合、最小値(0.5)、最大値(2.0)、初期値(1.0)を設定し、
スライダー値の変化でUpdatePitchメソッドが呼ばれるようリスナーを登録します。

その後、初期値をもとに一度UpdatePitchメソッドを実行し、
AudioSourceやAudioMixer、テキスト表示などの初期状態を反映させます。

  • UpdatePitchメソッド

AudioSourceが設定されていれば、そのpitchプロパティを更新し、再生速度を変更します。
設定されていない場合は警告ログを出力します。

AudioMixerが設定されていれば、引数の逆数を計算してピッチシフターのパラメータを調整し、音程を一定に保つよう補正します。

設定されていない場合は警告ログを出力します。
TMPテキストが設定されていれば、計算された再生速度を小数点以下2桁でフォーマットし、
テキストに反映させます。

数値を文字として表示する方法を紹介します。

実演

初めに、シーン内に必要なUIコンポーネントを正しくアタッチしてください。

シーンが開始されると、スクリプトのStartメソッドが実行され、
まずUI(特にSlider)の初期設定が行われます。

スライダーの最小値(0.5)、最大値(2.0)、初期値(1.0)が設定され、
値が変更されるたびにUpdatePitchメソッドが呼ばれるようリスナーが登録されます。

スライダーの値が直接AudioSourceのpitchプロパティに反映され、再生速度が変わります。

音の高さが変わらないようにするため、AudioMixerのPitch Shifterパラメータには、
スライダーの値の逆数が適用されます。

まとめ

本記事では、UnityにおけるAudioSourceのピッチ操作とAudioMixerのPitch Shifterエフェクトを組み合わせ、再生速度のみを変更しながらも音程を維持する方法について解説しました。

この技法は、ゲーム内のBGM、効果音、ナレーションなど、さまざまなシーンで応用可能です。
例えば、スローや早送りの演出、ユーザーの操作に応じたリアルタイムな音声変化など、音響面での表現の幅を大きく広げることができます。

ブログを始めるならConoHaがおすすめ!

ConoHaWing開設方法|アリッシア
技術ブログを書くべき理由|アリッシア

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする
タイトルとURLをコピーしました