本文整理汇总了C++中FAudioDeviceManager::StopSoundsUsingResource方法的典型用法代码示例。如果您正苦于以下问题:C++ FAudioDeviceManager::StopSoundsUsingResource方法的具体用法?C++ FAudioDeviceManager::StopSoundsUsingResource怎么用?C++ FAudioDeviceManager::StopSoundsUsingResource使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FAudioDeviceManager
的用法示例。
在下文中一共展示了FAudioDeviceManager::StopSoundsUsingResource方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FreeResources
void USoundWave::FreeResources()
{
check(IsInAudioThread());
// Housekeeping of stats
DEC_FLOAT_STAT_BY( STAT_AudioBufferTime, Duration );
DEC_FLOAT_STAT_BY( STAT_AudioBufferTimeChannels, NumChannels * Duration );
// GEngine is NULL during script compilation and GEngine->Client and its audio device might be
// destroyed first during the exit purge.
if( GEngine && !GExitPurge )
{
// Notify the audio device to free the bulk data associated with this wave.
FAudioDeviceManager* AudioDeviceManager = GEngine->GetAudioDeviceManager();
if (AudioDeviceManager)
{
AudioDeviceManager->StopSoundsUsingResource(this);
AudioDeviceManager->FreeResource(this);
}
}
if (CachedRealtimeFirstBuffer)
{
FMemory::Free(CachedRealtimeFirstBuffer);
CachedRealtimeFirstBuffer = nullptr;
}
// Just in case the data was created but never uploaded
if (RawPCMData)
{
FMemory::Free(RawPCMData);
RawPCMData = nullptr;
}
// Remove the compressed copy of the data
RemoveAudioResource();
// Stat housekeeping
DEC_DWORD_STAT_BY(STAT_AudioMemorySize, TrackedMemoryUsage);
DEC_DWORD_STAT_BY(STAT_AudioMemory, TrackedMemoryUsage);
TrackedMemoryUsage = 0;
ResourceID = 0;
bDynamicResource = false;
DecompressionType = DTYPE_Setup;
bDecompressedFromOgg = 0;
USoundWave* SoundWave = this;
FAudioThread::RunCommandOnGameThread([SoundWave]()
{
SoundWave->ResourceState = ESoundWaveResourceState::Freed;
}, TStatId());
}
示例2: Decoder
UObject* UMP3SoundFactory::FactoryCreateBinary(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, const TCHAR* Type, const uint8*& Buffer, const uint8* BufferEnd, FFeedbackContext* Warn)
{
FEditorDelegates::OnAssetPreImport.Broadcast(this, Class, InParent, Name, Type);
if (mpg123_init == nullptr)
{
Warn->Logf(ELogVerbosity::Error, TEXT("Function pointer was null. Was %s found?"), DLL_NAME);
FEditorDelegates::OnAssetPostImport.Broadcast(this, nullptr);
return nullptr;
}
// if the sound already exists, remember the user settings
USoundWave* ExistingSound = FindObject<USoundWave>(InParent, *Name.ToString());
// stop playing the file, if it already exists (e.g. reimport)
TArray<UAudioComponent*> ComponentsToRestart;
FAudioDeviceManager* AudioDeviceManager = GEngine->GetAudioDeviceManager();
if (AudioDeviceManager && ExistingSound)
{
AudioDeviceManager->StopSoundsUsingResource(ExistingSound, ComponentsToRestart);
}
// Read the mp3 header and make sure we have valid data
UMP3Decoder Decoder(Warn);
Decoder.Init(Buffer, BufferEnd);
if (Decoder.BitsPerSample != 16)
{
Warn->Logf(ELogVerbosity::Error, TEXT("Unreal only supports 16bit WAVE data (%s)."), *Name.ToString());
FEditorDelegates::OnAssetPostImport.Broadcast(this, nullptr);
return nullptr;
}
if (Decoder.Channels != 1 && Decoder.Channels != 2)
{
Warn->Logf(ELogVerbosity::Error, TEXT("Unreal only supports 1-2 channel WAVE data (Mono/Stereo). (%s)."), *Name.ToString());
FEditorDelegates::OnAssetPostImport.Broadcast(this, nullptr);
return nullptr;
}
//on reimport, reuse settings, wipe data. otherwise create new. (UE4 WAVE import has some more checks, maybe implement, too?)
USoundWave* Sound;
if (ExistingSound && bMP3SoundFactoryIsReimport)
{
Sound = ExistingSound;
Sound->FreeResources();
Sound->InvalidateCompressedData();
}
else
{
Sound = NewObject<USoundWave>(InParent, Name, Flags);
}
Sound->AssetImportData->Update(GetCurrentFilename());
TArray<uint8> RawWavBuffer;
RawWavBuffer.Reserve((BufferEnd - Buffer) * 16);
//actual decoding
Decoder.Decode(RawWavBuffer);
Sound->RawData.Lock(LOCK_READ_WRITE);
void* LockedData = Sound->RawData.Realloc(RawWavBuffer.Num() * RawWavBuffer.GetTypeSize());
FMemory::Memcpy(LockedData, RawWavBuffer.GetData(), RawWavBuffer.Num() * RawWavBuffer.GetTypeSize());
Sound->RawData.Unlock();
RawWavBuffer.Empty();
// Calculate duration.
Sound->Duration = (float)Decoder.SizeInBytes / Decoder.Samplerate / Decoder.Channels / (BITS_PER_SAMPLE / 8);
Sound->SampleRate = Decoder.Samplerate;
Sound->NumChannels = Decoder.Channels;
Sound->RawPCMDataSize = Decoder.SizeInBytes;
FEditorDelegates::OnAssetPostImport.Broadcast(this, Sound);
if (ExistingSound)
{
Sound->PostEditChange();
}
for (int32 ComponentIndex = 0; ComponentIndex < ComponentsToRestart.Num(); ++ComponentIndex)
{
ComponentsToRestart[ComponentIndex]->Play();
}
return Sound;
}