# Create

> Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.AudioModule

## Create(string, int, int, int, bool, bool)

Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

> **Warning:**
>
> **Deprecated.** The \_3D argument of AudioClip is deprecated. Use the spatialBlend property of AudioSource instead to morph between 2D and 3D playback.

```csharp
public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool _3D, bool stream)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Name of clip.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of sample frames.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of channels per frame.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Sample frequency of clip.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Audio clip is played back in 3D.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): True if clip is streamed, that is if the pcmreadercallback generates data on the fly.

### Returns

| Type                                                                  | Description                           |
| --------------------------------------------------------------------- | ------------------------------------- |
| [AudioClip](/engine/6000.0/script-reference/unityengine/audioclip.md) | A reference to the created AudioClip. |

### Remarks

Set your own audio data with [AudioClip.SetData](/engine/6000.0/script-reference/unityengine/audioclip/setdata.md). Use the [AudioClip.PCMReaderCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback.md) and [AudioClip.PCMSetPositionCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback.md) delegates to get a callback whenever the clip reads data and changes the position. If `stream` is true, Unity reads in small chunks of data on demand. If it's false, Unity reads all the samples during the creation of the clip.

**Note**: Unity expects you to pass an array with valid audio data (floating-point samples between -1.0 and 1.0) to `PCMReaderCallback`. If no audio data is available, you must fill the array with zeros. Otherwise it will result in unexpected noise or other unwanted sounds during playback.

### Examples

```csharp
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;
    }
}
```

## Create(string, int, int, int, bool, bool, PCMReaderCallback)

Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

> **Warning:**
>
> **Deprecated.** The \_3D argument of AudioClip is deprecated. Use the spatialBlend property of AudioSource instead to morph between 2D and 3D playback.

```csharp
public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool _3D, bool stream, AudioClip.PCMReaderCallback pcmreadercallback)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Name of clip.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of sample frames.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of channels per frame.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Sample frequency of clip.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Audio clip is played back in 3D.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): True if clip is streamed, that is if the pcmreadercallback generates data on the fly.**** (\[PCMReaderCallback]\(/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback)): This callback is invoked to generate a block of sample data. Non-streamed clips call this only once at creation time while streamed clips call this continuously.

### Returns

| Type                                                                  | Description                           |
| --------------------------------------------------------------------- | ------------------------------------- |
| [AudioClip](/engine/6000.0/script-reference/unityengine/audioclip.md) | A reference to the created AudioClip. |

### Remarks

Set your own audio data with [AudioClip.SetData](/engine/6000.0/script-reference/unityengine/audioclip/setdata.md). Use the [AudioClip.PCMReaderCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback.md) and [AudioClip.PCMSetPositionCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback.md) delegates to get a callback whenever the clip reads data and changes the position. If `stream` is true, Unity reads in small chunks of data on demand. If it's false, Unity reads all the samples during the creation of the clip.

**Note**: Unity expects you to pass an array with valid audio data (floating-point samples between -1.0 and 1.0) to `PCMReaderCallback`. If no audio data is available, you must fill the array with zeros. Otherwise it will result in unexpected noise or other unwanted sounds during playback.

### Examples

```csharp
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;
    }
}
```

## Create(string, int, int, int, bool, bool, PCMReaderCallback, PCMSetPositionCallback)

Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

> **Warning:**
>
> **Deprecated.** The \_3D argument of AudioClip is deprecated. Use the spatialBlend property of AudioSource instead to morph between 2D and 3D playback.

```csharp
public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool _3D, bool stream, AudioClip.PCMReaderCallback pcmreadercallback, AudioClip.PCMSetPositionCallback pcmsetpositioncallback)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Name of clip.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of sample frames.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of channels per frame.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Sample frequency of clip.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Audio clip is played back in 3D.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): True if clip is streamed, that is if the pcmreadercallback generates data on the fly.**** (\[PCMReaderCallback]\(/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback)): This callback is invoked to generate a block of sample data. Non-streamed clips call this only once at creation time while streamed clips call this continuously.**** (\[PCMSetPositionCallback]\(/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback)): This callback is invoked whenever the clip loops or changes playback position.

### Returns

| Type                                                                  | Description                           |
| --------------------------------------------------------------------- | ------------------------------------- |
| [AudioClip](/engine/6000.0/script-reference/unityengine/audioclip.md) | A reference to the created AudioClip. |

### Remarks

Set your own audio data with [AudioClip.SetData](/engine/6000.0/script-reference/unityengine/audioclip/setdata.md). Use the [AudioClip.PCMReaderCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback.md) and [AudioClip.PCMSetPositionCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback.md) delegates to get a callback whenever the clip reads data and changes the position. If `stream` is true, Unity reads in small chunks of data on demand. If it's false, Unity reads all the samples during the creation of the clip.

**Note**: Unity expects you to pass an array with valid audio data (floating-point samples between -1.0 and 1.0) to `PCMReaderCallback`. If no audio data is available, you must fill the array with zeros. Otherwise it will result in unexpected noise or other unwanted sounds during playback.

### Examples

```csharp
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;
    }
}
```

## Create(string, int, int, int, bool)

Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

```csharp
public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool stream)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Name of clip.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of sample frames.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of channels per frame.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Sample frequency of clip.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): True if clip is streamed, that is if the pcmreadercallback generates data on the fly.

