Unity 6.3
0 онлайн 21 гостей 3 в системе
Вход

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