我們非常需要降低iOS上UDP監聽器的延遲。iOS UDP服務器消息處理延遲太高〜35-40ms
我們正在實施RTP-MIDI的替代方案,該方案在iOS上運行,但依靠簡單的UDP服務器來接收MIDI數據。我們遇到的問題是RTP-MIDI能夠比iOS上簡單的UDP服務器快20ms左右的速度接收和處理消息。
我們寫了3個不同的代碼庫,以試圖消除代碼中的其他內容導致不可接受的延遲的可能性。最後,我們得出結論:iPAD實際接收數據包的時間與數據包實際呈現給我們的應用程序讀取的時間之間存在滯後。
我們用示波器測量了它。每次發送Note-On命令時,我們都會在發送設備的其中一個探測器上發出一個脈衝。我們把另一個探頭連接到ipad的音頻輸出。我們觸發了脈衝並測量了聽到音頻所花費的時間。由此產生的時間是一個可靠的平均45ms,最少38個,最少的情況下最多53個。
我們用RTP-MIDI(一個更詳細的協議)做了完全相同的測試,並且它快了20ms。我擁有的最佳預感是,作爲CoreMIDI的一部分,RTPMIDI可能會比我們的應用獲得更高的優先級,但只是承認這並不能幫助我們。我們真的需要弄清楚如何解決這個問題。我們希望我們的應用程序與RTPMIDI一樣快,甚至更快,我認爲這應該是理論上可行的,因爲我們的協議不會太雜亂。由於其期刊系統設計不當,我們宣佈RTPMIDI對於我們的應用程序是不可接受的。
所測試的3個代碼庫爲:
從PGMidi例子這將轉發逐字經由虛擬MIDI端口上UDP接收的GarageBand等
數據導出的目標C執行Objective-C源代碼由有經驗的音頻引擎開發人員編寫,內置低延遲正弦波發生器用於輸出。
Unity3D應用程序,基於Mono的UDP監聽器和內置的聲音字體合成器插件。
所有3種實現方式在範圍測試中顯示了相同的測量結果。
任何有關如何更快地獲得我們的消息的見解將不勝感激。在尋找答案
新的信息時:
我四處尋找答案,我發現this question這似乎表明,如果通信是TCP,而不是UDP的的iOS可能會更快速地響應。這需要一些努力來測試我們的部分,因爲我們的嵌入式系統缺乏TCP功能,只有UDP。我很好奇我是否可以保持打開TCP連接的唯一目的是保持Wifi響應。瘋狂的想法?我不知道。有沒有人試過這個?我需要這樣做盡可能實時。
爲什麼你不想使用RTP-MIDI? –
我們不想使用RTP-MIDI,因爲在MIDI流中發現損壞後,我們確定Apple的RTP-MIDI的實現存在缺陷,並且協議本身也存在相當的缺陷。例如,我使用App Store中流行的.MID文件播放器來播放16聲道MIDI文件,並通過RTP-MIDI將它從最新的iPAD發送到Macbook Pro,並且經常損壞MIDI流。 –
我比較了通過RTPMIDI與原始文件進行錄製的同時還通過wireshark進行捕獲。在很多情況下,Apple的日誌恢復代碼都會做出一些非常可怕和錯誤的事情,即使在原作中找不到原來無法找到的作品的筆記。我跑了很多測試。由於RTPMIDI中期刊設計的任意複雜性,我不應該責怪他們有錯誤的恢復。如果您想要更詳細的評估,請查看[本博客](http://blog.digitaltundra.com/?p=24) –