How to Reliably Access USoundWave PCM Data (with or without FAsyncAudioDecompress)

void UMyClass::UseCannedAudioData(USoundWave* CannedAudio)
{
if (CannedAudio->RawPCMData == NULL)
{
// @todo Sequencer optimize - We might want to generate the data when we generate the texture
// and then discard the data afterwards, though that might be a perf hit traded for better memory usage
FAudioDevice* AudioDevice = GEngine->GetMainAudioDevice();
if (AudioDevice)
{
AudioDevice->StopAllSounds(true);

        			EDecompressionType DecompressionType = CannedAudio->DecompressionType;
        			CannedAudio->DecompressionType = DTYPE_Native;
        
        			if (CannedAudio->InitAudioResource(AudioDevice->GetRuntimeFormat(CannedAudio)) && (CannedAudio->DecompressionType != DTYPE_RealTime || CannedAudio->CachedRealtimeFirstBuffer == nullptr))
        			{
        				FAsyncAudioDecompress TempDecompress(CannedAudio);
        				TempDecompress.StartSynchronousTask();
        			}
        
        			CannedAudio->DecompressionType = DecompressionType;
        		}
        	}
        
        	UE_LOG(LogTemp, Warning, TEXT("UseCannedAudioData, RawPCMDataSize: %d"), CannedAudio->RawPCMDataSize);
        
        	TArray<uint8> AudioBuffer(CannedAudio->RawPCMData, CannedAudio->RawPCMDataSize);
        	VoiceData = AudioBuffer;
        	UE_LOG(LogTemp, Warning, TEXT("UseCannedAudioData, voice data size: %d"), VoiceData.Num());
        }