感谢您寻找和寻求任何帮助/建议。
我试图将音频与游戏玩法同步。
这是一种使用audioSettings.dspTime找出已经过了多少时间的准确方法吗?
我用一个表示时间的浮点数乘以song.clip.frequency。
float myChosenAmountOfTimeInSamples = myChosenAmountOfTime * song.clip.frequency;
float audioSecondsLater = Audio + myChosenAmountOfTimeInSamples;
这就是audioSettings.dspTime * song.clip.frequency
float Audio = (float)AudioSettings.dspTime * song.clip.frequency;
float audioSecondsLater = Audio + myChosenAmountOfTimeInSamples;
我使用此代码查看是否有效。据我所知,它会在1秒后发生
更新
if (Input.GetKeyDown (KeyCode.A)){
StartCoroutine(test ());
}
和协程
IEnumerator test ()
{
float Audio = (float)AudioSettings.dspTime * song.clip.frequency;
float myChosenAmountOfTime = 1f;
float myChosenAmountOfTimeInSamples = myChosenAmountOfTime * song.clip.frequency;
float audioSecondsLater = Audio + myChosenAmountOfTimeInSamples;
print ("Audio seconds later: " + audioSecondsLater);
while (true)
{
Audio = (float)AudioSettings.dspTime * song.clip.frequency;
if (Audio >= audioSecondsLater)
{
print ("Audio Now: " + Audio); // Theoretically this is 1 second later
break;
}
yield return new WaitForSeconds(1 / 1000f);
}
}
答案 0 :(得分:0)
我不完全确定,但我认为你走的正确。我之前已经针对单个AudioClip进行了同步,但我将所有时间保留在样本中。要检查当前示例,我检查正在播放的剪辑上的AudioSource.timeSamples。我使用REAPER检查音频文件,找出事件发生在文件中的哪个样本,然后将其与timeSamples进行比较,看看我的同步事件是否已经发生。
AudioSource还有一个time属性,这是一个以秒为单位的播放位置,不过请参阅文档中有关与压缩音频一起使用时的不准确性的说明。