名前、与えられたサンプルの長さ、チャンネル、周波数からユーザーがAudioClipを作成します。
SetData で独自のオーディオデータを設定します。 クリップのデータ読み取りと位置の変更をする時に必ずコールバックを取得するために PCMReaderCallback と PCMSetPositionCallback デリゲートを使います。 stream引数がtrueの場合には、必要に応じて小さくまとまったデータを読み取り、コールバック関数の引数として渡します。falseの場合は、作成時、一度にすべてを読み込みます。
#pragma strict // Creates a 1 sec long audioclip, with a 440hz sinoid var position: int = 0; var sampleRate : int = 0; var frequency : float = 440; function Start () { var myClip = AudioClip.Create("MySinoid", 44100, 1, 44100, false, true, OnAudioRead, OnAudioSetPosition); sampleRate = AudioSettings.outputSampleRate; audio.clip = myClip; audio.Play(); } function OnAudioRead(data:float[]) { for (var count = 0; count < data.Length; count++) { data[count] = Mathf.Sign(Mathf.Sin(2 * Mathf.PI * frequency * position / sampleRate)); position++; } } function OnAudioSetPosition(newPosition:int) { position = newPosition; }
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public int position = 0; public int sampleRate = 0; public float frequency = 440; void Start() { AudioClip myClip = AudioClip.Create("MySinoid", 44100, 1, 44100, false, true, OnAudioRead, OnAudioSetPosition); sampleRate = AudioSettings.outputSampleRate; audio.clip = myClip; audio.Play(); } void OnAudioRead(float[] data) { int count = 0; while (count < data.Length) { data[count] = Mathf.Sign(Mathf.Sin(2 * Mathf.PI * frequency * position / sampleRate)); position++; count++; } } void OnAudioSetPosition(int newPosition) { position = newPosition; } }
import UnityEngine import System.Collections public class ExampleClass(MonoBehaviour): public position as int = 0 public sampleRate as int = 0 public frequency as float = 440 def Start() as void: myClip as AudioClip = AudioClip.Create('MySinoid', 44100, 1, 44100, false, true, OnAudioRead, OnAudioSetPosition) sampleRate = AudioSettings.outputSampleRate audio.clip = myClip audio.Play() def OnAudioRead(data as (float)) as void: count as int = 0 while count < data.Length: data[count] = Mathf.Sign(Mathf.Sin(((((2 * Mathf.PI) * frequency) * position) / sampleRate))) position++ count++ def OnAudioSetPosition(newPosition as int) as void: position = newPosition