menu
 

コミュニティQ&A

Audiokineticのコミュニティ主導のQ&Aフォーラムへようこそ。ここはWwiseとStrataのユーザのみなさまがお互いに協力し合う場です。弊社チームによる直接のサポートをご希望の場合はサポートチケットページをご利用ください。バグを報告するには、Audiokinetic LauncherのBug Reportオプションをご利用ください。(Q&AフォーラムではBug Reportを受け付けておりませんのでご注意ください。専用のBug Reportシステムをご利用いただくことで、バグの報告が適切な担当部門に届き、修正される可能性が高まります。)

最適な回答を迅速に得られるよう、ご質問を投稿される際は以下のヒントをご参考ください。

  • 具体的に示す:何を達成したいのか、またはどんな問題に直面しているのかを具体的に示してください。
  • 重要な詳細情報を含める:Wwiseとゲームエンジンのバージョンやご利用のOSなど詳細情報を記載してください。
  • 試したことを説明する:すでに試してみたトラブルシューティングの手順を教えてください。
  • 事実に焦点を当てる:問題の技術的な事実を記載してください。問題に焦点を当てることで、ほかのユーザのみなさまが解決策を迅速に見つけやすくなります。

0 支持

Hello,

I am trying to utilize all of my outputs from my soundcard which are 8 aux outputs + 2 optical outputs.

I would like to create a UE blueprint callable function to post event to secondary outputs.

I have added another system audio device called "System_Optical" and created a master bus for it.

I did follow and combine some of tutorials and findings from users and the documents such as 

Integrating Secondary Outputs (audiokinetic.com)

Blog | Audiokinetic

Q & A | Audiokinetic

I got to a point where I could get my secondary outputs ID and Name correctly but I couldn't do AddOutput();

The result was "AK_NotInitialized(102)".

I don't really know where to start fixing. If anyone has any idea, please shed some light.

Here is my code (C++ Actor Class):


void AMyActor_WwiseCustom::PostEventOn2ndOutput(UAkAudioEvent* Event, UAkComponent* in_pComponent)
{
    FString deviceName = "S/PDIF";
    FString WwiseDeviceName = "System_Optical";
    AKRESULT res = AK_Fail;

    TTuple <AkUInt32, FString> result;
    AkUInt32 immDeviceCount = AK::GetWindowsDeviceCount(AkDeviceState_Active);

    for (AkUInt32 i = 0; i < immDeviceCount; ++i) {
        AkUInt32 deviceId = AK_INVALID_DEVICE_ID;
        AK::GetWindowsDevice(i, deviceId, NULL, AkDeviceState_Active);

        auto deviceNameWstr = AK::GetWindowsDeviceName(i, deviceId, AkDeviceState_Active);
        UE_LOG(LogAkAudio, Warning, TEXT("Windows Audio Device: %s"), deviceNameWstr);

        if (FString(deviceNameWstr).Contains(deviceName)) {
            result.Key = deviceId;
            result.Value = FString(deviceNameWstr);
            break;
        }
    }

    AkOutputDeviceID deviceId = AK_INVALID_DEVICE_ID;

    UE_LOG(LogAkAudio, Warning, TEXT("Device ID: %i"), result.Key);

    if (result.Key) {
        FOnAkPostEventCallback nullCallback;
        AkOutputSettings outputSettings(*WwiseDeviceName, result.Key);
        auto gameObjID = in_pComponent->GetAkGameObjectID();
        res = AK::SoundEngine::AddOutput(outputSettings, &deviceId, &gameObjID, 1);

        UAkGameplayStatics::PostEvent(Event, GetOwner(), int32(0), nullCallback);
    }
}


Really appreciate.

SNAPtz (260 ポイント) General Discussion

回答 1

0 支持
 
ベストアンサー

Hi there,

AK_NotInitialized means AddOutput() was called before the Sound Engine was in state where it is able to add a secondary output. The requirements are:

  1. The Sound Engine is initialized
  2. The Init bank is loaded
  3. The primary output device has been initialized (this is done automatically when the Init bank is finished loading).

If you want to add multiple outputs during the startup phase of your project, the best way would probably be to register a callback the primary device initialization using AK::SoundEngine::RegisterAudioDeviceStatusCallback. When you are notified that the primary device is up and running, now is the time to start adding secondary outputs.

Hope this helps,

Philippe Milot

Philippe M. (580 ポイント)
SNAPtz 選択
Thank you very much Philippe. Luckily for us, Wwise exposed AddOutput in version 2022.1.6 which made it much easier to setup and call. We get it to work. However, I'll keep your answer in mind, in case we really need to go that route.
...