Version: 5.3 (switch to 5.4b)
ЯзыкEnglish
  • C#
  • JS

Язык программирования

Выберите подходящий для вас язык программирования. Все примеры кода будут представлены на выбранном языке.

AudioSource.PlayScheduled

Предложить изменения

Успех!

Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.

Закрыть

Ошибка внесения изменений

По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста <a>попробуйте снова</a> через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.

Закрыть

Отменить

Руководство
public function PlayScheduled(time: double): void;
public void PlayScheduled(double time);

Параметры

time @param time Время в секундах на абсолютной временной шкале, на которое ссылается AudioSettings.dspTime как на время начала воспроизведения звука.

Описание

Проигрывает clip в заданное время на абсолютной временной шкале, считанной из AudioSettings.dspTime .

Это предпочтительный способ размещения AudioClips в музыкальных проигрывателях, поскольку он не зависит от частоты кадров и даёт аудиосистеме достаточно времени, чтобы подготовить воспроизведение звука при получении его из источника, где открытие и буферизация занимают много времени (потоковое воспроизведение) без внезапных пиковых нагрузок на CPU.

// Basic demonstration of a music system that uses PlayScheduled to preload and sample-accurately stitch two AudioClips in an alternating fashion.
// The code assumes that the music pieces are each 16 bars (4 beats / bar) at a tempo of 140 beats per minute.
// To make it stitch arbitrary clips just replace the line
//   nextEventTime += (60.0 / bpm) * numBeatsPerSegment 
// by
//   nextEventTime += clips[flip].length;

@script RequireComponent(AudioSource)

public var bpm = 140.0; public var numBeatsPerSegment = 16; public var clips = new AudioClip[2];

private var nextEventTime:double; private var flip = 0; private var audioSources = new AudioSource[2]; private var running = false;

function Start() { for(var i = 0; i < 2; i++) { var child:GameObject = new GameObject("Player"); child.transform.parent = gameObject.transform; audioSources[i] = child.AddComponent.<AudioSource>(); } nextEventTime = AudioSettings.dspTime + 2.0; running = true; }

function Update() { if(!running) return; var time = AudioSettings.dspTime; if(time + 1.0 > nextEventTime) { // We are now approx. 1 second before the time at which the sound should play, so we will schedule it now in order for the system to have enough time // to prepare the playback at the specified time. This may involve opening buffering a streamed file and should therefore take any worst-case delay into account. audioSources[flip].clip = clips[flip]; audioSources[flip].PlayScheduled(nextEventTime); Debug.Log("Scheduled source " + flip + " to start at time " + nextEventTime);

// Place the next event 16 beats from here at a rate of 140 beats per minute nextEventTime += (60.0 / bpm) * numBeatsPerSegment;

// Flip between two audio sources so that the loading process of one does not interfere with the one that's playing out flip = 1 - flip; } }
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(AudioSource))] public class ExampleClass : MonoBehaviour { public float bpm = 140.0F; public int numBeatsPerSegment = 16; public AudioClip[] clips = new AudioClip[2]; private double nextEventTime; private int flip = 0; private AudioSource[] audioSources = new AudioSource[2]; private bool running = false; void Start() { int i = 0; while (i < 2) { GameObject child = new GameObject("Player"); child.transform.parent = gameObject.transform; audioSources[i] = child.AddComponent<AudioSource>(); i++; } nextEventTime = AudioSettings.dspTime + 2.0F; running = true; } void Update() { if (!running) return; double time = AudioSettings.dspTime; if (time + 1.0F > nextEventTime) { audioSources[flip].clip = clips[flip]; audioSources[flip].PlayScheduled(nextEventTime); Debug.Log("Scheduled source " + flip + " to start at time " + nextEventTime); nextEventTime += 60.0F / bpm * numBeatsPerSegment; flip = 1 - flip; } } }

Пример на AudioSource.SetScheduledEndTime демонстрирует, как можно проигрывать два аудиоклипа без хлопков и щелчков между ними. Подход заключается в том, чтобы иметь два источника аудио с привязанными клипами и составлять очередь для каждого клипа, используя его источник.

See Also: SetScheduledStartTime.