2014-04-16 33 views
0

我得到一個似乎取決於AVFoundation和簡單[NSSound play]之間的計算機的延遲。 我的程序正在播放AVPlayer中的一個視頻軌道和三個音軌。這很好。獨立地,該程序根據樂譜中的信息爲每個節拍生成一個節拍器。兩個節拍器的聲音都是非常短的文件,我在NSSound中加載並使用[NSSound播放]來播放它們。我注意到我不得不將節拍器的播放時間改爲大約90毫秒,以便完美同步。其中一部分可能是節拍器文件中的節拍器影響的確切時刻,但如果這是唯一原因,那麼這種延遲在所有Mac電腦上都是相同的。但是,在不同的Mac上,這個延遲必須調整。由於它是一個與音樂同步的節拍器拍子,所以它非常關鍵,因爲輕微的轉變會使它聽起來不那麼有節奏。有什麼方法可以直接從AVFoundation API中計算延遲?或者爲了補償它或以另一種方式播放節拍器,以便AVPlayer和NSSound播放之間沒有延遲?我將不勝感激關於此的一些鏈接或想法。 謝謝! Dominique 比利時Arpege音樂公司解決AVPlayer和NSSound之間的延遲問題

+0

你沒有提到你如何安排聲音。聽起來就像你可能使用NSTimer一樣 - 它有各種各樣的問題。如果這個問題變成了如何可靠地安排節拍器聲音的問題之一,那麼這是我以前在這裏回答過的一個問題。讓我看看我能否找到答案。 – marko

+0

感謝Marko。爲了安排聲音播放,我確實使用了一個NSTimer,但是我將它設置在一個單獨的線程中,並帶有自己的事件循環,僅用於此目的。這樣它非常穩定,沒有任何故障。唯一的問題是如何計算我必須加入或減去這個節拍器的延遲,因爲它似乎與機器有關。該線程正在觀看AVPlayer時間值,並在適當的時候觸發聲音播放。 – Dominique

回答

0

我建議您尋找一個低級音頻庫來管理和即時播放您的音樂。 BASS是一個基於音頻單元的低級庫,可以對流進行精確,精確和快速的控制。通過操作緩衝區,並可能創建一個混音器流(請參閱文檔),您應該可以在任何設備上立即播放聲音。具體來說,請先查看緩衝聲音,並將其保存在內存中,因爲聲音很短。