123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /*******************************************************************************
- The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
- Technology released in source code form as part of the game integration package.
- The content of this file may not be used without valid licenses to the
- AUDIOKINETIC Wwise Technology.
- Note that the use of the game engine is subject to the Unreal(R) Engine End User
- License Agreement at https://www.unrealengine.com/en-US/eula/unreal
-
- License Usage
-
- Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
- this file in accordance with the end user license agreement provided with the
- software or, alternatively, in accordance with the terms contained
- in a written agreement between you and Audiokinetic Inc.
- Copyright (c) 2023 Audiokinetic Inc.
- *******************************************************************************/
- /*------------------------------------------------------------------------------------
- SGenerateSoundBanks.cpp
- ------------------------------------------------------------------------------------*/
- #include "SGenerateSoundBanks.h"
- #include "AkAudioBankGenerationHelpers.h"
- #include "AkAudioDevice.h"
- #include "AkSettingsPerUser.h"
- #include "WwiseUEFeatures.h"
- #include "AssetManagement/AkGenerateSoundBanksTask.h"
- #include "AssetRegistry/AssetRegistryModule.h"
- #include "Dialogs/Dialogs.h"
- #include "Dom/JsonObject.h"
- #include "Framework/Application/SlateApplication.h"
- #include "GenericPlatform/GenericPlatformFile.h"
- #if UE_5_0_OR_LATER
- #include "HAL/PlatformFileManager.h"
- #else
- #include "HAL/PlatformFilemanager.h"
- #endif
- #include "Interfaces/ITargetPlatform.h"
- #include "Interfaces/ITargetPlatformManagerModule.h"
- #include "Misc/FileHelper.h"
- #include "Misc/MessageDialog.h"
- #include "Platforms/AkPlatformInfo.h"
- #include "Platforms/AkUEPlatform.h"
- #include "Serialization/JsonReader.h"
- #include "Serialization/JsonSerializer.h"
- #include "Widgets/Input/SButton.h"
- #include "Widgets/Input/SCheckBox.h"
- #include "AssetManagement/WwiseProjectInfo.h"
- #define LOCTEXT_NAMESPACE "AkAudio"
- SGenerateSoundBanks::SGenerateSoundBanks()
- {
- }
- void SGenerateSoundBanks::Construct(const FArguments& InArgs)
- {
- // Generate the list of banks and platforms
- PopulateList();
- if (PlatformNames.Num() == 0)
- {
- FMessageDialog::Open(EAppMsgType::Ok, NSLOCTEXT("AkAudio", "Warning_Ak_PlatformSupported", "Unable to generate Sound Data. Please select a valid Wwise supported platform in the 'Project Settings > Project > Supported Platforms' dialog."));
- return;
- }
- bool skipLanguages = false;
- if (auto* akSettingsPerUser = GetDefault<UAkSettingsPerUser>())
- {
- skipLanguages = akSettingsPerUser->SoundDataGenerationSkipLanguage;
- }
- // Build the form
- ChildSlot
- [
- SNew(SVerticalBox)
- +SVerticalBox::Slot()
- .Padding(0, 8)
- .FillHeight(1.f)
- [
- SNew(SHorizontalBox)
- +SHorizontalBox::Slot()
- .Padding(0, 8)
- .AutoWidth()
- [
- SNew(SBorder)
- .BorderImage( FAkAppStyle::Get().GetBrush("ToolPanel.GroupBorder") )
- [
- SAssignNew(PlatformList, SListView<TSharedPtr<FString>>)
- .ListItemsSource(&PlatformNames)
- .SelectionMode(ESelectionMode::Multi)
- .OnGenerateRow(this, &SGenerateSoundBanks::MakePlatformListItemWidget)
- .HeaderRow
- (
- SNew(SHeaderRow)
- + SHeaderRow::Column("Available Platforms")
- [
- SNew(SBorder)
- .Padding(5)
- .Content()
- [
- SNew(STextBlock)
- .Text(LOCTEXT("AkAvailablePlatforms", "Available Platforms"))
- ]
- ]
- )
- ]
- ]
- + SHorizontalBox::Slot()
- .Padding(0, 8)
- .AutoWidth()
- [
- SNew(SBorder)
- .BorderImage(FAkAppStyle::Get().GetBrush("ToolPanel.GroupBorder"))
- [
- SAssignNew(LanguageList, SListView<TSharedPtr<FString>>)
- .ListItemsSource(&LanguagesNames)
- .SelectionMode(ESelectionMode::Multi)
- .OnGenerateRow(this, &SGenerateSoundBanks::MakePlatformListItemWidget)
- .HeaderRow
- (
- SNew(SHeaderRow)
- + SHeaderRow::Column("Available Languages")
- [
- SNew(SBorder)
- .Padding(5)
- .Content()
- [
- SNew(STextBlock)
- .Text(LOCTEXT("AkAvailableLanguages", "Available Languages"))
- ]
- ]
- )
- ]
- ]
- ]
- + SVerticalBox::Slot()
- .AutoHeight()
- .Padding(0, 4)
- .HAlign(HAlign_Left)
- [
- SAssignNew(SkipLanguagesCheckBox, SCheckBox)
- .IsChecked(skipLanguages ? ECheckBoxState::Checked : ECheckBoxState::Unchecked)
- .Content()
- [
- SNew(STextBlock)
- .Text(LOCTEXT("AkSkipVOFiles", "Skip generation of localized assets"))
- ]
- ]
- +SVerticalBox::Slot()
- .AutoHeight()
- .Padding(0, 4)
- .HAlign(HAlign_Right)
- [
- SNew(SButton)
- .Text(LOCTEXT("AkGenerate", "Generate"))
- .OnClicked(this, &SGenerateSoundBanks::OnGenerateButtonClicked)
- ]
- ];
- // Select all the platforms
- for (const auto& platform : PlatformNames)
- {
- PlatformList->SetItemSelection(platform, true);
- }
- // Select all the languages
- for (const auto& language : LanguagesNames)
- {
- LanguageList->SetItemSelection(language, true);
- }
- }
- void SGenerateSoundBanks::PopulateList(void)
- {
- // Get platforms in Wwise project
- wwiseProjectInfo.Parse();
- PlatformNames.Empty();
- for (const auto& WwisePlatform : wwiseProjectInfo.GetSupportedPlatforms())
- {
- const FString WwisePlatformName = WwisePlatform.Name;
- if (!WwisePlatformName.IsEmpty() &&
- !PlatformNames.ContainsByPredicate([WwisePlatformName](TSharedPtr<FString> Platform) { return WwisePlatformName == *Platform; }))
- {
- PlatformNames.Add(MakeShared<FString>(WwisePlatformName));
- }
- }
- LanguagesNames.Empty();
- for (const auto& language : wwiseProjectInfo.GetSupportedLanguages())
- {
- LanguagesNames.Add(MakeShared<FString>(language.Name));
- }
- }
- FReply SGenerateSoundBanks::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyboardEvent )
- {
- if( InKeyboardEvent.GetKey() == EKeys::Enter )
- {
- return OnGenerateButtonClicked();
- }
- else if( InKeyboardEvent.GetKey() == EKeys::Escape )
- {
- TSharedPtr<SWindow> ParentWindow = FSlateApplication::Get().FindWidgetWindow(AsShared());
- ParentWindow->RequestDestroyWindow();
- return FReply::Handled();
- }
- return SCompoundWidget::OnKeyDown(MyGeometry, InKeyboardEvent);
- }
- FReply SGenerateSoundBanks::OnGenerateButtonClicked()
- {
- TArray< TSharedPtr<FString> > PlatformsToGenerate = PlatformList->GetSelectedItems();
- if( PlatformsToGenerate.Num() <= 0 )
- {
- FMessageDialog::Open( EAppMsgType::Ok, NSLOCTEXT("AkAudio", "Warning_Ak_NoAkPlatformsSelected", "At least one platform must be selected."));
- return FReply::Handled();
- }
- AkSoundBankGenerationManager::FInitParameters InitParameters;
- for (auto& platform : PlatformsToGenerate)
- {
- InitParameters.Platforms.Add(*platform.Get());
- }
- TArray<TSharedPtr<FString>> languagesToGenerate = LanguageList->GetSelectedItems();
- for (auto& selectedLanguage : languagesToGenerate)
- {
- for (auto& entry : wwiseProjectInfo.GetSupportedLanguages())
- {
- if (*selectedLanguage == entry.Name)
- {
- InitParameters.Languages.Add(entry.Name);
- break;
- }
- }
- }
- InitParameters.SkipLanguages = SkipLanguagesCheckBox->IsChecked();
- if (auto* akSettingsPerUser = GetMutableDefault<UAkSettingsPerUser>())
- {
- akSettingsPerUser->SoundDataGenerationSkipLanguage = InitParameters.SkipLanguages;
- akSettingsPerUser->SaveConfig();
- }
- if (FAkWaapiClient::IsProjectLoaded())
- {
- InitParameters.GenerationMode = AkSoundBankGenerationManager::ESoundBankGenerationMode::WAAPI;
- }
-
- AkGenerateSoundBanksTask::CreateAndExecuteTask(InitParameters);
- TSharedPtr<SWindow> ParentWindow = FSlateApplication::Get().FindWidgetWindow(AsShared());
- ParentWindow->RequestDestroyWindow();
- return FReply::Handled();
- }
- TSharedRef<ITableRow> SGenerateSoundBanks::MakePlatformListItemWidget(TSharedPtr<FString> Platform, const TSharedRef<STableViewBase>& OwnerTable)
- {
- return
- SNew(STableRow< TSharedPtr<FString> >, OwnerTable)
- [
- SNew(SBox)
- .WidthOverride(300)
- [
- SNew(STextBlock)
- .Text(FText::FromString(*Platform))
- ]
- ];
- }
- #undef LOCTEXT_NAMESPACE
|