Community Q&A

Welcome to Audiokinetic’s community-driven Q&A forum. This is the place where Wwise and Strata users help each other out. For direct help from our team, please use the Support Tickets page. To report a bug, use the Bug Report option in the Audiokinetic Launcher. (Note that Bug Reports submitted to the Q&A forum will be rejected. Using our dedicated Bug Report system ensures your report is seen by the right people and has the best chance of being fixed.)

To get the best answers quickly, follow these tips when posting a question:

  • Be Specific: What are you trying to achieve, or what specific issue are you running into?
  • Include Key Details: Include details like your Wwise and game engine versions, operating system, etc.
  • Explain What You've Tried: Let others know what troubleshooting steps you've already taken.
  • Focus on the Facts: Describe the technical facts of your issue. Focusing on the problem helps others find a solution quickly.

0 votes

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.

in General Discussion by SNAPtz (260 points)

1 Answer

0 votes
 
Best answer

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

by Philippe M. (580 points)
selected by 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.
...