前提・実現したいこと
マイクからの入力を検知して、自動で録音開始・終了というのをしたいです。
Unity(C#)を使っています。
録音から再生までの一連の処理を書いているのですが、いかんせんプログラミングに関してはまだ日の浅い初心者なので、つまずいています。
PCにマイクとスピーカーをつないで録音再生を行っているのですが、普通に画面内のボタン、あるいは何らかのキーボードキーを押して
「録音開始→録音終了→再生」
というのはいろいろなサイトを見て実現できた(ある程度理解もしてるつもり)のですが、これら開始や終了を手動ではなく自動で行いたいのです。
つまり、
「マイクに音声が入ったら録音開始→音声が聞こえなくなって数秒ぐらい経ったら勝手に終了→勝手に再生」
というようなものを考えています。
一応いろいろと調べたんですが、おそらくマイクに入った音量の数値?みたいなのを取得してif文使って
1.一定の数値以上になったら録音開始の処理を実行
2.if文の中にif文作って、上記メソッド実行後に一定の数値以下になってから数秒間その状態が維持されたら録音終了
という処理を書けばいけるかなと考えています。(違ってたらすいません…)
困っていること
肝心な部分である「音量を数値で取得する方法」がシンプルにわからない。
https://qiita.com/ELIXIR/items/ff503d48c24092c05843
上記のサイトなんか明らかにヒントになりそうなのですが、あいにく初心者ゆえ仕組みがよくわかりません…。
現状のコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[RequireComponent (typeof (AudioSource))] 6public class RecordingTest1 : MonoBehaviour 7{ 8 AudioClip myclip; 9 AudioSource audioSource; 10 string micName = "null"; //マイクデバイスの名前 11 const int samplingFrequency = 44100; //サンプリング周波数 12 const int maxTime_s = 300; //最大録音時間[s] 13 14 void Start() 15 { 16 //マイクデバイスを探す 17 foreach (string device in Microphone.devices) 18 { 19 Debug.Log("Name: " + device); 20 micName = device; 21 } 22 } 23 24 void Update() 25 { 26 27 } 28 29 public void RecStart() 30 { 31 Debug.Log("recording start"); 32 // deviceName: "null" -> デフォルトのマイクを指定 33 myclip = Microphone.Start(deviceName: micName, loop: false, lengthSec: maxTime_s, frequency: samplingFrequency); 34 } 35 36 public void RecEnd() 37 { 38 if (Microphone.IsRecording(deviceName: micName) == true) 39 { 40 Debug.Log("recording stoped"); 41 Microphone.End(deviceName: micName); 42 43 RecPlay(); // ※終了と同時に自動的に再生したいので 44 } 45 else 46 { 47 Debug.Log("not recording"); 48 } 49 50 } 51 52 public void RecPlay() 53 { 54 Debug.Log("play"); 55 audioSource = gameObject.GetComponent<AudioSource>(); 56 audioSource.clip = myclip; 57 audioSource.Play(); 58 } 59}
上記のソースコードについて
実際はもう少しいろいろ書き足したり手を加えてたりしてますが、分かりやすくするため関係ない部分は消してます。
正直、ほぼコピペでそれをベースにいじってるので、サンプリング周波数とかの意味はぶっちゃけよくわかってないです(汗)
本来、上記のコードは録音開始・録音終了・録音再生のそれぞれの処理をそれぞれの画面内ボタンに割り当てて手動で操作するものなのですが
これらの処理を先述したように(Update関数で)音量の数値をif文の条件式に使ってそれぞれの処理を呼び出せたらいいなと思ってます。
質問は初めてなので至らない部分はあると思いますが、何卒よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。