AudioClip.PCMSetPositionCallback
Declaration
public delegate void PCMSetPositionCallback(int position);Параметры
| Параметр | Описание |
|---|---|
| должность | Новая позиция воспроизведения аудиоклипа в кадрах образца. |
Описание
Unity вызывает этого делегата каждый раз, когда AudioClip изменяет позицию чтения.
Unity использует этот делегат, чтобы сигнализировать, когда аудиоклип изменяет свою позицию воспроизведения, например:
- Пользователь ищет в аудиоклипе.
- Аудиоклип перезапускается.
Когда вы используете AudioClip.Create для создания клипа, используйте этот делегат в качестве параметра и определите, что происходит, когда аудиоклип меняет позицию.
Передачи position Unity в PCMSetPositionCallback являются кадрами семплирования, а не отдельными семплами. Например, если у вас есть клип с частотой семплирования 44,100 Гц и вы ищете 1.0 в клипе, Unity выполняет следующее:
- Звонит
PCMSetPositionCallback. - Устанавливает параметр
positionна 44,100 независимо от количества аудиоканалов.
Если аудиоклип стерео (2 канала), каждый кадр имеет 2 семпла — по одному на канал. Общее количество семплов на 1 секунду в клипе составляет 88200 (44100 кадров x 2 канала), но position все равно 44100.
Дополнительные ресурсы: AudioClip.Create.
// This script creates an audio clip, sets its data and creates a sinusoid graph when it reads the data and changes positions. 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(); }
// When Unity calls PCMReaderCallback, create a graph from the audio clip’s data. void OnAudioRead(float[] data) { int count = 0; while (count < data.Length) { data[count] = Mathf.Sin(2 * Mathf.PI * frequency * position / samplerate); position++; count++; } } //When Unity calls PCMSetPositionCallback, update the position variable. void OnAudioSetPosition(int newPosition) { position = newPosition; } }