• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.

Making Audio Enhancers Work on Windows

Joined
Jan 30, 2018
Messages
420 (0.19/day)
It seem the chat had remove long time ago. The download they provide just Virtual Audio Cable with other audio enhachers. Nothing make by them.

Android user can use Ainur Sauron to keep audio quailty when using muiltple audio enhachers.

Using Creative chaining APOs cannot chain SFX EFX, such as Dolby UWP.

Using Compsite APOs Reg Key with muiltple APO GUIDs which cause audio distortion.

equalizer apo use orginial apo options only make you use equalizer apo plus only one audio enhacers.

On Legacy Realtek HDA Audio, it use Realtek APO. The Realtek APO have some connection with other APO dll file. If your driver support to use one of audio enhacer, it with use that audio enhacer APO dll without change LFX, GFX, SFX, MFX, EFX reg key. e.g. Realtek APO + SRS APO. Realtek HDA Panel UI chnage and the audio device property page will add some of the control.

It is still not possible to use DTS Ultra II on unsupport PC. The control DTS Ultra II is still on Realtek HDA Panel. It seem there have a DTS exe running as service to working with Control Panel.

The UWP version of Realtek Audio Control. You can find bang & olufsen logo, dts headphone x logo, and others logo on the Windows Apps file. I know when you click dts hpx, asus sonic focus, sonic radar, dts custom on the Realtek Audio Control. It will lanuch its own individual apps. Idk B&O control panel is inside the Realtek UWP App or on another individual apo.

B&O and Beat Audio UI found on old HP PC. Their UI like DTS Sound/SRS on the HP PC. They may be just a copycat of DTS, just change the logo.


 
Last edited:
Joined
May 9, 2014
Messages
24 (0.01/day)
This ended up making my SPDIF invisible when I "Restored" the registry endpoint backup for the device to uninstall Dolby Atmos.

It now refuses to show in my Sounds panel - even after restoring as Admin with FX Configurator. Ended up restarting..which fixed it and the SPDIF is now a different GUID? Can OP explain this? What's the point of the registry endpoint backup, if restoring to remove effects doesn't even work and makes SPDIF or devices invisible until restart?

Is it possible to have Realtek drivers installed same time as APO? Or should it only be used with High Definition Audio/Windows drivers? Just claims [NotPresent] which isn't true. Also...GUID has changed. Not sure why.

Lastly how does one get Dolby Atmos Headphones tech? Little confused how Dolby Atmos UWP does anything with 2.0 content. Very confusing. Is it faking Atmos from 2.0 sources? And how does it act when a true Atmos source is played?
 
Last edited:
Joined
Jul 9, 2017
Messages
89 (0.04/day)
- Beats no longer support. After being acquired by Apple. Many PCs support Beats Audio, after upgrading to Windows 10, Beats no longer works

- B & O is used to replace Beats Audio. HP computers, after 2015 will be B & O

- DTS Sound / DTS Studio Sound with Realtek-based interface is an old version. And only compatible with computer is supported. The latest version of DTS, Inc. DTS Audio with better quality

I think, now audio players are interested in sound quality, rather than software with different interfaces. In fact, it's just EQ

Alanfox: you can improve is for better sound. In versions that you release.

I'm used audio by dldolby.blogspot.com. It has good sound quality.
 
Joined
Jan 30, 2018
Messages
420 (0.19/day)
This ended up making my SPDIF invisible when I "Restored" the registry endpoint backup for the device to uninstall Dolby Atmos.

It now refuses to show in my Sounds panel - even after restoring as Admin with FX Configurator. Ended up restarting..which fixed it and the SPDIF is now a different GUID? Can OP explain this? What's the point of the registry endpoint backup, if restoring to remove effects doesn't even work and makes SPDIF or devices invisible until restart?

Is it possible to have Realtek drivers installed same time as APO? Or should it only be used with High Definition Audio/Windows drivers? Just claims [NotPresent] which isn't true. Also...GUID has changed. Not sure why.

Lastly how does one get Dolby Atmos Headphones tech? Little confused how Dolby Atmos UWP does anything with 2.0 content. Very confusing. Is it faking Atmos from 2.0 sources? And how does it act when a true Atmos source is played?

Endpoint Registry backup the whole HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{Device GUID}.
The registry key contains APO LFX GFX SFX MFX EFX that used on the audio driver. The equalizer on Realtek HDA will not work if you have choose other audio enhancers. You need to restore endpoint registry in order to use the default APO LFX GFX SFX MFX EFX that use on your audio driver inf install file.
The device GUID change which you update the audio driver. Windows 10 auto update driver, silently you need to disable driver updates.

When you update driver, or change ms audio driver to realtek driver. It will create a new device GUID, the old device GUID will show not present.

Is it possible to have Realtek drivers installed same time as APO. Just you need modded realtek audio driver. But you need to have modded realtek audio driver. And also I need to recreate a modded realtek audio driver every new realtek audio driver release. This is why I make APO Driver.

Dolby Atmos Headphones Tech on using digital signal processing (DSP) technology (APO on Windows) to transform content from a two-channel (stereo) source into surround sound. Then surround sound output in two encoded channels. According to my acknowledge and Dolby website https://www.dolby.com/us/en/technologies/dolby-headphone.html

- Beats no longer support. After being acquired by Apple. Many PCs support Beats Audio, after upgrading to Windows 10, Beats no longer works

- B & O is used to replace Beats Audio. HP computers, after 2015 will be B & O

- DTS Sound / DTS Studio Sound with Realtek-based interface is an old version. And only compatible with computer is supported. The latest version of DTS, Inc. DTS Audio with better quality

I think, now audio players are interested in sound quality, rather than software with different interfaces. In fact, it's just EQ

Alanfox: you can improve is for better sound. In versions that you release.

I'm used audio by dldolby.blogspot.com. It has good sound quality.

The Old UI of DTS Sound / DTS Studio Sound installer still update (28/3/2018).

PIC.png
 
Last edited:
Joined
May 9, 2014
Messages
24 (0.01/day)
Endpoint Registry backup the whole HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{Device GUID}.
The registry key contains APO LFX GFX SFX MFX EFX that used on the audio driver. The equalizer on Realtek HDA will not work if you have choose other audio enhancers. You need to restore endpoint registry in order to use the default APO LFX GFX SFX MFX EFX that use on your audio driver inf install file.
The device GUID change which you update the audio driver. Windows 10 auto update driver, silently you need to disable driver updates..

Endpoint registry does not seem to be an exact 1:1 backup of regedit if done manually. There is a difference in the files (try and check yourself). In any case, once "restored" in your program - device DISAPPEARS until reboot. Why? This is never a problem when making regedit backup manually and restoring! Something is wrong with your FX Configurator Regedit Restore of endpoint.

Device GUID changes also once restarted - with no update done because of bad restore of endpoint via FXConfigurator! Also Driver updates are disabled!
 
Joined
Aug 24, 2018
Messages
818 (0.40/day)
System Name Dell Inspiron 7375
Processor AMD Ryzen™ 7 2700U Mobile Processor with Radeon™ RX Vega 10 Graphics
Memory 16GB (total) 2400MHz DDR4 SODIMM
Video Card(s) Radeon™ RX Vega 10 Graphics
Storage SanDisk X600 SATA SSD 512GB
Display(s) BOE NV13FHM
Audio Device(s) Realtek ALC3253 (Dell Labelling) ALC255 (Real name)
Feature request: DDL on any endpoint.

The GFX in DHTv4 only do DDL, as described on page 45 on the Dolby® PCEE v4 Applications Manual. It can also be used with any other APOs (tested with SRS premium sound, DDP HT, Dolby Atmos for Gaming UWP).

So, I would recommend that this APO is selectable via a checkbox, with label "add DDP"

It can be paired easily with any LFX APO (e.g. SRS, DDP), some LFX+GFX APOs (tested with DTS surround sensation).

On SFX/MFX/EFX systems, the settings are:

Code:
[GFX]
{56E00778-C664-4BB5-AA2B-CA6F14840BB3}
[CompositeEFX]
{56E00778-C664-4BB5-AA2B-CA6F14840BB3}
[ProcessingEFX]
{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}
[Notes]
DDL

The guid of the APO need to be placed to be placed in both GFX and EFX text box.

Also, if using DAX2/DAX3/Atmos UWP, all current contents of EFX must be placed in MFX.

E.g.

Code:
[GFX]
{56E00778-C664-4BB5-AA2B-CA6F14840BB3}
[CompositeSFX]
{D9916F9F-99F7-11E7-BF21-6C0B849889E1}
[CompositeMFX]
{D9916F9D-99F7-11E7-BF21-6C0B849889E1}
[CompositeEFX]
{56E00778-C664-4BB5-AA2B-CA6F14840BB3}
[CompositeOSFX]
{D9916F9F-99F7-11E7-BF21-6C0B849889E1}
[ProcessingSFx]
{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}
{4780004E-7133-41D8-8C74-660DADD2C0EE}
{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}
[ProcessingMFX]
{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}
{4780004E-7133-41D8-8C74-660DADD2C0EE}
{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}
[ProcessingEFX]
{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}
[ProcessingOSFX]
{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}
{4780004E-7133-41D8-8C74-660DADD2C0EE}
{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}
[ProcessingOMFX]

As it can be seen, all contents previously in EFX was taken off to the MFX section.

Only with Creative UWP it seems quite hard to implement together (though I have not investigated much with that).

