0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity×C#】マイクからオーディオを取得しファイルに保存する(UniTask版)

Posted at

概要

前回コルーチンで非同期処理を書いていた以下の記事をUniTaskで書き直したものです。
修正したDemoAudioRecorder.csのスクリプトのみ掲載しています。
残りのスクリプトや使い方等は、以前の投稿をご覧ください。

開発環境

Windows 10
Unity 2019.4.31f1
Api Compatibility Level .NET Standard 2.0

実装

詳細はスクリプト中にコメントで記載しています。

DemoAudioRecorder.cs

using System;
using System.Linq;
using UnityEngine;
using Cysharp.Threading.Tasks;

public class DemoAudioRecorder : MonoBehaviour
{
    // Start is called before the first frame update
    private string microphone;
    private AudioClip microphoneInput;
    private const int RECORD_LENGTH_SEC = 10;
    private const int SAMPLE_RATE = 41100;

    void Start()
    {
        // 利用可能なマイクを検出
        microphone = Microphone.devices.FirstOrDefault();
        Debug.Log("microphone: " + microphone);
        if (microphone == null)
        {
            Debug.LogError("No microphone found");
            return;
        }

        // 第二引数をtrueにすると循環バッファとしてループ保存
        microphoneInput = Microphone.Start(microphone, false, RECORD_LENGTH_SEC, SAMPLE_RATE);
        Debug.Log("録音を開始します。何か話してください。");

        WaitAndExecute().Forget(); // Forget()メソッドで、awaitが無いけれど大丈夫?という警告を無視
    }

    // Update is called once per frame
    void Update() { }

    /// <summary>
    /// 10秒間待機して、録音結果をWAVファイルに保存
    /// </summary>
    private async UniTask WaitAndExecute()
    {
        // 10秒間待機
        await UniTask.Delay(TimeSpan.FromSeconds(10));
        Debug.Log("録音を終了し、WAVファイルに保存します。");

        // 保存先ファイルの設定
        var filePath = string.Format("{0}/{1}/{2}", Application.persistentDataPath, "recordings", "recordedAudio.wav");
        Debug.Log("filePath: " + filePath);

        // AudioClipからWAVファイルを作成
        SaveWavFile(filePath, microphoneInput);
    }

    /// <summary>
    /// AudioClipからWAVファイルを作成
    /// WavUtilityには以下のコードを利用。ただし、FromAudioClipメソッドの一部を修正
    /// https://github.com/deadlyfingers/UnityWav/tree/master
    /// </summary>
    private void SaveWavFile(string filepath, AudioClip clip)
    {
        // AudioClipからWAVファイルを作成
        byte[] wavBytes = WavUtility.FromAudioClip(clip, filepath, true);
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?