04-09-2020 02:49 PM
I don't have access to the source file so I can't determine why this error is occurring, but I'm pretty sure I'm doing something wrong. Below is my attempt:
IOnlineSessionPtr SessionInterface = Online::GetSessionInterface();
IOnlineVoicePtr VoiceInterface = Online::GetVoiceInterface();
IOnlineIdentityPtr IdentityInterface = Online::GetIdentityInterface();
FNamedOnlineSession *Session = SessionInterface->GetNamedSession(NAME_GameSession);
TSharedPtr<const FUniqueNetId> UserId = IdentityInterface->GetUniquePlayerId(0);
if (Session) {
UE_LOG(LogTemp, Warning, TEXT("UOculusVOIP::GetVoipData() - Session is valid"));
TArray< TSharedRef<const FUniqueNetId> > SessionPlayers = Session->RegisteredPlayers;
UE_LOG(LogTemp, Warning, TEXT("LocalOwnerId: %s"), *Session->LocalOwnerId->ToString());
UE_LOG(LogTemp, Warning, TEXT("UOculusVOIP::GetVoipData() - Fetching Voip PCM Data"));
UE_LOG(LogTemp, Warning, TEXT("UOculusVOIP::GetVoipData() - Max Output Buffer Size: %d"), ovr_Voip_GetOutputBufferMaxSize());
ovrID id = 1234567890123456; // example id: either host or client (Oculus User ID)
size_t BufferCount = ovr_Voip_GetPCMSize(id);
float* OutBufferFloat = (float*)malloc(ovr_Voip_GetOutputBufferMaxSize() * sizeof(float));
int16_t* OutBufferInt = (int16_t*)malloc(ovr_Voip_GetOutputBufferMaxSize() * sizeof(int16_t));
size_t pcmSize = ovr_Voip_GetPCM(id, OutBufferInt, BufferCount);
UE_LOG(LogTemp, Warning, TEXT("UOculusVoip::GetVoipData() - ovr_Voip_GetPCM = %d"), pcmSize);
// ovr_Voip_GetPCMFloat(id, OutBufferFloat, BufferCount);
}
else
{
UE_LOG(LogTemp, Error, TEXT("UOculusVOIP::GetVoipData() - Session is invalid"));
}
Update - I just discovered the GetRemoteTalkerOutput() method, but it's returning nullptr. It says that it will return null if the VoiceEngine does not support tapping incoming audio.Below is my attempt, but once again I'm probably doing something wrong.
Audio::FPatchOutputStrongPtr RemoteOut = VoiceInterface->GetRemoteTalkerOutput();
if (RemoteOut.IsValid())
{
int32 SampleCount = RemoteOut->GetNumSamplesAvailable();
float* AudioOutBuffer = (float*)malloc(sizeof(float) * SampleCount);
MicOut->PopAudio(AudioOutBuffer, SampleCount, false);
UE_LOG(LogTemp, Error, TEXT("RemoteOut Audio Popped"));
}
else
{
UE_LOG(LogTemp, Error, TEXT("RemoteOut is invalid"));
}
04-09-2020 03:55 PM