Such a feature will allow for easier usage of DDL on any capable endpoint (onboard optical, HDMI (useful if using HDMI ARC receiver), USB-SPDIF endpoint.



Configuring Dolby XML v3.3



Code:
<endpoint type="internal_speaker" brand="Generic" model="Default" operating_mode="normal" fs="48000" total_count="2" front_count="2" side_count="0" height_count="0" has_subwoofer="0">



To my knowledge, all parts of the audio system that output discrete sound is a channel. So, 5.1 system is 6 channel, 5 full frequency, 1 LFE.

Front channels are all channels that are in front of the system. So, a 5.1 system will have 3 front speakers: Left, Centre, Right.

Side channels are all the rest of the channels on a traditional configuration.

So, a 5.1 system has 2 side speakers: Side Left and Side Right.

A 7.1 system has 4 side speakers: Side Left, Side Right, Rear Left, Rear Right.

The height channels are the new channels present in an Atmos system. 5.1.2 system has 2 height/overhead channels. Height left, height right.

Using this configuration, I use this for DDL:

Code:
<endpoint type="internal_speaker" brand="Generic" model="Default" operating_mode="normal" fs="48000" total_count="6" front_count="3" side_count="2" height_count="0" has_subwoofer="1">

This works perfectly for DDL.

I would use this for 7.1:

Code:
<endpoint type="internal_speaker" brand="Generic" model="Default" operating_mode="normal" fs="48000" total_count="8" front_count="3" side_count="4" height_count="0" has_subwoofer="1">
 
Joined
Jul 9, 2017
Messages
89 (0.04/day)
Best comment. However, if the motherboard supports height channels, then it is actually Dolby Atmos. And if there are only 8 channels or 6 channels, it's just Dolby Digital Plus and Dolby Digital.
 
Joined
Jan 30, 2018
Messages
420 (0.19/day)
Dolby Digital Live have 5.1 features. Dolby Digital Plus have 5.1 and 7.1 features.
You can see the word "Stream" in the following code in "Interface IOptimalSoundDolbyDigitalLive" and "StreamReset" word on DS1 which is making the audio real-time encoding (Live).
On Windows 8.1 and later, it has new Stream Effect function (SFX APO). I think you don't need DDL because Dolby Atmos had use SFX APO to make it real-time encoding.

PCEE4 COM
Code:
//PCEE4 Dolby DLL (ANALOG)
//Version: 1.0
DolbyDLLlib;
GUID = {245A61CC-F611-4702-AD0B-B7ABC8C95553};

CoClass OptimalSoundDolbyDigitalLiveCoclass;
GUID = {1314AA9D-5AF7-4F1F-AD10-734156E1FF73};

Interface IOptimalSoundDolbyDigitalLive;
GUID = {4D004159-391D-4671-B2FA-B4F51E9DFFD7};
  function DDLStreamReset(dialogNormValue: UINT): HResult; stdcall;

Interface IOptimalSoundAudioProcessor;
GUID = {A7DA0F9C-3E44-4436-84F0-11E34286F63B};
  function Initialize(message: UINT; wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
  function StreamReset(pInputFormat: ^_UNCOMPRESSEDAUDIOFORMAT; pOutputFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;
  function ProcessAudio(pInputData: ^R4; out pOutputData: ^R4; numFrames: UINT): HResult; stdcall;
  function BufferSilent: HResult; stdcall;

Alias UINT_PTR;
  UI8

Alias LONG_PTR;
  I8

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IOptimalSoundVersion;
GUID = {47B5C2DC-0B15-464C-9AFB-19460AB6ACC1};
  function GetVersionInfo(versionSize: UINT; out pOptVersion: ^UI1): HResult; stdcall;

CoClass OptimalSoundDolbyPCEE4Coclass;
GUID = {BC95C973-E2C1-4DF5-8878-6CCE0CB568FE};

Interface IOptimalSoundDolbyPCEE4;
GUID = {D57B5AFC-2AFD-4B30-B0B2-481FF57F6076};
  function Configure(effectiveEndpoint: PCEE4EffectiveEndpoint; pEndpointDesc: ^PCEE4EndpointDesc; monoSpeakerFill: INT; libLoad: INT; limitPCEE4: INT; pPatchSet: ^PCEE4PatchSet; pPresetPatchEnables: ^INT; pGlobalPatchEnables: ^INT; endpointStreamVolume: R4; endpointMasterVolume: R4; volumeMaximizerTarget_db: R4; metaData: CArray): HResult; stdcall;
  function ChangeVolume(endpointStreamVolume: R4; endpointMasterVolume: R4): HResult; stdcall;
  function ChangePresetPatchEnable(presetTech: PCEE4PresetTechnology; enablePatch: INT): HResult; stdcall;
  function ChangePresetPatchData(pPatchData: ^PCEE4PresetPatchUnion): HResult; stdcall;
  function ChangeGlobalPatchEnable(globalTech: PCEE4GlobalTechnology; enablePatch: INT): HResult; stdcall;
  function ChangeGlobalPatchData(pPatchData: ^PCEE4GlobalPatchUnion): HResult; stdcall;
  function GetLatencyFrames(out pLatencyFrames: ^UINT): HResult; stdcall;
  function GetVisualizationData(out pNumberOfBands: ^I4; out pDisplayGains: ^R4; out pDisplayExcitation: ^R4): HResult; stdcall;
  function TestControl(debugMask: UINT; getFPUExceptions: INT; resetFPUExceptions: INT; out pExceptionCount: ^UINT; out pUnderflowExceptionCount: ^UINT; out pInvalidExceptionCount: ^UINT): HResult; stdcall;

Alias PCEE4EffectiveEndpoint;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0001

Enum __MIDL___MIDL_itf_dolbydll_0001_0073_0001;
  PCEE4EffectiveUnknown = 0;
  PCEE4EffectiveInternalSpeakers = 1;
  PCEE4EffectiveExternalSpeakers = 2;
  PCEE4EffectiveHeadphones = 3;
  PCEE4EffectiveSPDIF = 4;
  PCEE4EffectiveHDMI = 5;
  PCEE4EffectiveMaxEndpoints = 6;

Record PCEE4EndpointDesc;
  m_inChannelMask: UINT;
  m_outChannelMask: UINT;
  m_outSpeakersMask: UINT;
  m_outSpeakerSizeMask: UINT;

Record PCEE4PatchSet;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_dynamicEQAugmented: DynamicEQAugmented;
  m_standardEQ: StandardEQPatch;
  m_headphone: DolbyHeadphonePatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

Alias DolbyVolumePatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0004

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0004;
  structVersion: UINT;
  dolbyVolumeLevelerAmount: UINT;
  dolbyVolumeLevelerOnElseOff: INT;
  dolbyVolumeModelerOnElseOff: INT;
  dolbyVolumeLevelerInTarget: R4;
  dolbyVolumeLevelerOutTarget: R4;
  dolbyVolumeModelerCalibration: R4;

Alias DialogEnhancementPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0005

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0005;
  structVersion: UINT;
  dialogEnhancmentCenter: R4;
  dialogEnhancementDucking: R4;

Record DynamicEQAugmented;
  m_dynamicEQPatch: DynamicEQPatch;
  m_targetSelectionIndex: UINT;

Alias DynamicEQPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0006

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0006;
  structVersion: UINT;
  dynEqFreqBands: UINT;
  dynEqTargetBands: UINT;
  dynEqAmount: R4;
  dynEqFreq: CArray;
  dynEqTarget: CArray;

Alias StandardEQPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0007

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0007;
  structVersion: UINT;
  stdEqFreqBands: UINT;
  stdEqGainBands: UINT;
  stdEqFreq: CArray;
  stdEqGain: CArray;

Alias DolbyHeadphonePatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0008

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0008;
  structVersion: UINT;
  dolbyHeadphoneSurroundBoost: R4;
  dolbyHeaphoneReverbGain: R4;

Alias VirtualSurroundPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0011

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0011;
  structVersion: UINT;
  virtualSurroundSpeakerAngle: R4;
  virtualSurroundSurroundBoost: R4;

Alias NextGenSurroundPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0010

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0010;
  structVersion: UINT;

Alias PeakLimiterPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0009

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0009;
  structVersion: UINT;
  peakLimiterGain: R4;

Alias AudioRegulatorPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0013

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0013;
  structVersion: UINT;
  audioRegulatorFreqBands: UINT;
  audioRegulatorThreshBands: CArray;
  audioRegulatorIsolateBands: UINT;
  audioRegulatorOverdrive: R4;
  audioRegulatorTPAmount: R4;
  audioRegulatorFreq: CArray;
  audioRegulatorThresh: CArray;
  audioRegulatorIsolate: CArray;

Alias AudioOptimizerPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0015

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0015;
  structVersion: UINT;
  audioOptimizerOutChannels: UINT;
  audioOptimizerFreqBands: UINT;
  audioOptimizerGainBands: CArray;
  audioOptimizerFreq: CArray;
  audioOptimizerGain: CArray;

Enum PCEE4PresetTechnology;
  ePresetNoTech = 0;
  eVolumeTech = 1;
  eEnhancementTech = 2;
  eDynamicEQTech = 3;
  eStandardEQTech = 4;
  eHeadphoneTech = 5;
  eVirtualSurroundTech = 6;
  eNGSurroundTech = 7;
  eNumberPCEE4PresetTechnologies = 8;

Record PCEE4PresetPatchUnion;
  m_presetTech: PCEE4PresetTechnology;
  m_patch: __MIDL___MIDL_itf_dolbydll_0001_0073_0016;

Union __MIDL___MIDL_itf_dolbydll_0001_0073_0016;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_dynamicEQ: DynamicEQAugmented;
  m_standardEQ: StandardEQPatch;
  m_headphone: DolbyHeadphonePatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;

Enum PCEE4GlobalTechnology;
  eGlobalNoTech = 0;
  ePeakLimiterTech = 1;
  eAudioRegulatorTech = 2;
  eAudioOptimizerTech = 3;
  eNumberPCEE4GlobalTechnologies = 4;

Record PCEE4GlobalPatchUnion;
  m_globalTech: PCEE4GlobalTechnology;
  m_patch: __MIDL___MIDL_itf_dolbydll_0001_0073_0017;

Union __MIDL___MIDL_itf_dolbydll_0001_0073_0017;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

CoClass OptimalSoundDolbySRCCoclass;
GUID = {8C4BEBA7-72FE-4ED3-86CF-9760915AE13D};

Interface IOptimalSoundDolbySampleRateConverter;
GUID = {FBAE5A5F-B18D-4543-A3F0-82F47D08A12B};

PCEE3 COM
Code:
//Dolby DLL
//Version: 1.0
DolbyDLLlib;
GUID = {22E0CB87-9325-4B0F-8ECC-21B271EC81AA};

CoClass OptimalSoundDolbyDigitalLiveCoclass;
GUID = {0DC39FF3-7F96-405E-BC77-1323866D97CF};

Interface IOptimalSoundDolbyDigitalLive;
GUID = {8C64EDA6-163F-4B60-A3FF-1153FA14A61C};
  function DDLStreamReset(dialogNormValue: UINT): HResult; stdcall;

Interface IOptimalSoundAudioProcessor;
GUID = {FE5C8363-3770-4646-9997-BC0991A42719};
  function Initialize(message: UINT; wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
  function StreamReset(pInputFormat: ^_UNCOMPRESSEDAUDIOFORMAT; pOutputFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;
  function ProcessAudio(pInputData: ^R4; out pOutputData: ^R4; numFrames: UINT): HResult; stdcall;
  function BufferSilent: HResult; stdcall;

Alias UINT_PTR;
  UI8

Alias LONG_PTR;
  I8

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IOptimalSoundVersion;
GUID = {C5DE27D6-2E7C-48CD-9784-1B1B83A6AFE0};
  function GetVersionInfo(versionSize: UINT; out pOptVersion: ^UI1): HResult; stdcall;

CoClass OptimalSoundDolbyPCEE3UseCaseCoclass;
GUID = {D6B23B09-BBB6-43A2-837F-BB2AA9237A30};

Interface IOptimalSoundDolbyPCEE3UseCase;
GUID = {49CB534B-9603-4983-9978-87BE87CA0E96};
  function LoadCoeffs(sampleRate: UINT; numberLeftCoeffs: UINT; pLeftCoeffs: ^I2; leftDivisor: I2; numberRightCoeffs: UINT; pRightCoeffs: ^I2; rightDivisor: I2): HResult; stdcall;
  function Configure(isNetbook: I4; isPremium: I4; useCase: UINT; audioEnhancerEnable: I4; surroundEnable: I4; monoSpeakerFill: I4; gain_dB: INT; TDAS_SSE_Width: UINT; TDAS_NB_Cutoff: UINT; TDAS_NB_Boost: UINT; TDAS_NB_Level: UINT; TDAS_HFE_Depth: UINT; stageCaptureEnable: I4): HResult; stdcall;
  function GetLatencyFrames(out pLatencyFrames: ^UINT): HResult; stdcall;
  function TestControl(getFPUExceptions: I4; resetFPUExceptions: I4; closeStream: I4; out pExceptionCount: ^UINT; out pUnderflowExceptionCount: ^UINT): HResult; stdcall;

CoClass OptimalSoundDolbyHeadphone2Coclass;
GUID = {5D062D6A-4D8D-405C-9D41-36517A79D799};

Interface IOptimalSoundDolbyHeadphone2;
GUID = {E6A81A64-A729-4478-9617-43397A4945DD};

CoClass OptimalSoundDolbyProLogicIIxCoclass;
GUID = {340DAC03-D632-449D-A211-4182115FA4D3};

Interface IOptimalSoundDolbyProLogicIIx;
GUID = {D2506FA5-12CD-4EAD-8C97-E99E38C9231A};
  function Configure(movieElseMusicMode: I4; centerWidth: UINT): HResult; stdcall;

CoClass OptimalSoundDolbyTDASCoclass;
GUID = {CF74FB2A-DBB2-4C8D-9C8E-0424AB05C810};

Interface IOptimalSoundDolbyTDAS;
GUID = {ABCDD6D6-B816-4B2B-B216-4A1BDE48F259};
  function SetTDASParameter(feature: INT; parameter: INT; value: INT): HResult; stdcall;

CoClass OptimalSoundDolbySRCCoclass;
GUID = {001348B9-D4F7-4008-A509-DFAE98D73CD0};

Interface IOptimalSoundDolbySampleRateConverter;
GUID = {48086A00-FBC6-4263-8FD7-BDA7942FB7FD};

CoClass OptimalSoundDolbyINVCoclass;
GUID = {E32A710E-8693-44E2-87FF-6B578E845C50};

Interface IOptimalSoundDolbyInverseFilter;
GUID = {ECE6B2DC-B678-4EA1-BA84-88E875F6EA52};
  function LoadCoeffs(numberLeftCoeffs: UINT; pLeftCoeffs: ^I2; leftDivisor: I2; numberRightCoeffs: UINT; pRightCoeffs: ^I2; rightDivisor: I2): HResult; stdcall;

DS1 COM
Code:
//DS1 Dolby DLL (ANALOG)
//Version: 1.0
DolbyDLLlib;
GUID = {245A61CC-F611-4702-AD0B-B7ABC8C95553};

CoClass OptimalSoundDolbyPCEE4Coclass;
GUID = {266ADF9D-0053-4228-B1DD-B09177D552C0};

Interface IOptimalSoundDolbyPCEE4;
GUID = {D57B5AFC-2AFD-4B30-B0B2-481FF57F6076};
  function Configure(effectiveEndpoint: PCEE4EffectiveEndpoint; pEndpointDesc: ^PCEE4EndpointDesc; monoSpeakerFill: INT; libLoad: INT; limitPCEE4: INT; pPatchSet: ^PCEE4PatchSet; volumeEnable: INT; enhancementEnable: INT; virtualSurroundEnable: INT; NGSurroundEnable: INT; dynEQEnable: INT; stdEQEnable: INT; pGlobalPatchEnables: ^INT; endpointStreamVolume: R4; endpointMasterVolume: R4; volumeMaximizerTarget_db: R4; metaData: CArray): HResult; stdcall;
  function ChangeVolume(endpointStreamVolume: R4; endpointMasterVolume: R4): HResult; stdcall;
  function ChangePresetPatchEnable(presetTech: PCEE4PresetTechnology; enablePatch: INT; EQTargetIndex: UINT): HResult; stdcall;
  function ChangePresetPatchData(pPatchData: ^PCEE4PresetPatchUnion): HResult; stdcall;
  function ChangeGlobalPatchEnable(globalTech: PCEE4GlobalTechnology; enablePatch: INT): HResult; stdcall;
  function ChangeGlobalPatchData(pPatchData: ^PCEE4GlobalPatchUnion): HResult; stdcall;
  function GetLatencyFrames(out pLatencyFrames: ^UINT): HResult; stdcall;
  function GetVisualizationData(out pNumberOfBands: ^I4; out pDisplayGains: ^R4; out pDisplayExcitation: ^R4): HResult; stdcall;
  function TestControl(getFPUExceptions: INT; resetFPUExceptions: INT; out pExceptionCount: ^UINT; out pUnderflowExceptionCount: ^UINT; out pInvalidExceptionCount: ^UINT): HResult; stdcall;

Interface IOptimalSoundAudioProcessor;
GUID = {A7DA0F9C-3E44-4436-84F0-11E34286F63B};
  function Initialize(message: UINT; wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
  function StreamReset(pInputFormat: ^_UNCOMPRESSEDAUDIOFORMAT; pOutputFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;
  function ProcessAudio(pInputData: ^R4; out pOutputData: ^R4; numFrames: UINT): HResult; stdcall;
  function BufferSilent: HResult; stdcall;

Alias UINT_PTR;
  UI8

Alias LONG_PTR;
  I8

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Alias PCEE4EffectiveEndpoint;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0001

Enum __MIDL___MIDL_itf_DolbyDLL_0001_0074_0001;
  PCEE4EffectiveUnknown = 0;
  PCEE4EffectiveInternalSpeakers = 1;
  PCEE4EffectiveExternalSpeakers = 2;
  PCEE4EffectiveHeadphones = 3;
  PCEE4EffectiveSPDIF = 4;
  PCEE4EffectiveHDMI = 5;
  PCEE4EffectiveMaxEndpoints = 6;

Record PCEE4EndpointDesc;
  m_inChannelMask: UINT;
  m_outChannelMask: UINT;
  m_outSpeakersMask: UINT;
  m_outSpeakerSizeMask: UINT;

Record PCEE4PatchSet;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_EQ: EqPatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

Alias DolbyVolumePatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0004

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0004;
  structVersion: UINT;
  dolbyVolumeLevelerAmount: UINT;
  dolbyVolumeLevelerOnElseOff: INT;
  dolbyVolumeModelerOnElseOff: INT;
  dolbyVolumeLevelerInTarget: R4;
  dolbyVolumeLevelerOutTarget: R4;
  dolbyVolumeModelerCalibration: R4;

Alias DialogEnhancementPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0005

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0005;
  structVersion: UINT;
  dialogEnhancmentCenter: R4;
  dialogEnhancementDucking: R4;

Alias EqPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0006

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0006;
  structVersion: UINT;
  dynEqFreqBands: UINT;
  dynEqTargetBands: UINT;
  dynEqAmount: R4;
  stdEqFreqBands: UINT;
  stdEqGainBands: UINT;
  dynEqFreq: CArray;
  dynEqTarget: CArray;
  stdEqFreq: CArray;
  stdEqGain: CArray;

Alias VirtualSurroundPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0009

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0009;
  structVersion: UINT;
  virtualSurroundSpeakerAngle: R4;
  virtualSurroundSurroundBoost: R4;
  virtualSurroundReverbGain: R4;

Alias NextGenSurroundPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0008

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0008;
  structVersion: UINT;

Alias PeakLimiterPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0007

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0007;
  structVersion: UINT;
  peakLimiterGain: R4;

Alias AudioRegulatorPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0011

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0011;
  structVersion: UINT;
  audioRegulatorFreqBands: UINT;
  audioRegulatorThreshBands: CArray;
  audioRegulatorIsolateBands: UINT;
  audioRegulatorOverdrive: R4;
  audioRegulatorTPAmount: R4;
  audioRegulatorFreq: CArray;
  audioRegulatorThresh: CArray;
  audioRegulatorIsolate: CArray;

Alias AudioOptimizerPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0013

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0013;
  structVersion: UINT;
  audioOptimizerOutChannels: UINT;
  audioOptimizerFreqBands: UINT;
  audioOptimizerGainBands: CArray;
  audioOptimizerFreq: CArray;
  audioOptimizerGain: CArray;

Enum PCEE4PresetTechnology;
  ePresetNoTech = 0;
  eVolumeTech = 1;
  eEnhancementTech = 2;
  eEQTech = 3;
  eVirtualSurroundTech = 4;
  eNGSurroundTech = 5;
  eNumberPCEE4PresetTechnologies = 6;

Record PCEE4PresetPatchUnion;
  m_presetTech: PCEE4PresetTechnology;
  m_patch: __MIDL___MIDL_itf_DolbyDLL_0001_0074_0014;

Union __MIDL___MIDL_itf_DolbyDLL_0001_0074_0014;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_EQ: EqPatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;

Enum PCEE4GlobalTechnology;
  eGlobalNoTech = 0;
  ePeakLimiterTech = 1;
  eAudioRegulatorTech = 2;
  eAudioOptimizerTech = 3;
  eNumberPCEE4GlobalTechnologies = 4;

Record PCEE4GlobalPatchUnion;
  m_globalTech: PCEE4GlobalTechnology;
  m_patch: __MIDL___MIDL_itf_DolbyDLL_0001_0074_0015;

Union __MIDL___MIDL_itf_DolbyDLL_0001_0074_0015;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

Interface IOptimalSoundVersion;
GUID = {47B5C2DC-0B15-464C-9AFB-19460AB6ACC1};
  function GetVersionInfo(versionSize: UINT; out pOptVersion: ^UI1): HResult; stdcall;

CoClass OptimalSoundDolbySRCCoclass;
GUID = {8C4BEBA7-72FE-4ED3-86CF-9760915AE13D};

Interface IOptimalSoundDolbySampleRateConverter;
GUID = {FBAE5A5F-B18D-4543-A3F0-82F47D08A12B};

This is what I found. I dont know much about this because is for audio driver or audio enhancers dev.
NAudio, Nahimic 3 dev use this to make his software.
https://github.com/naudio/NAudio
Compressed audio formats used on Windows 10

https://docs.microsoft.com/en-us/windows/desktop/coreaudio/representing-formats-for-iec-61937-transmissions
 
Last edited:
Joined
Aug 24, 2018
Messages
818 (0.40/day)
System Name Dell Inspiron 7375
Processor AMD Ryzen™ 7 2700U Mobile Processor with Radeon™ RX Vega 10 Graphics
Memory 16GB (total) 2400MHz DDR4 SODIMM
Video Card(s) Radeon™ RX Vega 10 Graphics
Storage SanDisk X600 SATA SSD 512GB
Display(s) BOE NV13FHM
Audio Device(s) Realtek ALC3253 (Dell Labelling) ALC255 (Real name)
Dolby Digital Live have 5.1 features. Dolby Digital Plus have 5.1 and 7.1 features.
You can see the word "Stream" in the following code in "Interface IOptimalSoundDolbyDigitalLive" and "StreamReset" word on DS1 which is making the audio real-time encoding (Live).
On Windows 8.1 and later, it has new Stream Effect function (SFX APO). I think you don't need DDL because Dolby Atmos had use SFX APO to make it real-time encoding.

PCEE4
Code:
//PCEE4 Dolby DLL (ANALOG)
//Version: 1.0
DolbyDLLlib;
GUID = {245A61CC-F611-4702-AD0B-B7ABC8C95553};

CoClass OptimalSoundDolbyDigitalLiveCoclass;
GUID = {1314AA9D-5AF7-4F1F-AD10-734156E1FF73};

Interface IOptimalSoundDolbyDigitalLive;
GUID = {4D004159-391D-4671-B2FA-B4F51E9DFFD7};
  function DDLStreamReset(dialogNormValue: UINT): HResult; stdcall;

Interface IOptimalSoundAudioProcessor;
GUID = {A7DA0F9C-3E44-4436-84F0-11E34286F63B};
  function Initialize(message: UINT; wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
  function StreamReset(pInputFormat: ^_UNCOMPRESSEDAUDIOFORMAT; pOutputFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;
  function ProcessAudio(pInputData: ^R4; out pOutputData: ^R4; numFrames: UINT): HResult; stdcall;
  function BufferSilent: HResult; stdcall;

Alias UINT_PTR;
  UI8

Alias LONG_PTR;
  I8

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IOptimalSoundVersion;
GUID = {47B5C2DC-0B15-464C-9AFB-19460AB6ACC1};
  function GetVersionInfo(versionSize: UINT; out pOptVersion: ^UI1): HResult; stdcall;

CoClass OptimalSoundDolbyPCEE4Coclass;
GUID = {BC95C973-E2C1-4DF5-8878-6CCE0CB568FE};

Interface IOptimalSoundDolbyPCEE4;
GUID = {D57B5AFC-2AFD-4B30-B0B2-481FF57F6076};
  function Configure(effectiveEndpoint: PCEE4EffectiveEndpoint; pEndpointDesc: ^PCEE4EndpointDesc; monoSpeakerFill: INT; libLoad: INT; limitPCEE4: INT; pPatchSet: ^PCEE4PatchSet; pPresetPatchEnables: ^INT; pGlobalPatchEnables: ^INT; endpointStreamVolume: R4; endpointMasterVolume: R4; volumeMaximizerTarget_db: R4; metaData: CArray): HResult; stdcall;
  function ChangeVolume(endpointStreamVolume: R4; endpointMasterVolume: R4): HResult; stdcall;
  function ChangePresetPatchEnable(presetTech: PCEE4PresetTechnology; enablePatch: INT): HResult; stdcall;
  function ChangePresetPatchData(pPatchData: ^PCEE4PresetPatchUnion): HResult; stdcall;
  function ChangeGlobalPatchEnable(globalTech: PCEE4GlobalTechnology; enablePatch: INT): HResult; stdcall;
  function ChangeGlobalPatchData(pPatchData: ^PCEE4GlobalPatchUnion): HResult; stdcall;
  function GetLatencyFrames(out pLatencyFrames: ^UINT): HResult; stdcall;
  function GetVisualizationData(out pNumberOfBands: ^I4; out pDisplayGains: ^R4; out pDisplayExcitation: ^R4): HResult; stdcall;
  function TestControl(debugMask: UINT; getFPUExceptions: INT; resetFPUExceptions: INT; out pExceptionCount: ^UINT; out pUnderflowExceptionCount: ^UINT; out pInvalidExceptionCount: ^UINT): HResult; stdcall;

Alias PCEE4EffectiveEndpoint;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0001

Enum __MIDL___MIDL_itf_dolbydll_0001_0073_0001;
  PCEE4EffectiveUnknown = 0;
  PCEE4EffectiveInternalSpeakers = 1;
  PCEE4EffectiveExternalSpeakers = 2;
  PCEE4EffectiveHeadphones = 3;
  PCEE4EffectiveSPDIF = 4;
  PCEE4EffectiveHDMI = 5;
  PCEE4EffectiveMaxEndpoints = 6;

Record PCEE4EndpointDesc;
  m_inChannelMask: UINT;
  m_outChannelMask: UINT;
  m_outSpeakersMask: UINT;
  m_outSpeakerSizeMask: UINT;

Record PCEE4PatchSet;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_dynamicEQAugmented: DynamicEQAugmented;
  m_standardEQ: StandardEQPatch;
  m_headphone: DolbyHeadphonePatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

Alias DolbyVolumePatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0004

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0004;
  structVersion: UINT;
  dolbyVolumeLevelerAmount: UINT;
  dolbyVolumeLevelerOnElseOff: INT;
  dolbyVolumeModelerOnElseOff: INT;
  dolbyVolumeLevelerInTarget: R4;
  dolbyVolumeLevelerOutTarget: R4;
  dolbyVolumeModelerCalibration: R4;

Alias DialogEnhancementPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0005

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0005;
  structVersion: UINT;
  dialogEnhancmentCenter: R4;
  dialogEnhancementDucking: R4;

Record DynamicEQAugmented;
  m_dynamicEQPatch: DynamicEQPatch;
  m_targetSelectionIndex: UINT;

Alias DynamicEQPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0006

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0006;
  structVersion: UINT;
  dynEqFreqBands: UINT;
  dynEqTargetBands: UINT;
  dynEqAmount: R4;
  dynEqFreq: CArray;
  dynEqTarget: CArray;

Alias StandardEQPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0007

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0007;
  structVersion: UINT;
  stdEqFreqBands: UINT;
  stdEqGainBands: UINT;
  stdEqFreq: CArray;
  stdEqGain: CArray;

Alias DolbyHeadphonePatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0008

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0008;
  structVersion: UINT;
  dolbyHeadphoneSurroundBoost: R4;
  dolbyHeaphoneReverbGain: R4;

Alias VirtualSurroundPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0011

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0011;
  structVersion: UINT;
  virtualSurroundSpeakerAngle: R4;
  virtualSurroundSurroundBoost: R4;

Alias NextGenSurroundPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0010

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0010;
  structVersion: UINT;

Alias PeakLimiterPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0009

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0009;
  structVersion: UINT;
  peakLimiterGain: R4;

Alias AudioRegulatorPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0013

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0013;
  structVersion: UINT;
  audioRegulatorFreqBands: UINT;
  audioRegulatorThreshBands: CArray;
  audioRegulatorIsolateBands: UINT;
  audioRegulatorOverdrive: R4;
  audioRegulatorTPAmount: R4;
  audioRegulatorFreq: CArray;
  audioRegulatorThresh: CArray;
  audioRegulatorIsolate: CArray;

Alias AudioOptimizerPatch;
  __MIDL___MIDL_itf_dolbydll_0001_0073_0015

Record __MIDL___MIDL_itf_dolbydll_0001_0073_0015;
  structVersion: UINT;
  audioOptimizerOutChannels: UINT;
  audioOptimizerFreqBands: UINT;
  audioOptimizerGainBands: CArray;
  audioOptimizerFreq: CArray;
  audioOptimizerGain: CArray;

Enum PCEE4PresetTechnology;
  ePresetNoTech = 0;
  eVolumeTech = 1;
  eEnhancementTech = 2;
  eDynamicEQTech = 3;
  eStandardEQTech = 4;
  eHeadphoneTech = 5;
  eVirtualSurroundTech = 6;
  eNGSurroundTech = 7;
  eNumberPCEE4PresetTechnologies = 8;

Record PCEE4PresetPatchUnion;
  m_presetTech: PCEE4PresetTechnology;
  m_patch: __MIDL___MIDL_itf_dolbydll_0001_0073_0016;

Union __MIDL___MIDL_itf_dolbydll_0001_0073_0016;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_dynamicEQ: DynamicEQAugmented;
  m_standardEQ: StandardEQPatch;
  m_headphone: DolbyHeadphonePatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;

Enum PCEE4GlobalTechnology;
  eGlobalNoTech = 0;
  ePeakLimiterTech = 1;
  eAudioRegulatorTech = 2;
  eAudioOptimizerTech = 3;
  eNumberPCEE4GlobalTechnologies = 4;

Record PCEE4GlobalPatchUnion;
  m_globalTech: PCEE4GlobalTechnology;
  m_patch: __MIDL___MIDL_itf_dolbydll_0001_0073_0017;

Union __MIDL___MIDL_itf_dolbydll_0001_0073_0017;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

CoClass OptimalSoundDolbySRCCoclass;
GUID = {8C4BEBA7-72FE-4ED3-86CF-9760915AE13D};

Interface IOptimalSoundDolbySampleRateConverter;
GUID = {FBAE5A5F-B18D-4543-A3F0-82F47D08A12B};

PCEE3
Code:
//Dolby DLL
//Version: 1.0
DolbyDLLlib;
GUID = {22E0CB87-9325-4B0F-8ECC-21B271EC81AA};

CoClass OptimalSoundDolbyDigitalLiveCoclass;
GUID = {0DC39FF3-7F96-405E-BC77-1323866D97CF};

Interface IOptimalSoundDolbyDigitalLive;
GUID = {8C64EDA6-163F-4B60-A3FF-1153FA14A61C};
  function DDLStreamReset(dialogNormValue: UINT): HResult; stdcall;

Interface IOptimalSoundAudioProcessor;
GUID = {FE5C8363-3770-4646-9997-BC0991A42719};
  function Initialize(message: UINT; wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
  function StreamReset(pInputFormat: ^_UNCOMPRESSEDAUDIOFORMAT; pOutputFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;
  function ProcessAudio(pInputData: ^R4; out pOutputData: ^R4; numFrames: UINT): HResult; stdcall;
  function BufferSilent: HResult; stdcall;

Alias UINT_PTR;
  UI8

Alias LONG_PTR;
  I8

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IOptimalSoundVersion;
GUID = {C5DE27D6-2E7C-48CD-9784-1B1B83A6AFE0};
  function GetVersionInfo(versionSize: UINT; out pOptVersion: ^UI1): HResult; stdcall;

CoClass OptimalSoundDolbyPCEE3UseCaseCoclass;
GUID = {D6B23B09-BBB6-43A2-837F-BB2AA9237A30};

Interface IOptimalSoundDolbyPCEE3UseCase;
GUID = {49CB534B-9603-4983-9978-87BE87CA0E96};
  function LoadCoeffs(sampleRate: UINT; numberLeftCoeffs: UINT; pLeftCoeffs: ^I2; leftDivisor: I2; numberRightCoeffs: UINT; pRightCoeffs: ^I2; rightDivisor: I2): HResult; stdcall;
  function Configure(isNetbook: I4; isPremium: I4; useCase: UINT; audioEnhancerEnable: I4; surroundEnable: I4; monoSpeakerFill: I4; gain_dB: INT; TDAS_SSE_Width: UINT; TDAS_NB_Cutoff: UINT; TDAS_NB_Boost: UINT; TDAS_NB_Level: UINT; TDAS_HFE_Depth: UINT; stageCaptureEnable: I4): HResult; stdcall;
  function GetLatencyFrames(out pLatencyFrames: ^UINT): HResult; stdcall;
  function TestControl(getFPUExceptions: I4; resetFPUExceptions: I4; closeStream: I4; out pExceptionCount: ^UINT; out pUnderflowExceptionCount: ^UINT): HResult; stdcall;

CoClass OptimalSoundDolbyHeadphone2Coclass;
GUID = {5D062D6A-4D8D-405C-9D41-36517A79D799};

Interface IOptimalSoundDolbyHeadphone2;
GUID = {E6A81A64-A729-4478-9617-43397A4945DD};

CoClass OptimalSoundDolbyProLogicIIxCoclass;
GUID = {340DAC03-D632-449D-A211-4182115FA4D3};

Interface IOptimalSoundDolbyProLogicIIx;
GUID = {D2506FA5-12CD-4EAD-8C97-E99E38C9231A};
  function Configure(movieElseMusicMode: I4; centerWidth: UINT): HResult; stdcall;

CoClass OptimalSoundDolbyTDASCoclass;
GUID = {CF74FB2A-DBB2-4C8D-9C8E-0424AB05C810};

Interface IOptimalSoundDolbyTDAS;
GUID = {ABCDD6D6-B816-4B2B-B216-4A1BDE48F259};
  function SetTDASParameter(feature: INT; parameter: INT; value: INT): HResult; stdcall;

CoClass OptimalSoundDolbySRCCoclass;
GUID = {001348B9-D4F7-4008-A509-DFAE98D73CD0};

Interface IOptimalSoundDolbySampleRateConverter;
GUID = {48086A00-FBC6-4263-8FD7-BDA7942FB7FD};

CoClass OptimalSoundDolbyINVCoclass;
GUID = {E32A710E-8693-44E2-87FF-6B578E845C50};

Interface IOptimalSoundDolbyInverseFilter;
GUID = {ECE6B2DC-B678-4EA1-BA84-88E875F6EA52};
  function LoadCoeffs(numberLeftCoeffs: UINT; pLeftCoeffs: ^I2; leftDivisor: I2; numberRightCoeffs: UINT; pRightCoeffs: ^I2; rightDivisor: I2): HResult; stdcall;

DS1
Code:
//DS1 Dolby DLL (ANALOG)
//Version: 1.0
DolbyDLLlib;
GUID = {245A61CC-F611-4702-AD0B-B7ABC8C95553};

CoClass OptimalSoundDolbyPCEE4Coclass;
GUID = {266ADF9D-0053-4228-B1DD-B09177D552C0};

Interface IOptimalSoundDolbyPCEE4;
GUID = {D57B5AFC-2AFD-4B30-B0B2-481FF57F6076};
  function Configure(effectiveEndpoint: PCEE4EffectiveEndpoint; pEndpointDesc: ^PCEE4EndpointDesc; monoSpeakerFill: INT; libLoad: INT; limitPCEE4: INT; pPatchSet: ^PCEE4PatchSet; volumeEnable: INT; enhancementEnable: INT; virtualSurroundEnable: INT; NGSurroundEnable: INT; dynEQEnable: INT; stdEQEnable: INT; pGlobalPatchEnables: ^INT; endpointStreamVolume: R4; endpointMasterVolume: R4; volumeMaximizerTarget_db: R4; metaData: CArray): HResult; stdcall;
  function ChangeVolume(endpointStreamVolume: R4; endpointMasterVolume: R4): HResult; stdcall;
  function ChangePresetPatchEnable(presetTech: PCEE4PresetTechnology; enablePatch: INT; EQTargetIndex: UINT): HResult; stdcall;
  function ChangePresetPatchData(pPatchData: ^PCEE4PresetPatchUnion): HResult; stdcall;
  function ChangeGlobalPatchEnable(globalTech: PCEE4GlobalTechnology; enablePatch: INT): HResult; stdcall;
  function ChangeGlobalPatchData(pPatchData: ^PCEE4GlobalPatchUnion): HResult; stdcall;
  function GetLatencyFrames(out pLatencyFrames: ^UINT): HResult; stdcall;
  function GetVisualizationData(out pNumberOfBands: ^I4; out pDisplayGains: ^R4; out pDisplayExcitation: ^R4): HResult; stdcall;
  function TestControl(getFPUExceptions: INT; resetFPUExceptions: INT; out pExceptionCount: ^UINT; out pUnderflowExceptionCount: ^UINT; out pInvalidExceptionCount: ^UINT): HResult; stdcall;

Interface IOptimalSoundAudioProcessor;
GUID = {A7DA0F9C-3E44-4436-84F0-11E34286F63B};
  function Initialize(message: UINT; wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
  function StreamReset(pInputFormat: ^_UNCOMPRESSEDAUDIOFORMAT; pOutputFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;
  function ProcessAudio(pInputData: ^R4; out pOutputData: ^R4; numFrames: UINT): HResult; stdcall;
  function BufferSilent: HResult; stdcall;

Alias UINT_PTR;
  UI8

Alias LONG_PTR;
  I8

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Alias PCEE4EffectiveEndpoint;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0001

Enum __MIDL___MIDL_itf_DolbyDLL_0001_0074_0001;
  PCEE4EffectiveUnknown = 0;
  PCEE4EffectiveInternalSpeakers = 1;
  PCEE4EffectiveExternalSpeakers = 2;
  PCEE4EffectiveHeadphones = 3;
  PCEE4EffectiveSPDIF = 4;
  PCEE4EffectiveHDMI = 5;
  PCEE4EffectiveMaxEndpoints = 6;

Record PCEE4EndpointDesc;
  m_inChannelMask: UINT;
  m_outChannelMask: UINT;
  m_outSpeakersMask: UINT;
  m_outSpeakerSizeMask: UINT;

Record PCEE4PatchSet;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_EQ: EqPatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

Alias DolbyVolumePatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0004

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0004;
  structVersion: UINT;
  dolbyVolumeLevelerAmount: UINT;
  dolbyVolumeLevelerOnElseOff: INT;
  dolbyVolumeModelerOnElseOff: INT;
  dolbyVolumeLevelerInTarget: R4;
  dolbyVolumeLevelerOutTarget: R4;
  dolbyVolumeModelerCalibration: R4;

Alias DialogEnhancementPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0005

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0005;
  structVersion: UINT;
  dialogEnhancmentCenter: R4;
  dialogEnhancementDucking: R4;

Alias EqPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0006

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0006;
  structVersion: UINT;
  dynEqFreqBands: UINT;
  dynEqTargetBands: UINT;
  dynEqAmount: R4;
  stdEqFreqBands: UINT;
  stdEqGainBands: UINT;
  dynEqFreq: CArray;
  dynEqTarget: CArray;
  stdEqFreq: CArray;
  stdEqGain: CArray;

Alias VirtualSurroundPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0009

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0009;
  structVersion: UINT;
  virtualSurroundSpeakerAngle: R4;
  virtualSurroundSurroundBoost: R4;
  virtualSurroundReverbGain: R4;

Alias NextGenSurroundPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0008

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0008;
  structVersion: UINT;

Alias PeakLimiterPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0007

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0007;
  structVersion: UINT;
  peakLimiterGain: R4;

Alias AudioRegulatorPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0011

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0011;
  structVersion: UINT;
  audioRegulatorFreqBands: UINT;
  audioRegulatorThreshBands: CArray;
  audioRegulatorIsolateBands: UINT;
  audioRegulatorOverdrive: R4;
  audioRegulatorTPAmount: R4;
  audioRegulatorFreq: CArray;
  audioRegulatorThresh: CArray;
  audioRegulatorIsolate: CArray;

Alias AudioOptimizerPatch;
  __MIDL___MIDL_itf_DolbyDLL_0001_0074_0013

Record __MIDL___MIDL_itf_DolbyDLL_0001_0074_0013;
  structVersion: UINT;
  audioOptimizerOutChannels: UINT;
  audioOptimizerFreqBands: UINT;
  audioOptimizerGainBands: CArray;
  audioOptimizerFreq: CArray;
  audioOptimizerGain: CArray;

Enum PCEE4PresetTechnology;
  ePresetNoTech = 0;
  eVolumeTech = 1;
  eEnhancementTech = 2;
  eEQTech = 3;
  eVirtualSurroundTech = 4;
  eNGSurroundTech = 5;
  eNumberPCEE4PresetTechnologies = 6;

Record PCEE4PresetPatchUnion;
  m_presetTech: PCEE4PresetTechnology;
  m_patch: __MIDL___MIDL_itf_DolbyDLL_0001_0074_0014;

Union __MIDL___MIDL_itf_DolbyDLL_0001_0074_0014;
  m_volume: DolbyVolumePatch;
  m_dialogEnhancement: DialogEnhancementPatch;
  m_EQ: EqPatch;
  m_virtualSurround: VirtualSurroundPatch;
  m_NGSurround: NextGenSurroundPatch;

Enum PCEE4GlobalTechnology;
  eGlobalNoTech = 0;
  ePeakLimiterTech = 1;
  eAudioRegulatorTech = 2;
  eAudioOptimizerTech = 3;
  eNumberPCEE4GlobalTechnologies = 4;

Record PCEE4GlobalPatchUnion;
  m_globalTech: PCEE4GlobalTechnology;
  m_patch: __MIDL___MIDL_itf_DolbyDLL_0001_0074_0015;

Union __MIDL___MIDL_itf_DolbyDLL_0001_0074_0015;
  m_peakLimiter: PeakLimiterPatch;
  m_audioRegulator: AudioRegulatorPatch;
  m_audioOptimizer: AudioOptimizerPatch;

Interface IOptimalSoundVersion;
GUID = {47B5C2DC-0B15-464C-9AFB-19460AB6ACC1};
  function GetVersionInfo(versionSize: UINT; out pOptVersion: ^UI1): HResult; stdcall;

CoClass OptimalSoundDolbySRCCoclass;
GUID = {8C4BEBA7-72FE-4ED3-86CF-9760915AE13D};

Interface IOptimalSoundDolbySampleRateConverter;
GUID = {FBAE5A5F-B18D-4543-A3F0-82F47D08A12B};

SFX APO process audio before mixing and volume control, so how could it do encoding? If it would occur, only one audio could play at once, as the output of DS1 would be EAC3 stream, so Windows will not be able to mix multiple streams together. Only GFX/EFX APO could do encoding safely, as it would not disturb mixing. The PCEE4 section seem to be taken for analog audio, where a digital stream cannot be outputted safely(//PCEE4 Dolby DLL (ANALOG)).
Assuming DS1 or Atmos can send an encoded signal, how do we activate that encoded output? (In using my method, DDL is activated in the Advanced tab-Default format section, where Dolby Digital is added.)
Atmos can input Dolby Digital Plus with Atmos Metadata from playing applications (tested), such as the Dolby Trailers, where it can do Dolby Atmos for Headphones effect, but the output does not seem to be encoded signal.
That code you pasted may indicate only input support, not output support.
 
Joined
Jan 30, 2018
Messages
420 (0.19/day)
Dolby Atmos EFX
Code:
//Version: 1.0
DolbyDAX2APODlllib;
GUID = {29C6F441-2AA7-4989-978B-E637066789CA};

CoClass DolbyDAX2APO;
GUID = {D9916F9E-99F7-11E7-BF21-6C0B849889E1};

Interface IAudioProcessingObject;
GUID = {FD7F2B29-24D0-4B5C-B177-592C39F9CA10};
  function Reset: HResult; stdcall;
  function GetLatency(out pTime: ^I8): HResult; stdcall;
  function GetRegistrationProperties(out ppRegProps: ^^APO_REG_PROPERTIES): HResult; stdcall;
  function Initialize(cbDataSize: UINT; pbyData: ^UI1): HResult; stdcall;
  function IsInputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedInputFormat: ^IAudioMediaType; out ppSupportedInputFormat: ^^IAudioMediaType): HResult; stdcall;
  function IsOutputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedOutputFormat: ^IAudioMediaType; out ppSupportedOutputFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetInputChannelCount(out pu32ChannelCount: ^UINT): HResult; stdcall;

Record APO_REG_PROPERTIES;
  clsid: GUID;
  Flags: APO_FLAG;
  szFriendlyName: CArray;
  szCopyrightInfo: CArray;
  u32MajorVersion: UINT;
  u32MinorVersion: UINT;
  u32MinInputConnections: UINT;
  u32MaxInputConnections: UINT;
  u32MinOutputConnections: UINT;
  u32MaxOutputConnections: UINT;
  u32MaxInstances: UINT;
  u32NumAPOInterfaces: UINT;
  iidAPOInterfaceList: ^GUID;

Enum APO_FLAG;
  APO_FLAG_NONE = 0;
  APO_FLAG_INPLACE = 1;
  APO_FLAG_SAMPLESPERFRAME_MUST_MATCH = 2;
  APO_FLAG_FRAMESPERSECOND_MUST_MATCH = 4;
  APO_FLAG_BITSPERSAMPLE_MUST_MATCH = 8;
  APO_FLAG_MIXER = 16;
  APO_FLAG_DEFAULT = 14;

Interface IAudioMediaType;
GUID = {4E997F73-B71F-4798-873B-ED7DFCF15B4D};
  function IsCompressedFormat(out pfCompressed: ^I4): HResult; stdcall;
  function IsEqual(pIAudioType: ^IAudioMediaType; out pdwFlags: ^UI4): HResult; stdcall;
  function GetAudioFormat: ^tWAVEFORMATEX; stdcall;
  function GetUncompressedAudioFormat(out pUncompressedAudioFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;

Record tWAVEFORMATEX;
  wFormatTag: UI2;
  nChannels: UI2;
  nSamplesPerSec: UI4;
  nAvgBytesPerSec: UI4;
  nBlockAlign: UI2;
  wBitsPerSample: UI2;
  cbSize: UI2;
  pExtraBytes: ^UI1;

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IAudioProcessingObjectRT;
GUID = {9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C};
  function APOProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_PROPERTY; u32NumOutputConnections: UINT; out ppOutputConnections: ^^APO_CONNECTION_PROPERTY); stdcall;
  function CalcInputFrames(u32OutputFrameCount: UINT): UINT; stdcall;
  function CalcOutputFrames(u32InputFrameCount: UINT): UINT; stdcall;

Record APO_CONNECTION_PROPERTY;
  pBuffer: UINT_PTR;
  u32ValidFrameCount: UINT;
  u32BufferFlags: APO_BUFFER_FLAGS;
  u32Signature: UINT;

Alias UINT_PTR;
  UI8

Enum APO_BUFFER_FLAGS;
  BUFFER_INVALID = 0;
  BUFFER_VALID = 1;
  BUFFER_SILENT = 2;

Interface IAudioProcessingObjectConfiguration;
GUID = {0E5ED805-ABA6-49C3-8F9A-2B8C889C4FA8};
  function LockForProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_DESCRIPTOR; u32NumOutputConnections: UINT; ppOutputConnections: ^^APO_CONNECTION_DESCRIPTOR): HResult; stdcall;
  function UnlockForProcess: HResult; stdcall;

Record APO_CONNECTION_DESCRIPTOR;
  Type: APO_CONNECTION_BUFFER_TYPE;
  pBuffer: UINT_PTR;
  u32MaxFrameCount: UINT;
  pFormat: ^IAudioMediaType;
  u32Signature: UINT;

Enum APO_CONNECTION_BUFFER_TYPE;
  APO_CONNECTION_BUFFER_TYPE_ALLOCATED = 0;
  APO_CONNECTION_BUFFER_TYPE_EXTERNAL = 1;
  APO_CONNECTION_BUFFER_TYPE_DEPENDANT = 2;

Interface IMMNotificationClient;
GUID = {7991EEC9-7E89-4D85-8390-6C703CEC60C0};
  function OnDeviceStateChanged(pwstrDeviceId: LPWSTR; dwNewState: UI4): HResult; stdcall;
  function OnDeviceAdded(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDeviceRemoved(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDefaultDeviceChanged(flow: EDataFlow; role: ERole; pwstrDefaultDeviceId: LPWSTR): HResult; stdcall;
  function OnPropertyValueChanged(pwstrDeviceId: LPWSTR; key: _tagpropertykey): HResult; stdcall;

Alias EDataFlow;
  __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0001

Enum __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0001;
  eRender = 0;
  eCapture = 1;
  eAll = 2;
  EDataFlow_enum_count = 3;

Alias ERole;
  __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0002

Enum __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0002;
  eConsole = 0;
  eMultimedia = 1;
  eCommunications = 2;
  ERole_enum_count = 3;

Record _tagpropertykey;
  fmtid: GUID;
  pid: UI4;

Interface IAudioSystemEffects;
GUID = {5FA00F27-ADD6-499A-8A9D-6B98521FA75B};

Interface IDolbyDAXAPO_SpkProtect;
GUID = {4DC8B9CB-6372-496E-8C95-882EAC5C1F4F};
  function SpkrProtLock(u32MaxFrameCount: UINT; pFormat: ^tWAVEFORMATEX): HResult; stdcall;
  function SpkrProtProcess(pBuffer: UINT_PTR; u32ValidFrameCount: UINT): HResult; stdcall;

PCEE4 GFX
Code:
//Optimal Sound EE GFX Library
//Version: 1.0
OPTEEGFXDLLlib;
GUID = {477E6B34-C08C-4B46-90B4-F256191D65F1};

CoClass OPTEEGFXAnalog;
GUID = {56E00778-C664-4BB5-AA2B-CA6F14840BB3};

Interface IAudioProcessingObject;
GUID = {FD7F2B29-24D0-4B5C-B177-592C39F9CA10};
  function Reset: HResult; stdcall;
  function GetLatency(out pTime: ^I8): HResult; stdcall;
  function GetRegistrationProperties(out ppRegProps: ^^APO_REG_PROPERTIES): HResult; stdcall;
  function Initialize(cbDataSize: UINT; pbyData: ^UI1): HResult; stdcall;
  function IsInputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedInputFormat: ^IAudioMediaType; out ppSupportedInputFormat: ^^IAudioMediaType): HResult; stdcall;
  function IsOutputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedOutputFormat: ^IAudioMediaType; out ppSupportedOutputFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetInputChannelCount(out pu32ChannelCount: ^UINT): HResult; stdcall;

Record APO_REG_PROPERTIES;
  clsid: GUID;
  Flags: APO_FLAG;
  szFriendlyName: CArray;
  szCopyrightInfo: CArray;
  u32MajorVersion: UINT;
  u32MinorVersion: UINT;
  u32MinInputConnections: UINT;
  u32MaxInputConnections: UINT;
  u32MinOutputConnections: UINT;
  u32MaxOutputConnections: UINT;
  u32MaxInstances: UINT;
  u32NumAPOInterfaces: UINT;
  iidAPOInterfaceList: ^GUID;

Enum APO_FLAG;
  APO_FLAG_NONE = 0;
  APO_FLAG_INPLACE = 1;
  APO_FLAG_SAMPLESPERFRAME_MUST_MATCH = 2;
  APO_FLAG_FRAMESPERSECOND_MUST_MATCH = 4;
  APO_FLAG_BITSPERSAMPLE_MUST_MATCH = 8;
  APO_FLAG_DEFAULT = 14;

Interface IAudioMediaType;
GUID = {4E997F73-B71F-4798-873B-ED7DFCF15B4D};
  function IsCompressedFormat(out pfCompressed: ^I4): HResult; stdcall;
  function IsEqual(pIAudioType: ^IAudioMediaType; out pdwFlags: ^UI4): HResult; stdcall;
  function GetAudioFormat: ^tWAVEFORMATEX; stdcall;
  function GetUncompressedAudioFormat(out pUncompressedAudioFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;

Record tWAVEFORMATEX;
  wFormatTag: UI2;
  nChannels: UI2;
  nSamplesPerSec: UI4;
  nAvgBytesPerSec: UI4;
  nBlockAlign: UI2;
  wBitsPerSample: UI2;
  cbSize: UI2;
  pExtraBytes: ^UI1;

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IAudioProcessingObjectRT;
GUID = {9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C};
  function APOProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_PROPERTY; u32NumOutputConnections: UINT; out ppOutputConnections: ^^APO_CONNECTION_PROPERTY); stdcall;
  function CalcInputFrames(u32OutputFrameCount: UINT): UINT; stdcall;
  function CalcOutputFrames(u32InputFrameCount: UINT): UINT; stdcall;

Record APO_CONNECTION_PROPERTY;
  pBuffer: UINT_PTR;
  u32ValidFrameCount: UINT;
  u32BufferFlags: APO_BUFFER_FLAGS;
  u32Signature: UINT;

Alias UINT_PTR;
  UI8

Enum APO_BUFFER_FLAGS;
  BUFFER_INVALID = 0;
  BUFFER_VALID = 1;
  BUFFER_SILENT = 2;

Interface IAudioProcessingObjectConfiguration;
GUID = {0E5ED805-ABA6-49C3-8F9A-2B8C889C4FA8};
  function LockForProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_DESCRIPTOR; u32NumOutputConnections: UINT; ppOutputConnections: ^^APO_CONNECTION_DESCRIPTOR): HResult; stdcall;
  function UnlockForProcess: HResult; stdcall;

Record APO_CONNECTION_DESCRIPTOR;
  Type: APO_CONNECTION_BUFFER_TYPE;
  pBuffer: UINT_PTR;
  u32MaxFrameCount: UINT;
  pFormat: ^IAudioMediaType;
  u32Signature: UINT;

Enum APO_CONNECTION_BUFFER_TYPE;
  APO_CONNECTION_BUFFER_TYPE_ALLOCATED = 0;
  APO_CONNECTION_BUFFER_TYPE_EXTERNAL = 1;
  APO_CONNECTION_BUFFER_TYPE_DEPENDANT = 2;

Interface IAudioSystemEffects;
GUID = {5FA00F27-ADD6-499A-8A9D-6B98521FA75B};

Interface IAudioSystemEffectsCustomFormats;
GUID = {B1176E34-BB7F-4F05-BEBD-1B18A534E097};
  function GetFormatCount(out pcFormats: ^UINT): HResult; stdcall;
  function GetFormat(nFormat: UINT; out ppFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetFormatRepresentation(nFormat: UINT; out ppwstrFormatRep: ^LPWSTR): HResult; stdcall;

Interface IOPTEEGFX;
GUID = {EFF8AFE0-E5A2-4E80-AC74-DCD988977A96};

CoClass OPTEEGFXHDMI;
GUID = {12844204-3EAD-4D9B-AB7F-B1C0FC218915};

CoClass OPTEEGFXTest;
GUID = {6CA5D0E8-F182-4E9C-9BE9-02A3965B0BDB};

Dolby Atmos SFX
Code:
//Version: 1.0
DAXAPODlllib;
GUID = {80A2AC54-263A-470D-BF67-5D26F6E069FE};

CoClass DAXAPO;
GUID = {D9916FA0-99F7-11E7-BF21-6C0B849889E1};

Interface IAudioProcessingObject;
GUID = {FD7F2B29-24D0-4B5C-B177-592C39F9CA10};
  function Reset: HResult; stdcall;
  function GetLatency(out pTime: ^I8): HResult; stdcall;
  function GetRegistrationProperties(out ppRegProps: ^^APO_REG_PROPERTIES): HResult; stdcall;
  function Initialize(cbDataSize: UINT; pbyData: ^UI1): HResult; stdcall;
  function IsInputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedInputFormat: ^IAudioMediaType; out ppSupportedInputFormat: ^^IAudioMediaType): HResult; stdcall;
  function IsOutputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedOutputFormat: ^IAudioMediaType; out ppSupportedOutputFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetInputChannelCount(out pu32ChannelCount: ^UINT): HResult; stdcall;

Record APO_REG_PROPERTIES;
  clsid: GUID;
  Flags: APO_FLAG;
  szFriendlyName: CArray;
  szCopyrightInfo: CArray;
  u32MajorVersion: UINT;
  u32MinorVersion: UINT;
  u32MinInputConnections: UINT;
  u32MaxInputConnections: UINT;
  u32MinOutputConnections: UINT;
  u32MaxOutputConnections: UINT;
  u32MaxInstances: UINT;
  u32NumAPOInterfaces: UINT;
  iidAPOInterfaceList: ^GUID;

Enum APO_FLAG;
  APO_FLAG_NONE = 0;
  APO_FLAG_INPLACE = 1;
  APO_FLAG_SAMPLESPERFRAME_MUST_MATCH = 2;
  APO_FLAG_FRAMESPERSECOND_MUST_MATCH = 4;
  APO_FLAG_BITSPERSAMPLE_MUST_MATCH = 8;
  APO_FLAG_MIXER = 16;
  APO_FLAG_DEFAULT = 14;

Interface IAudioMediaType;
GUID = {4E997F73-B71F-4798-873B-ED7DFCF15B4D};
  function IsCompressedFormat(out pfCompressed: ^I4): HResult; stdcall;
  function IsEqual(pIAudioType: ^IAudioMediaType; out pdwFlags: ^UI4): HResult; stdcall;
  function GetAudioFormat: ^tWAVEFORMATEX; stdcall;
  function GetUncompressedAudioFormat(out pUncompressedAudioFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;

Record tWAVEFORMATEX;
  wFormatTag: UI2;
  nChannels: UI2;
  nSamplesPerSec: UI4;
  nAvgBytesPerSec: UI4;
  nBlockAlign: UI2;
  wBitsPerSample: UI2;
  cbSize: UI2;
  pExtraBytes: ^UI1;

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IAudioProcessingObjectRT;
GUID = {9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C};
  function APOProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_PROPERTY; u32NumOutputConnections: UINT; out ppOutputConnections: ^^APO_CONNECTION_PROPERTY); stdcall;
  function CalcInputFrames(u32OutputFrameCount: UINT): UINT; stdcall;
  function CalcOutputFrames(u32InputFrameCount: UINT): UINT; stdcall;

Record APO_CONNECTION_PROPERTY;
  pBuffer: UINT_PTR;
  u32ValidFrameCount: UINT;
  u32BufferFlags: APO_BUFFER_FLAGS;
  u32Signature: UINT;

Alias UINT_PTR;
  UI8

Enum APO_BUFFER_FLAGS;
  BUFFER_INVALID = 0;
  BUFFER_VALID = 1;
  BUFFER_SILENT = 2;

Interface IAudioProcessingObjectConfiguration;
GUID = {0E5ED805-ABA6-49C3-8F9A-2B8C889C4FA8};
  function LockForProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_DESCRIPTOR; u32NumOutputConnections: UINT; ppOutputConnections: ^^APO_CONNECTION_DESCRIPTOR): HResult; stdcall;
  function UnlockForProcess: HResult; stdcall;

Record APO_CONNECTION_DESCRIPTOR;
  Type: APO_CONNECTION_BUFFER_TYPE;
  pBuffer: UINT_PTR;
  u32MaxFrameCount: UINT;
  pFormat: ^IAudioMediaType;
  u32Signature: UINT;

Enum APO_CONNECTION_BUFFER_TYPE;
  APO_CONNECTION_BUFFER_TYPE_ALLOCATED = 0;
  APO_CONNECTION_BUFFER_TYPE_EXTERNAL = 1;
  APO_CONNECTION_BUFFER_TYPE_DEPENDANT = 2;

Interface IMMNotificationClient;
GUID = {7991EEC9-7E89-4D85-8390-6C703CEC60C0};
  function OnDeviceStateChanged(pwstrDeviceId: LPWSTR; dwNewState: UI4): HResult; stdcall;
  function OnDeviceAdded(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDeviceRemoved(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDefaultDeviceChanged(flow: EDataFlow; role: ERole; pwstrDefaultDeviceId: LPWSTR): HResult; stdcall;
  function OnPropertyValueChanged(pwstrDeviceId: LPWSTR; key: _tagpropertykey): HResult; stdcall;

Alias EDataFlow;
  __MIDL___MIDL_itf_DAXAPODll_0003_0014_0001

Enum __MIDL___MIDL_itf_DAXAPODll_0003_0014_0001;
  eRender = 0;
  eCapture = 1;
  eAll = 2;
  EDataFlow_enum_count = 3;

Alias ERole;
  __MIDL___MIDL_itf_DAXAPODll_0003_0014_0002

Enum __MIDL___MIDL_itf_DAXAPODll_0003_0014_0002;
  eConsole = 0;
  eMultimedia = 1;
  eCommunications = 2;
  ERole_enum_count = 3;

Record _tagpropertykey;
  fmtid: GUID;
  pid: UI4;

Interface IAudioSystemEffects;
GUID = {5FA00F27-ADD6-499A-8A9D-6B98521FA75B};

Interface IDAXAPO;
GUID = {ACA32C80-30EC-4D96-9022-CC6A4F70EAE2};

I guess this can do the same job (DDL) Real-time (SFX) encoding (EFX) on Dolby Atmos base on the code.
 
Last edited:
Joined
Aug 24, 2018
Messages
818 (0.40/day)
System Name Dell Inspiron 7375
Processor AMD Ryzen™ 7 2700U Mobile Processor with Radeon™ RX Vega 10 Graphics
Memory 16GB (total) 2400MHz DDR4 SODIMM
Video Card(s) Radeon™ RX Vega 10 Graphics
Storage SanDisk X600 SATA SSD 512GB
Display(s) BOE NV13FHM
Audio Device(s) Realtek ALC3253 (Dell Labelling) ALC255 (Real name)
Dolby Atmos EFX
Code:
//Version: 1.0
DolbyDAX2APODlllib;
GUID = {29C6F441-2AA7-4989-978B-E637066789CA};

CoClass DolbyDAX2APO;
GUID = {D9916F9E-99F7-11E7-BF21-6C0B849889E1};

Interface IAudioProcessingObject;
GUID = {FD7F2B29-24D0-4B5C-B177-592C39F9CA10};
  function Reset: HResult; stdcall;
  function GetLatency(out pTime: ^I8): HResult; stdcall;
  function GetRegistrationProperties(out ppRegProps: ^^APO_REG_PROPERTIES): HResult; stdcall;
  function Initialize(cbDataSize: UINT; pbyData: ^UI1): HResult; stdcall;
  function IsInputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedInputFormat: ^IAudioMediaType; out ppSupportedInputFormat: ^^IAudioMediaType): HResult; stdcall;
  function IsOutputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedOutputFormat: ^IAudioMediaType; out ppSupportedOutputFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetInputChannelCount(out pu32ChannelCount: ^UINT): HResult; stdcall;

Record APO_REG_PROPERTIES;
  clsid: GUID;
  Flags: APO_FLAG;
  szFriendlyName: CArray;
  szCopyrightInfo: CArray;
  u32MajorVersion: UINT;
  u32MinorVersion: UINT;
  u32MinInputConnections: UINT;
  u32MaxInputConnections: UINT;
  u32MinOutputConnections: UINT;
  u32MaxOutputConnections: UINT;
  u32MaxInstances: UINT;
  u32NumAPOInterfaces: UINT;
  iidAPOInterfaceList: ^GUID;

Enum APO_FLAG;
  APO_FLAG_NONE = 0;
  APO_FLAG_INPLACE = 1;
  APO_FLAG_SAMPLESPERFRAME_MUST_MATCH = 2;
  APO_FLAG_FRAMESPERSECOND_MUST_MATCH = 4;
  APO_FLAG_BITSPERSAMPLE_MUST_MATCH = 8;
  APO_FLAG_MIXER = 16;
  APO_FLAG_DEFAULT = 14;

Interface IAudioMediaType;
GUID = {4E997F73-B71F-4798-873B-ED7DFCF15B4D};
  function IsCompressedFormat(out pfCompressed: ^I4): HResult; stdcall;
  function IsEqual(pIAudioType: ^IAudioMediaType; out pdwFlags: ^UI4): HResult; stdcall;
  function GetAudioFormat: ^tWAVEFORMATEX; stdcall;
  function GetUncompressedAudioFormat(out pUncompressedAudioFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;

Record tWAVEFORMATEX;
  wFormatTag: UI2;
  nChannels: UI2;
  nSamplesPerSec: UI4;
  nAvgBytesPerSec: UI4;
  nBlockAlign: UI2;
  wBitsPerSample: UI2;
  cbSize: UI2;
  pExtraBytes: ^UI1;

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IAudioProcessingObjectRT;
GUID = {9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C};
  function APOProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_PROPERTY; u32NumOutputConnections: UINT; out ppOutputConnections: ^^APO_CONNECTION_PROPERTY); stdcall;
  function CalcInputFrames(u32OutputFrameCount: UINT): UINT; stdcall;
  function CalcOutputFrames(u32InputFrameCount: UINT): UINT; stdcall;

Record APO_CONNECTION_PROPERTY;
  pBuffer: UINT_PTR;
  u32ValidFrameCount: UINT;
  u32BufferFlags: APO_BUFFER_FLAGS;
  u32Signature: UINT;

Alias UINT_PTR;
  UI8

Enum APO_BUFFER_FLAGS;
  BUFFER_INVALID = 0;
  BUFFER_VALID = 1;
  BUFFER_SILENT = 2;

Interface IAudioProcessingObjectConfiguration;
GUID = {0E5ED805-ABA6-49C3-8F9A-2B8C889C4FA8};
  function LockForProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_DESCRIPTOR; u32NumOutputConnections: UINT; ppOutputConnections: ^^APO_CONNECTION_DESCRIPTOR): HResult; stdcall;
  function UnlockForProcess: HResult; stdcall;

Record APO_CONNECTION_DESCRIPTOR;
  Type: APO_CONNECTION_BUFFER_TYPE;
  pBuffer: UINT_PTR;
  u32MaxFrameCount: UINT;
  pFormat: ^IAudioMediaType;
  u32Signature: UINT;

Enum APO_CONNECTION_BUFFER_TYPE;
  APO_CONNECTION_BUFFER_TYPE_ALLOCATED = 0;
  APO_CONNECTION_BUFFER_TYPE_EXTERNAL = 1;
  APO_CONNECTION_BUFFER_TYPE_DEPENDANT = 2;

Interface IMMNotificationClient;
GUID = {7991EEC9-7E89-4D85-8390-6C703CEC60C0};
  function OnDeviceStateChanged(pwstrDeviceId: LPWSTR; dwNewState: UI4): HResult; stdcall;
  function OnDeviceAdded(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDeviceRemoved(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDefaultDeviceChanged(flow: EDataFlow; role: ERole; pwstrDefaultDeviceId: LPWSTR): HResult; stdcall;
  function OnPropertyValueChanged(pwstrDeviceId: LPWSTR; key: _tagpropertykey): HResult; stdcall;

Alias EDataFlow;
  __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0001

Enum __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0001;
  eRender = 0;
  eCapture = 1;
  eAll = 2;
  EDataFlow_enum_count = 3;

Alias ERole;
  __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0002

Enum __MIDL___MIDL_itf_DolbyDAX2APODll_v211_0003_0014_0002;
  eConsole = 0;
  eMultimedia = 1;
  eCommunications = 2;
  ERole_enum_count = 3;

Record _tagpropertykey;
  fmtid: GUID;
  pid: UI4;

Interface IAudioSystemEffects;
GUID = {5FA00F27-ADD6-499A-8A9D-6B98521FA75B};

Interface IDolbyDAXAPO_SpkProtect;
GUID = {4DC8B9CB-6372-496E-8C95-882EAC5C1F4F};
  function SpkrProtLock(u32MaxFrameCount: UINT; pFormat: ^tWAVEFORMATEX): HResult; stdcall;
  function SpkrProtProcess(pBuffer: UINT_PTR; u32ValidFrameCount: UINT): HResult; stdcall;

PCEE4 GFX
Code:
//Optimal Sound EE GFX Library
//Version: 1.0
OPTEEGFXDLLlib;
GUID = {477E6B34-C08C-4B46-90B4-F256191D65F1};

CoClass OPTEEGFXAnalog;
GUID = {56E00778-C664-4BB5-AA2B-CA6F14840BB3};

Interface IAudioProcessingObject;
GUID = {FD7F2B29-24D0-4B5C-B177-592C39F9CA10};
  function Reset: HResult; stdcall;
  function GetLatency(out pTime: ^I8): HResult; stdcall;
  function GetRegistrationProperties(out ppRegProps: ^^APO_REG_PROPERTIES): HResult; stdcall;
  function Initialize(cbDataSize: UINT; pbyData: ^UI1): HResult; stdcall;
  function IsInputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedInputFormat: ^IAudioMediaType; out ppSupportedInputFormat: ^^IAudioMediaType): HResult; stdcall;
  function IsOutputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedOutputFormat: ^IAudioMediaType; out ppSupportedOutputFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetInputChannelCount(out pu32ChannelCount: ^UINT): HResult; stdcall;

Record APO_REG_PROPERTIES;
  clsid: GUID;
  Flags: APO_FLAG;
  szFriendlyName: CArray;
  szCopyrightInfo: CArray;
  u32MajorVersion: UINT;
  u32MinorVersion: UINT;
  u32MinInputConnections: UINT;
  u32MaxInputConnections: UINT;
  u32MinOutputConnections: UINT;
  u32MaxOutputConnections: UINT;
  u32MaxInstances: UINT;
  u32NumAPOInterfaces: UINT;
  iidAPOInterfaceList: ^GUID;

Enum APO_FLAG;
  APO_FLAG_NONE = 0;
  APO_FLAG_INPLACE = 1;
  APO_FLAG_SAMPLESPERFRAME_MUST_MATCH = 2;
  APO_FLAG_FRAMESPERSECOND_MUST_MATCH = 4;
  APO_FLAG_BITSPERSAMPLE_MUST_MATCH = 8;
  APO_FLAG_DEFAULT = 14;

Interface IAudioMediaType;
GUID = {4E997F73-B71F-4798-873B-ED7DFCF15B4D};
  function IsCompressedFormat(out pfCompressed: ^I4): HResult; stdcall;
  function IsEqual(pIAudioType: ^IAudioMediaType; out pdwFlags: ^UI4): HResult; stdcall;
  function GetAudioFormat: ^tWAVEFORMATEX; stdcall;
  function GetUncompressedAudioFormat(out pUncompressedAudioFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;

Record tWAVEFORMATEX;
  wFormatTag: UI2;
  nChannels: UI2;
  nSamplesPerSec: UI4;
  nAvgBytesPerSec: UI4;
  nBlockAlign: UI2;
  wBitsPerSample: UI2;
  cbSize: UI2;
  pExtraBytes: ^UI1;

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IAudioProcessingObjectRT;
GUID = {9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C};
  function APOProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_PROPERTY; u32NumOutputConnections: UINT; out ppOutputConnections: ^^APO_CONNECTION_PROPERTY); stdcall;
  function CalcInputFrames(u32OutputFrameCount: UINT): UINT; stdcall;
  function CalcOutputFrames(u32InputFrameCount: UINT): UINT; stdcall;

Record APO_CONNECTION_PROPERTY;
  pBuffer: UINT_PTR;
  u32ValidFrameCount: UINT;
  u32BufferFlags: APO_BUFFER_FLAGS;
  u32Signature: UINT;

Alias UINT_PTR;
  UI8

Enum APO_BUFFER_FLAGS;
  BUFFER_INVALID = 0;
  BUFFER_VALID = 1;
  BUFFER_SILENT = 2;

Interface IAudioProcessingObjectConfiguration;
GUID = {0E5ED805-ABA6-49C3-8F9A-2B8C889C4FA8};
  function LockForProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_DESCRIPTOR; u32NumOutputConnections: UINT; ppOutputConnections: ^^APO_CONNECTION_DESCRIPTOR): HResult; stdcall;
  function UnlockForProcess: HResult; stdcall;

Record APO_CONNECTION_DESCRIPTOR;
  Type: APO_CONNECTION_BUFFER_TYPE;
  pBuffer: UINT_PTR;
  u32MaxFrameCount: UINT;
  pFormat: ^IAudioMediaType;
  u32Signature: UINT;

Enum APO_CONNECTION_BUFFER_TYPE;
  APO_CONNECTION_BUFFER_TYPE_ALLOCATED = 0;
  APO_CONNECTION_BUFFER_TYPE_EXTERNAL = 1;
  APO_CONNECTION_BUFFER_TYPE_DEPENDANT = 2;

Interface IAudioSystemEffects;
GUID = {5FA00F27-ADD6-499A-8A9D-6B98521FA75B};

Interface IAudioSystemEffectsCustomFormats;
GUID = {B1176E34-BB7F-4F05-BEBD-1B18A534E097};
  function GetFormatCount(out pcFormats: ^UINT): HResult; stdcall;
  function GetFormat(nFormat: UINT; out ppFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetFormatRepresentation(nFormat: UINT; out ppwstrFormatRep: ^LPWSTR): HResult; stdcall;

Interface IOPTEEGFX;
GUID = {EFF8AFE0-E5A2-4E80-AC74-DCD988977A96};

CoClass OPTEEGFXHDMI;
GUID = {12844204-3EAD-4D9B-AB7F-B1C0FC218915};

CoClass OPTEEGFXTest;
GUID = {6CA5D0E8-F182-4E9C-9BE9-02A3965B0BDB};

Dolby Atmos SFX
Code:
//Version: 1.0
DAXAPODlllib;
GUID = {80A2AC54-263A-470D-BF67-5D26F6E069FE};

CoClass DAXAPO;
GUID = {D9916FA0-99F7-11E7-BF21-6C0B849889E1};

Interface IAudioProcessingObject;
GUID = {FD7F2B29-24D0-4B5C-B177-592C39F9CA10};
  function Reset: HResult; stdcall;
  function GetLatency(out pTime: ^I8): HResult; stdcall;
  function GetRegistrationProperties(out ppRegProps: ^^APO_REG_PROPERTIES): HResult; stdcall;
  function Initialize(cbDataSize: UINT; pbyData: ^UI1): HResult; stdcall;
  function IsInputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedInputFormat: ^IAudioMediaType; out ppSupportedInputFormat: ^^IAudioMediaType): HResult; stdcall;
  function IsOutputFormatSupported(pOppositeFormat: ^IAudioMediaType; pRequestedOutputFormat: ^IAudioMediaType; out ppSupportedOutputFormat: ^^IAudioMediaType): HResult; stdcall;
  function GetInputChannelCount(out pu32ChannelCount: ^UINT): HResult; stdcall;

Record APO_REG_PROPERTIES;
  clsid: GUID;
  Flags: APO_FLAG;
  szFriendlyName: CArray;
  szCopyrightInfo: CArray;
  u32MajorVersion: UINT;
  u32MinorVersion: UINT;
  u32MinInputConnections: UINT;
  u32MaxInputConnections: UINT;
  u32MinOutputConnections: UINT;
  u32MaxOutputConnections: UINT;
  u32MaxInstances: UINT;
  u32NumAPOInterfaces: UINT;
  iidAPOInterfaceList: ^GUID;

Enum APO_FLAG;
  APO_FLAG_NONE = 0;
  APO_FLAG_INPLACE = 1;
  APO_FLAG_SAMPLESPERFRAME_MUST_MATCH = 2;
  APO_FLAG_FRAMESPERSECOND_MUST_MATCH = 4;
  APO_FLAG_BITSPERSAMPLE_MUST_MATCH = 8;
  APO_FLAG_MIXER = 16;
  APO_FLAG_DEFAULT = 14;

Interface IAudioMediaType;
GUID = {4E997F73-B71F-4798-873B-ED7DFCF15B4D};
  function IsCompressedFormat(out pfCompressed: ^I4): HResult; stdcall;
  function IsEqual(pIAudioType: ^IAudioMediaType; out pdwFlags: ^UI4): HResult; stdcall;
  function GetAudioFormat: ^tWAVEFORMATEX; stdcall;
  function GetUncompressedAudioFormat(out pUncompressedAudioFormat: ^_UNCOMPRESSEDAUDIOFORMAT): HResult; stdcall;

Record tWAVEFORMATEX;
  wFormatTag: UI2;
  nChannels: UI2;
  nSamplesPerSec: UI4;
  nAvgBytesPerSec: UI4;
  nBlockAlign: UI2;
  wBitsPerSample: UI2;
  cbSize: UI2;
  pExtraBytes: ^UI1;

Record _UNCOMPRESSEDAUDIOFORMAT;
  guidFormatType: GUID;
  dwSamplesPerFrame: UI4;
  dwBytesPerSampleContainer: UI4;
  dwValidBitsPerSample: UI4;
  fFramesPerSecond: R4;
  dwChannelMask: UI4;

Interface IAudioProcessingObjectRT;
GUID = {9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C};
  function APOProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_PROPERTY; u32NumOutputConnections: UINT; out ppOutputConnections: ^^APO_CONNECTION_PROPERTY); stdcall;
  function CalcInputFrames(u32OutputFrameCount: UINT): UINT; stdcall;
  function CalcOutputFrames(u32InputFrameCount: UINT): UINT; stdcall;

Record APO_CONNECTION_PROPERTY;
  pBuffer: UINT_PTR;
  u32ValidFrameCount: UINT;
  u32BufferFlags: APO_BUFFER_FLAGS;
  u32Signature: UINT;

Alias UINT_PTR;
  UI8

Enum APO_BUFFER_FLAGS;
  BUFFER_INVALID = 0;
  BUFFER_VALID = 1;
  BUFFER_SILENT = 2;

Interface IAudioProcessingObjectConfiguration;
GUID = {0E5ED805-ABA6-49C3-8F9A-2B8C889C4FA8};
  function LockForProcess(u32NumInputConnections: UINT; ppInputConnections: ^^APO_CONNECTION_DESCRIPTOR; u32NumOutputConnections: UINT; ppOutputConnections: ^^APO_CONNECTION_DESCRIPTOR): HResult; stdcall;
  function UnlockForProcess: HResult; stdcall;

Record APO_CONNECTION_DESCRIPTOR;
  Type: APO_CONNECTION_BUFFER_TYPE;
  pBuffer: UINT_PTR;
  u32MaxFrameCount: UINT;
  pFormat: ^IAudioMediaType;
  u32Signature: UINT;

Enum APO_CONNECTION_BUFFER_TYPE;
  APO_CONNECTION_BUFFER_TYPE_ALLOCATED = 0;
  APO_CONNECTION_BUFFER_TYPE_EXTERNAL = 1;
  APO_CONNECTION_BUFFER_TYPE_DEPENDANT = 2;

Interface IMMNotificationClient;
GUID = {7991EEC9-7E89-4D85-8390-6C703CEC60C0};
  function OnDeviceStateChanged(pwstrDeviceId: LPWSTR; dwNewState: UI4): HResult; stdcall;
  function OnDeviceAdded(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDeviceRemoved(pwstrDeviceId: LPWSTR): HResult; stdcall;
  function OnDefaultDeviceChanged(flow: EDataFlow; role: ERole; pwstrDefaultDeviceId: LPWSTR): HResult; stdcall;
  function OnPropertyValueChanged(pwstrDeviceId: LPWSTR; key: _tagpropertykey): HResult; stdcall;

Alias EDataFlow;
  __MIDL___MIDL_itf_DAXAPODll_0003_0014_0001

Enum __MIDL___MIDL_itf_DAXAPODll_0003_0014_0001;
  eRender = 0;
  eCapture = 1;
  eAll = 2;
  EDataFlow_enum_count = 3;

Alias ERole;
  __MIDL___MIDL_itf_DAXAPODll_0003_0014_0002

Enum __MIDL___MIDL_itf_DAXAPODll_0003_0014_0002;
  eConsole = 0;
  eMultimedia = 1;
  eCommunications = 2;
  ERole_enum_count = 3;

Record _tagpropertykey;
  fmtid: GUID;
  pid: UI4;

Interface IAudioSystemEffects;
GUID = {5FA00F27-ADD6-499A-8A9D-6B98521FA75B};

Interface IDAXAPO;
GUID = {ACA32C80-30EC-4D96-9022-CC6A4F70EAE2};

I guess this can do the same job (DDL) Real-time (SFX) encoding (EFX) on Dolby Atmos base on the code.
If anyone can demonstrate that Dolby Atmos is doing DDL, that could be more helpful. Old GFX APOs will no longer be required; but it does seem that the EFX component of Atmos is here more for doing speaker protection and limiting, actions previously done in one component in DS1 and PCEE4, the LFX. In this new setup, limiting works better, as mixing multiple audio signals can cause signals above 0dB. EFX can prevent >0dB signals to be sent to the device.
 
Joined
May 9, 2014
Messages
24 (0.01/day)
^ You know a lot about audio. Care to translate OPs bad English directions for this whole thing or provide a more suitable english resource for understanding just how all this APO business works? How does one go about combining APOs, and how do you get the values? What's the difference in MFX, EFX, and SFX? How do you test/figure out how they combine and what used to be EFX goes in MFX etc?
 
Joined
Sep 17, 2017
Messages
41 (0.02/day)
This is interesting idea,but i would to know does it possible to change "speaker fill" code and remove delays and echoes for back and side speakers and replicate front speakers from microsoft hd audio wmalfxgfxdsp.dll file?
The same speaker fill code is used on realtek audio drivers.
 
Joined
Jan 30, 2018
Messages
420 (0.19/day)
^ You know a lot about audio. Care to translate OPs bad English directions for this whole thing or provide a more suitable english resource for understanding just how all this APO business works? What's the difference in MFX, EFX, and SFX? what used to be EFX goes in MFX etc?
https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/audio-processing-object-architecture
How does one go about combining APOs
You don't need to combining the APOs. Windows 10 provide CompositeSFX, CompositeMFX, CompositeEFX and CompositeOSFX, CompositeOMFX registry keys which allow to use multiple APO at the same endpoint. I had created a tutorial of using these registry with FX Configurator: http://puresoftapps.blogspot.com/2018/05/customize-your-multiples-audio-effects.html
However, using the Composite registry keys method have been tested by repliers of this thread cause audio distortion (you can found these reply on earlier post). And there are still have not a detail about Composite registry keys from Microsoft. Realtek UAD install file (inf) using registry Composite keys in order to integrate thirty party APO(s).
Here is the part of file of HDX_AcerExt_DOLBY_RTK.inf from Realtek UAD, that use thirty party APO (Dolby).
Code:
HKR,InterfaceSetting\SysCustomizedFx\FX\0,%PKEY_CompositeFX_StreamEffectClsid%,%REG_MULTI_SZ%,%FX_DOLBYAPO_DAPv251_CLSID%
HKR,InterfaceSetting\SysCustomizedFx\FX\0,%PKEY_CompositeFX_EndpointEffectClsid%,%REG_MULTI_SZ%,%FX_DOLBYAPO_VLLDP_CLSID%,%REALTEK_EFX_CLSID%
HKR,InterfaceSetting\SysCustomizedFx\FX\0,%PKEY_CompositeFX_Offload_StreamEffectClsid%,%REG_MULTI_SZ%,%FX_DOLBYAPO_DAPv251_CLSID%
PKEY_CompositeFX_StreamEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},13"
PKEY_CompositeFX_EndpointEffectClsid = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},15"
PKEY_CompositeFX_Offload_StreamEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},19"
REG_MULTI_SZ = 0x00010000
FX_DOLBYAPO_DAPv251_CLSID   = "{D9916FA0-99F7-11E7-BF21-6C0B849889E1}"
FX_DOLBYAPO_VLLDP_CLSID     = "{D9916F9E-99F7-11E7-BF21-6C0B849889E1}"
REALTEK_EFX_CLSID     = "{A29EB043-6CE2-4ee2-B38C-F58719E0D88F}"
how do you get the values?
These values are the GUID of APO DLL files. For DHT v4, the APO DLL of LFX and GFX are R4EEL64A.dll and R4EEG64A.dll. When you register these DLL file (regsvr32 /s R4EEL64A.dll AND regsvr32 /s R4EEG64A.dll), the values {BC8E3B67-3306-4eef-B230-6798E9A67F0B} (R4EEL64A.dll) and {56E00778-C664-4bb5-AA2B-CA6F14840BB3} (R4EEL64A.dll) reated on HKEY_CLASSES_ROOT\CLSID

Edit1:
I have found that only Creative MFX APO have the audio effects. Creative SFX EFX APO is useless.
And also the DTS APO have the same problem. I had seem Realtek modify CompositeSFX, CompositeMFX, CompositeEFX add and remove DTS APOs many times on Realtek UAD. I think their may be less very few information how to make a SFX MFX EFX APOs from Microsoft (http://optimalsound.com/doyouknowEFX.html).

Edit 2:
It may be the APO design problem cause audio distortion and delay.

In this Test Product Config (20180925_01):
Dolby Atmos Speaker System (Preset XML Version 3.2.0) + Nahimic 3 + Sound Blaster UWP
Dolby Preset use ThinkSmart_Hub_500_w_Lenovo_Xiaomi_HP_Settings.7z or ThinkSmart_Hub_700_w_Lenovo_Xiaomi_HP_Settings.7z (or candownload at audio enhancer page) for better audio quality. Turn off all intelligent volume control of these apps.

Image 5.pngImage 6.pngImage 7.png

All audio enhancers use stream effects (SFX), expect Dolby use stream effects and endpoint effects (SFX + EFX)
APO pipelines.png
Please give feedback on Test Product Config (audio distortion, quality, delay, etc.)
 

Attachments

  • Testing 20180925_01.zip
    2.9 KB · Views: 211
Last edited:
Joined
May 9, 2014
Messages
24 (0.01/day)
Exact 1:1 backup, registry file are same using FX Configurator or Regedit:

Device still here:

To fix Registry Permission problem:
https://www.techpowerup.com/forums/...enhancers-work-on-windows.244309/post-3908698


For me the registry was different: take a look

1537913319793.png


Not the same using a compare plugin to check between real one (right) and yours (left). Only difference. And it may be what breaks it. I cannot explain how yours is still there.

Here made a video...see for yourself. Happens randomly. Sometimes exact, sometimes not!


1537914566031.png
 
Last edited:
Joined
Jan 30, 2018
Messages
420 (0.19/day)
I assume the value of {9855c4cd-df8c-449c-a181-8191b68bd06c},0 changing dynamicly during a time.
Try use regedit backup "Digital Audio (SPDIF)" endpoint again and again the after a time. The saved files should be different to each other.
FX Configurator nothing to do with the value of the reg file via "reg export" command.

Press "Save Current Config" button instead of "Backup" button to save as ini file. Press "Load External Config" button and select the saved ini file to restore original APOs of "Digital Audio (SPDIF)" endpoint.
 
Joined
Aug 15, 2018
Messages
27 (0.01/day)
https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/audio-processing-object-architecture

You don't need to combining the APOs. Windows 10 provide CompositeSFX, CompositeMFX, CompositeEFX and CompositeOSFX, CompositeOMFX registry keys which allow to use multiple APO at the same endpoint. I had created a tutorial of using these registry with FX Configurator: http://puresoftapps.blogspot.com/2018/05/customize-your-multiples-audio-effects.html
However, using the Composite registry keys method have been tested by repliers of this thread cause audio distortion (you can found these reply on earlier post). And there are still have not a detail about Composite registry keys from Microsoft. Realtek UAD install file (inf) using registry Composite keys in order to integrate thirty party APO(s).
Here is the part of file of HDX_AcerExt_DOLBY_RTK.inf from Realtek UAD, that use thirty party APO (Dolby).
Code:
HKR,InterfaceSetting\SysCustomizedFx\FX\0,%PKEY_CompositeFX_StreamEffectClsid%,%REG_MULTI_SZ%,%FX_DOLBYAPO_DAPv251_CLSID%
HKR,InterfaceSetting\SysCustomizedFx\FX\0,%PKEY_CompositeFX_EndpointEffectClsid%,%REG_MULTI_SZ%,%FX_DOLBYAPO_VLLDP_CLSID%,%REALTEK_EFX_CLSID%
HKR,InterfaceSetting\SysCustomizedFx\FX\0,%PKEY_CompositeFX_Offload_StreamEffectClsid%,%REG_MULTI_SZ%,%FX_DOLBYAPO_DAPv251_CLSID%
PKEY_CompositeFX_StreamEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},13"
PKEY_CompositeFX_EndpointEffectClsid = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},15"
PKEY_CompositeFX_Offload_StreamEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},19"
REG_MULTI_SZ = 0x00010000
FX_DOLBYAPO_DAPv251_CLSID   = "{D9916FA0-99F7-11E7-BF21-6C0B849889E1}"
FX_DOLBYAPO_VLLDP_CLSID     = "{D9916F9E-99F7-11E7-BF21-6C0B849889E1}"
REALTEK_EFX_CLSID     = "{A29EB043-6CE2-4ee2-B38C-F58719E0D88F}"

These values are the GUID of APO DLL files. For DHT v4, the APO DLL of LFX and GFX are R4EEL64A.dll and R4EEG64A.dll. When you register these DLL file (regsvr32 /s R4EEL64A.dll AND regsvr32 /s R4EEG64A.dll), the values {BC8E3B67-3306-4eef-B230-6798E9A67F0B} (R4EEL64A.dll) and {56E00778-C664-4bb5-AA2B-CA6F14840BB3} (R4EEL64A.dll) reated on HKEY_CLASSES_ROOT\CLSID

Edit1:
I have found that only Creative MFX APO have the audio effects. Creative SFX EFX APO is useless.
And also the DTS APO have the same problem. I had seem Realtek modify CompositeSFX, CompositeMFX, CompositeEFX add and remove DTS APOs many times on Realtek UAD. I think their may be less very few information how to make a SFX MFX EFX APOs from Microsoft (http://optimalsound.com/doyouknowEFX.html).

Edit 2:
It may be the APO design problem cause audio distortion and delay.

In this Test Product Config (20180925_01):
Dolby Atmos Speaker System (Preset XML Version 3.2.0) + Nahimic 3 + Sound Blaster UWP
Dolby Preset use ThinkSmart_Hub_500_w_Lenovo_Xiaomi_HP_Settings.7z or ThinkSmart_Hub_700_w_Lenovo_Xiaomi_HP_Settings.7z (or candownload at audio enhancer page) for better audio quality. Turn off all intelligent volume control of these apps.

View attachment 107493View attachment 107492View attachment 107491

All audio enhancers use stream effects (SFX), expect Dolby use stream effects and endpoint effects (SFX + EFX)
View attachment 107490
Please give feedback on Test Product Config (audio distortion, quality, delay, etc.)
Can you make an Atmos Gaming Preset XML v3.3.0 + Sound Blaster UWP Product Config? I use the old one made long time ago and it is missing some audio effect in this new Atmos preset. Thanks.
 
Joined
Jan 30, 2018
Messages
420 (0.19/day)
Can you make an Atmos Gaming Preset XML v3.3.0 + Sound Blaster UWP Product Config? I use the old one made long time ago and it is missing some audio effect in this new Atmos preset. Thanks.
Someone reply me these option using xml 3.3.0.
Image 2.png


I have not modify these xml file expect change sku value. xml 3.3.0 change from <dtt_version value="3.1.6"/> to <dtt_version value="">. xml 3.3.0 is extracted form Realtek Test UAD. Dolby still offer OEM XML 3.2.0: https://github.com/alanfox2000/realtek-universal-audio-driver/tree/master/UAD/ThirdParty/Dolby
 
Joined
Jan 30, 2018
Messages
420 (0.19/day)
@alanfox2000 so is realtek uad drivers for laptop mostly , not desktop PC?
Realtek don't post UAD on their official website, new OEM laptop with Win10 x64 have integrated with Realtek UAD. Also, ASUS provide some of the motherboards with new UAD driver for Win10 x64 so Desktop PC could use.
 
Joined
May 9, 2014
Messages
24 (0.01/day)
I assume the value of {9855c4cd-df8c-449c-a181-8191b68bd06c},0 changing dynamicly during a time.
Try use regedit backup "Digital Audio (SPDIF)" endpoint again and again the after a time. The saved files should be different to each other.
FX Configurator nothing to do with the value of the reg file via "reg export" command.

Press "Save Current Config" button instead of "Backup" button to save as ini file. Press "Load External Config" button and select the saved ini file to restore original APOs of "Digital Audio (SPDIF)" endpoint.

I did - it never is different. The regedit file exports are the same. The one's from your program are not.

I have been doing Save Current Config actually and that has worked fine....just wish you would post "backup/restore" issue in the main thread as warning so others don't get screwed like I did. It's your responsibility to do so.
 
Joined
Dec 13, 2014
Messages
433 (0.13/day)
Processor AMD Phenom II X4 925
Motherboard Gigabyte GA-78LMT-USB3 R2
Memory 4 GB DDR3 1333Mhz
Audio Device(s) onboard Realtek ALC892
Power Supply Seasonic S12II 620w (SS-620GB)
Software Windows 10 Education x64 21H2
Final update: Great news, it works. have no idea how i did it, didnt update KGA files thru 3-4 reinstalls, installed realtek drivers, applied patch, installed apo, product config tool, installed SBconnect 2, ran the application right after installation and it worked. btw how do i enable the scout mode? says it is not installed. and does HOAL(input) work with apo aswell?
And will it work to install software straight from creative?

Final final update: Installed everything in the folder, now scout is available .
Btw, scout sucks. Anyone favourite? I like the sound of atmos, maybe go for that one?

It works when using SBConnect 2 desktop app, and not SBConnect2 UWP app. the UWP version of SBConnect2 did not detect my onboard audio device, even with the kga files generated.

Cannot find folderpath "creative\softwarelock" after installation of SB connect 2, anyone else with that problem?

it is supposed to be \ProgramData\Creative\SoftwareLock\ folder. only SBConnect2 desktop app can recognize kga files from this specific path but not the SBConnect UWP app

note to alanfox2000: what is/are pw (password) for genkga3 & genkga3 v2 mentioned on audio enhancers page? I downloaded these but cannot extract them because password is missing.

also Creative UWP software component for Win10 x64 in APO driver is outdated - may want to get any of these versions from MS Update Catalog:
v2.0.0.17, v2.0.0.20 or v2.0.0.22
 
Last edited:
Top