Version: 2022.3
public static AudioClip Create (string name, int lengthSamples, int channels, int frequency, bool stream);
public static AudioClip Create (string name, int lengthSamples, int channels, int frequency, bool stream, AudioClip.PCMReaderCallback pcmreadercallback);
public static AudioClip Create (string name, int lengthSamples, int channels, int frequency, bool stream, AudioClip.PCMReaderCallback pcmreadercallback, AudioClip.PCMSetPositionCallback pcmsetpositioncallback);
Obsolete public static AudioClip Create (string name, int lengthSamples, int channels, int frequency, bool _3D, bool stream);
Obsolete public static AudioClip Create (string name, int lengthSamples, int channels, int frequency, bool _3D, bool stream, AudioClip.PCMReaderCallback pcmreadercallback);
Obsolete public static AudioClip Create (string name, int lengthSamples, int channels, int frequency, bool _3D, bool stream, AudioClip.PCMReaderCallback pcmreadercallback, AudioClip.PCMSetPositionCallback pcmsetpositioncallback);

参数

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.Sin(2 * Mathf.PI * frequency * position / samplerate); position++; count++; } }

void OnAudioSetPosition(int newPosition) { position = newPosition; } }