name | 剪辑的名称。 |
lengthSamples | 样本帧数。 |
channels | 每帧的声道数。 |
frequency | 剪辑的采样频率。 |
_3D | 音频剪辑以 3D 格式播放。 |
stream | 如果剪辑是流式传输的(即 pcmreadercallback 即时生成数据),则为 true。 |
pcmreadercallback | 调用该回调以生成样本数据块。非流式传输剪辑仅在创建时调用该回调一次,而流式传输剪辑将持续调用该回调。 |
pcmsetpositioncallback | 每当剪辑循环或更改播放位置时,就会调用该回调。 |
AudioClip 对创建的 AudioClip 的引用。
使用名称和给定的样本长度、声道和频率创建用户 AudioClip。
使用 SetData 设置您自己的音频数据。使用 PCMReaderCallback 和 PCMSetPositionCallback 委托,每当剪辑读取数据和更改位置时获取一个回调。如果 stream 为 true,Unity 将按需读取小块数据。如果 stream 为 false,则在创建期间读取所有样本。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public int position = 0;
public int samplerate = 44100;
public float frequency = 440;
void Start()
{
AudioClip myClip = AudioClip.Create("MySinusoid", samplerate * 2, 1, samplerate, true, OnAudioRead, OnAudioSetPosition);
AudioSource aud = GetComponent<AudioSource>();
aud.clip = myClip;
aud.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;
}
}