Unity で NAudio を使って音声処理を行う方法

概要

  • Unity は人気のゲーム開発エンジンだが、音声処理機能が限られている
  • NAudio は .NET 用の強力な音声処理ライブラリで、Unity でも使用可能
  • 本記事では、Unity プロジェクトに NAudio を導入し、音声処理を行う方法を解説する

はじめに

Unity は、ゲーム開発者に広く使われているゲームエンジンです。しかし、Unity の標準機能では、高度な音声処理を行うことが難しい場合があります。そこで、.NET 用の音声処理ライブラリである NAudio を Unity で使用することで、より柔軟な音声処理が可能になります。本記事では、Unity プロジェクトに NAudio を導入し、音声の録音や再生、エフェクト処理などを行う方法を紹介します。

1. NAudio を Unity プロジェクトに導入する

まず、Unity プロジェクトに NAudio を導入します。以下の手順に従ってください。

  1. Unity プロジェクトを開く
  2. NuGet for Unity をインストール
  3. NuGet パッケージマネージャーを開き、NAudio を検索してインストール
  4. Unity エディタを再起動

これで、Unity プロジェクトで NAudio を使用する準備が整いました。

2. 音声の録音と再生

NAudio を使って、マイクからの音声録音と、録音した音声の再生を行う方法を紹介します。

using UnityEngine;
using NAudio.Wave;

public class AudioRecorder : MonoBehaviour
{
    private WaveInEvent waveIn;
    private WaveFileWriter waveWriter;
    private AudioClip recordedClip;

    void Start()
    {
        // マイクからの音声入力を設定
        waveIn = new WaveInEvent();
        waveIn.DeviceNumber = 0;
        waveIn.WaveFormat = new WaveFormat(44100, 1);
        waveIn.DataAvailable += OnDataAvailable;
    }

    void OnDataAvailable(object sender, WaveInEventArgs args)
    {
        // 録音データをファイルに書き込む
        waveWriter.Write(args.Buffer, 0, args.BytesRecorded);
    }

    void StartRecording()
    {
        // 録音開始
        waveWriter = new WaveFileWriter("recorded.wav", waveIn.WaveFormat);
        waveIn.StartRecording();
    }

    void StopRecording()
    {
        // 録音停止
        waveIn.StopRecording();
        waveWriter.Dispose();

        // 録音した音声をオーディオクリップとして読み込む
        var reader = new WaveFileReader("recorded.wav");
        var clip = AudioClip.Create("RecordedClip", (int)reader.Length, 1, reader.WaveFormat.SampleRate, false);
        var buffer = new float[reader.Length];
        reader.Read(buffer, 0, (int)reader.Length);
        clip.SetData(buffer, 0);
        recordedClip = clip;
    }

    void PlayRecordedAudio()
    {
        // 録音した音声を再生
        var audioSource = GetComponent<AudioSource>();
        audioSource.clip = recordedClip;
        audioSource.Play();
    }
}

3. 音声のエフェクト処理

NAudio には、各種のオーディオエフェクトが用意されています。ここでは、音声にリバーブエフェクトを適用する方法を紹介します。

using UnityEngine;
using NAudio.Wave;

public class AudioEffectProcessor : MonoBehaviour
{
    private AudioClip clip;
    private AudioSource audioSource;

    void Start()
    {
        // オーディオクリップを読み込む
        clip = Resources.Load<AudioClip>("sample");
        audioSource = GetComponent<AudioSource>();
        audioSource.clip = clip;
    }

    void PlayWithReverb()
    {
        // リバーブエフェクトを適用して再生
        var stream = new AudioFileReader("sample.wav");
        var reverb = new ReverbEffect(stream);
        reverb.Wet = 0.5f; // リバーブの強さを設定
        var waveOut = new WaveOutEvent();
        waveOut.Init(reverb);
        waveOut.Play();
    }
}

まとめ

本記事では、Unity プロジェクトに NAudio を導入し、音声処理を行う方法を紹介しました。NAudio を使うことで、マイクからの音声録音や、オーディオエフェクトの適用など、高度な音声処理が可能になります。Unity の標準機能では実現が難しい音声処理を行う際は、NAudio の利用を検討してみてください。

次のステップ

  • NAudio の公式ドキュメントを読み、他の機能について学ぶ
  • 録音した音声をファイルとして保存し、後から再生できるようにする
  • 他のオーディオエフェクト(コーラス、ディレイ、イコライザーなど)を試す
  • リアルタイムのオーディオ処理(ピッチシフト、ボイスチェンジなど)に挑戦する

NAudio を使いこなすことで、Unity でより表現力豊かなサウンド演出が可能になるでしょう。音声処理の知識を深め、ゲームの没入感を高めるサウンドを実現していきましょう!

記事の長さ: 約1000文字