必要條件
本逐步解說假設您對 PlayFab Party 中的語音聊天有基本的了解。平台支援
即時音訊操作並非在所有平台上皆可使用。雖然與即時音訊操作相關的方法存在於統一的跨平台標頭中,但目前僅針對 Windows、XBOX 和 PlayStation® 5 實作。這些方法在其他平台上會傳回錯誤。音訊串流
即時音訊操作引進了音訊串流的概念,用於從程式庫擷取音訊或將音訊提交至程式庫。音訊串流有兩種類型。第一種是來源串流。來源串流用於從聊天控制項擷取音訊。每個聊天控制項只能有一個來源串流,稱為語音串流。對於本機聊天控制項,這用於擷取麥克風輸入;對於遠端聊天控制項,這用於擷取傳入的語音音訊。如果聊天控制項的語音串流存在,程式庫會將該聊天控制項的來源音訊重新導向至其語音串流,而不是自動處理音訊。對於本機聊天控制項,這表示會將麥克風音訊重新導向至語音串流,而不是自動編碼並傳輸;對於遠端聊天控制項,這表示會將傳入的語音音訊重新導向至語音串流,而不是自動將其提交給每個本機聊天控制項播放。來源串流以PartyAudioManipulationSourceStream 表示。
第二種串流類型是接收串流。接收串流用於將音訊提交至聊天控制項。只有本機聊天控制項可以擁有接收串流,而且每個本機聊天控制項可以有兩個,分別稱為擷取串流和轉譯串流。如果聊天控制項的擷取串流存在,程式庫會從擷取串流 (而非麥克風) 提取音訊,以進行編碼並傳輸至其他聊天控制項。如果聊天控制項的轉譯串流存在,程式庫會從轉譯串流提取音訊並播放,此外也會播放自動從遠端聊天控制項播放的語音聊天音訊。提交至擷取串流的音訊會作為本機聊天控制項的麥克風輸入;提交至轉譯串流的音訊會播放或「轉譯」至本機聊天控制項的音訊輸出裝置。接收串流以 PartyAudioManipulationSinkStream 表示。
設定音訊串流
根據預設,程式庫會處理音訊擷取、傳輸和播放。因此,建立聊天控制項時不會有任何音訊串流。您可以透過串流設定方法為聊天控制項建立一或多個串流:PartyLocalChatControl::ConfigureAudioManipulationCaptureStream()、PartyLocalChatControl::ConfigureAudioManipulationRenderStream() 和 PartyChatControl::ConfigureAudioManipulationVoiceStream()。設定完成後,之後可透過 PartyLocalChatControl::GetAudioManipulationCaptureStream()、PartyLocalChatControl::GetAudioManipulationRenderStream() 和 PartyChatControl::GetAudioManipulationVoiceStream() 擷取串流
每個串流設定方法都可讓您指定要從串流擷取或提交至串流的音訊格式。如需支援格式的詳細資訊,請參閱各串流設定方法的參考文件。
從來源串流擷取音訊
您可以透過PartyAudioManipulationSourceStream::GetNextBuffer() 從來源串流擷取音訊。偵測到語音活動時,大約每 40 毫秒就會有一個新的緩衝區可用。如果沒有可用的緩衝區,呼叫會成功並提供長度為零的緩衝區。可透過 PartyAudioManipulationSourceStream::GetAvailableBufferCount() 擷取當下可用的緩衝區總數。
為了提高效率,GetNextBuffer() 提供的緩衝區會指向程式庫的記憶體,而不是複製整個緩衝區。您可以選擇就地修改它。處理完緩衝區後,您應該透過 PartyAudioManipulationSourceStream::ReturnBuffer() 釋放它,讓程式庫可以回收其記憶體。可以在傳回任何緩衝區之前擷取多個緩衝區,而且緩衝區不需要依照擷取的順序傳回。
將音訊提交至接收串流
您可以透過PartyAudioManipulationSinkStream::SubmitBuffer() 將音訊提交至接收串流。程式庫會複製緩衝區,因此可在呼叫完成後立即釋放。
程式庫每 40 毫秒會取用已提交至接收串流的 40 毫秒音訊。為了避免音訊中斷,應以固定速率提交音訊。
