Unity의 dspTime
은 오디오 시스템에서 처리된 실제 오디오 샘플 수에 기반하여 반환되는 double
값의 초 단위 시간이다.
주로 사용되는 Time.time
의 float
값보다 훨씬 정확하고, 실제 시간에 가깝다.
AudioSource
의 PlayScheduled
메소드에 들어가는 매개변수가 dspTime
값이며, 아래와 같이 활용할 수 있다.
private AudioSource audioSource;
void Start()
{
audioSource = GetComponent<AudioSource>();
double curDspTime = AudioSettings.dspTime;
audioSource.PlayScheduled(curDspTime + 5d);
// 5초 뒤에 audioSource를 플레이한다.
}
이로써 FrameRate
(프레임 속도)의 영향을 받지않고, 오디오 시스템에 기반하여 5초뒤에 음악을 재생할 수 있다.
아래와 같이 시간을 계산하는 것으로 두 오디오 소스를 연달아 재생할 수도 있다.
[SerializeField] private AudioSource audioSource1;
[SerializeField] private AudioSource audioSource2;
void Start()
{
double curDspTime = AudioSettings.dspTime;
double audioSource1Duration = (double)audioSource1.clip.samples / audioSource1.clip.frequency;
// 샘플 수 / 빈도 수로 audioSource1의 오디오 클립 길이를 구한다.
audioSource1.PlayScheduled(curDspTime);
audioSource2.PlayScheduled(curDspTime + audioSource1Duration);
// 현재 시각에서 audioSource1 재생이 끝난 후에 재생한다.
}