2015-10-05 223 views
1

感謝您的期待和任何您可能有的幫助/建議。如何獲取使用audioSettings.dspTime傳遞的精確時間方法?

我在嘗試將音頻與遊戲同步。

這是找出多少時間使用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

我不能完全肯定,但我認爲你是在正確的跟蹤。我已經完成了對一個音頻剪輯的同步,但我將所有的時間保持在樣本中。要檢查當前樣本,我在正在播放的剪輯上檢查AudioSource.timeSamples。我使用REAPER來檢查音頻文件並找出文件中哪些示例發生了事件,並將其與timeSamples進行比較以查看我的同步事件是否已發生。

的AudioSource也有一個time屬性以秒爲單位的播放位置,雖然看到有壓縮的音頻使用時注意有關不準確的文檔。

+0

感謝您輸入Eliot。我認爲我的問題可能很不明確。 – Jim

+0

@Jim隨意編輯問題來解釋你想要做的更清楚的事情。 – Eliot

相關問題