### Returns

| Type                                                                  | Description                           |
| --------------------------------------------------------------------- | ------------------------------------- |
| [AudioClip](/engine/6000.0/script-reference/unityengine/audioclip.md) | A reference to the created AudioClip. |

### Remarks

Set your own audio data with [AudioClip.SetData](/engine/6000.0/script-reference/unityengine/audioclip/setdata.md). Use the [AudioClip.PCMReaderCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback.md) and [AudioClip.PCMSetPositionCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback.md) delegates to get a callback whenever the clip reads data and changes the position. If `stream` is true, Unity reads in small chunks of data on demand. If it's false, Unity reads all the samples during the creation of the clip.

**Note**: Unity expects you to pass an array with valid audio data (floating-point samples between -1.0 and 1.0) to `PCMReaderCallback`. If no audio data is available, you must fill the array with zeros. Otherwise it will result in unexpected noise or other unwanted sounds during playback.

### Examples

```csharp
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;
    }
}
```

## Create(string, int, int, int, bool, PCMReaderCallback)

Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

```csharp
public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool stream, AudioClip.PCMReaderCallback pcmreadercallback)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Name of clip.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of sample frames.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of channels per frame.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Sample frequency of clip.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): True if clip is streamed, that is if the pcmreadercallback generates data on the fly.**** (\[PCMReaderCallback]\(/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback)): This callback is invoked to generate a block of sample data. Non-streamed clips call this only once at creation time while streamed clips call this continuously.

### Returns

| Type                                                                  | Description                           |
| --------------------------------------------------------------------- | ------------------------------------- |
| [AudioClip](/engine/6000.0/script-reference/unityengine/audioclip.md) | A reference to the created AudioClip. |

### Remarks

Set your own audio data with [AudioClip.SetData](/engine/6000.0/script-reference/unityengine/audioclip/setdata.md). Use the [AudioClip.PCMReaderCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback.md) and [AudioClip.PCMSetPositionCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback.md) delegates to get a callback whenever the clip reads data and changes the position. If `stream` is true, Unity reads in small chunks of data on demand. If it's false, Unity reads all the samples during the creation of the clip.

**Note**: Unity expects you to pass an array with valid audio data (floating-point samples between -1.0 and 1.0) to `PCMReaderCallback`. If no audio data is available, you must fill the array with zeros. Otherwise it will result in unexpected noise or other unwanted sounds during playback.

### Examples

```csharp
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;
    }
}
```

## Create(string, int, int, int, bool, PCMReaderCallback, PCMSetPositionCallback)

Creates a user AudioClip with a name and with the given length in samples, channels and frequency.

```csharp
public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool stream, AudioClip.PCMReaderCallback pcmreadercallback, AudioClip.PCMSetPositionCallback pcmsetpositioncallback)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Name of clip.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of sample frames.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of channels per frame.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Sample frequency of clip.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): True if clip is streamed, that is if the pcmreadercallback generates data on the fly.**** (\[PCMReaderCallback]\(/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback)): This callback is invoked to generate a block of sample data. Non-streamed clips call this only once at creation time while streamed clips call this continuously.**** (\[PCMSetPositionCallback]\(/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback)): This callback is invoked whenever the clip loops or changes playback position.

### Returns

| Type                                                                  | Description                           |
| --------------------------------------------------------------------- | ------------------------------------- |
| [AudioClip](/engine/6000.0/script-reference/unityengine/audioclip.md) | A reference to the created AudioClip. |

### Remarks

Set your own audio data with [AudioClip.SetData](/engine/6000.0/script-reference/unityengine/audioclip/setdata.md). Use the [AudioClip.PCMReaderCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmreadercallback.md) and [AudioClip.PCMSetPositionCallback](/engine/6000.0/script-reference/unityengine/audioclip/pcmsetpositioncallback.md) delegates to get a callback whenever the clip reads data and changes the position. If `stream` is true, Unity reads in small chunks of data on demand. If it's false, Unity reads all the samples during the creation of the clip.

**Note**: Unity expects you to pass an array with valid audio data (floating-point samples between -1.0 and 1.0) to `PCMReaderCallback`. If no audio data is available, you must fill the array with zeros. Otherwise it will result in unexpected noise or other unwanted sounds during playback.

### Examples

```csharp
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;
    }
}
```
