Commit Graph

38 Commits

Author SHA1 Message Date
Mike Fricker
701ad40823 Improved support for Clang C++ compiler on Windows
- The entire editor can now be compiled using Clang on Windows.  It also runs (as long as you use the MSVC linker.)
- Use UEBuildWindows.bCompileWithClang=true to help test Clang support
- Most UE4 programs can now be compiled using Clang on Windows, and linked using the Clang linker on Windows
- Many C++ syntax fixes to resolve Clang errors and warnings when on Windows
- Clang on Windows now supports PCH files properly (but not "shared" PCHs, yet.)
- Hacked the DirectX XAudio2 headers slightly to work around a macro pasting bug in Clang

[CL 2494439 by Mike Fricker in Main branch]
2015-03-27 16:44:10 -04:00
Dan Oconnor
195086b1a5 Changes from PVS-Studio, these could introduce small behavior change.
Consistent null checks, fixes for copy/pasted conditions, copy pasted LOCTEXT identifiers, comparisons against literals of the wrong type, missing return statements, dead code, and some system calls that were ignoring their return value

[CL 2494390 by Dan Oconnor in Main branch]
2015-03-27 16:11:50 -04:00
Aaron McLeran
cc689ed400 Integrating Oculus Audio SDK to Main
Original Notes (adapted)

Implementation and Integration of Oculus Audio SDK for VR Audio Spatialization

- Adding new audio extension which wraps the oculus audio sdk and the new XAPO plugin
- Adding new XAPO (Xaudio2 Audio Processing Object) effect for processing mono audio source streams inside the new module
- Added new enumeration which allows users to select which spatialization algorithm to use for spatialized mono sources
- Refactored the regular sound source spatialization/effect in XAudio2 device code to support the new HRTF mono-to-stereo effect
- Designed feature so that if the sound spatialization module isn't used, the spatialization will default to normal spatialization algorithm

Notes on implementation:

- Because the audio engine doesn't bifurcate spatialized vs. non-spatialized sound sources into separate source pools, I had to create up-front the effects for the full number of supported sounds 32). This is because the oculus sdk requires at initialization the total number of sound sources that will be used in the SDK.

- Because the oculus SDK refers to sound source instances by index (into the pre-allocated array of sources set at init), I had to save each sound source's index so that it can be used on the HRTF XAPO effect, and then piped to the oculus SDK inside the UE audio extension.

- The audio engine assumes that mono-sources will be treated a certain way (during send-routing and spatialization). Because this new HRTF effect is effectively turning mono-sources into stereo-sources, some code had to be changed to send/route these audio sources as if they were stereo.

- This implementation is slightly different than the original GDC implementation to better work with multiple audio devices. Each audio device creates an IAudioSpatializationAlgorithm object which contains the oculus HRTF processing contexts.

#codereview Nick.Whiting Marc.Audy

[CL 2488287 by Aaron McLeran in Main branch]
2015-03-23 16:14:54 -04:00
Aaron McLeran
cf335201de Fixing XBoxOne and PS4 Builds
#codereview marc.audy

[CL 2477347 by Aaron McLeran in Main branch]
2015-03-12 15:46:59 -04:00
Aaron McLeran
d2729ee628 Supporting multiple audio devices for multiple PIE and other potential use-cases.
- Created audio device manager which manages weak ref handles to audio devices
- Audio device handles are created with WorldContexts and accessed through UWorld objects
- All access to audio devices are now through audio device handles
- There is a main/default audio device for GEngine for use with the Editor and single worldcontext games

#codereview marc.audy, matthew.griffin

[CL 2477046 by Aaron McLeran in Main branch]
2015-03-12 12:59:33 -04:00
Ben Marsh
149375b14b Update copyright notices to 2015.
[CL 2379638 by Ben Marsh in Main branch]
2014-12-07 19:09:38 -05:00
Matthew Griffin
f1c4513760 Renaming FVector ClampSize and SafeNormal functions for clarity
Used DEPRECATED Macro to keep old names around in case I've missed anything

[CL 2370785 by Matthew Griffin in Main branch]
2014-11-26 10:01:12 -05:00
Matthew Griffin
e529148280 Added config setting for audio volume when app is unfocused
Removed GVolumeMultiplier and added an equivalent to FApp to contain the code to load the unfocused volume multiplier from config.

UE-4449 - Allow users to choose whether audio can be heard when focus is lost

#codereview Robert.Manuszewski

[CL 2341022 by Matthew Griffin in Main branch]
2014-10-27 08:15:41 -04:00
Marc Audy
ada4cf303f Rename AReverbVolume to AAudioVolume
[CL 2311102 by Marc Audy in Main branch]
2014-09-26 11:32:27 -04:00
Robert Jones
566d29dd25 #ttp 334858 Android : Support ADPCM
Added support for ADPCM decoding.
Added 'sound type' information to USoundWave
- Android uses this to detect which type of asset it needs to deal with
Added support for selected encoding type via project settings

#codereview Daniel.Lamb, Chris.Babcock

[CL 2260750 by Robert Jones in Main branch]
2014-08-18 09:13:38 -04:00
Lina Halper
e513ea2300 Named FMatrix/FTransform unsafe Inverse to InverseFast, and InverseSafe,InverseSlow to Inverse as people often use Inverse as default function.
- Inverse was one of the main reasons of crashes via lots of functions. Seems making default Inverse to be safer version seems better.

[CL 2255081 by Lina Halper in Main branch]
2014-08-13 15:29:41 -04:00
Marc Audy
1ab5ccee92 Fix crash using 7.1 speaker set up due to X3DAudioCalculate overrunning the matrix coefficient buffer we set out
[CL 2254836 by Marc Audy in Main branch]
2014-08-13 13:08:51 -04:00
Marc Audy
5f358fb308 Do not disable audio when an audio devices that support > 6 channels is attached
[CL 2251887 by Marc Audy in Main branch]
2014-08-11 16:31:36 -04:00
Matthew Griffin
c0d29a957c Multi channel support for Opus
Implemented CookSurround function for AudioFormatOpus, refactoring as much common code from the standard Cook into re-usable functions.
Changed OpusAudioInfo class to use a multistream decoder for all sounds, as 1 and 2 channel sounds can still be decoded by it. Just had to create an array of mappings that would take the internal Opus format and give back PCM data in the order that Unreal expects.
Also made the OpusDecoderWrapper a true wrapper so that you don't have to use any opus functions outside of it and it will not function if WITH_OPUS is not defined.
Added a virtual function to the CompressedAudioInfo interface, to check whether its uncompressed data will be in the Vorbis format. This is to make sure that code currently just checking whether there is a DecompressionState can now be sure that the Vorbis format is being used before routing sound to different speakers.
Made sure that you can't cause any problems by adding or removing a SoundWave from the Audio Streaming Manager more than once. Also rearranged where sounds are added to the manager so that it is only done in one place and it's safe when changing quality triggers recompression/splitting.
Added a global multidimensional array to store all the Vorbis channel orderings as they needed to be used in multiple places.
Added Logging and Memory tracking for the streaming process.

[CL 2217839 by Matthew Griffin in Main branch]
2014-07-15 06:09:13 -04:00
Bob Tellez
a399d885b6 Merging CL#2188206 using UE4-Fortnite-To-UE4
MCPInfo:
  "app" : "fortnite",
  "moduleName" : "Fortnite-PublicService",
  "branch" : "TRUNK",
  "build" : "240",
  "cln" : "2172251",
  "version" : "UNKNOWN"

[CL 2215307 by Bob Tellez in Main branch]
2014-07-14 19:41:38 -04:00
Matthew Griffin
c28dea244e Splitting format specific classes out of AudioDecompress.cpp/h
New files added to contain FVorbisAudioInfo and FOpusAudioInfo, added all necessary includes
Added a few more checks for whether the target platform supports audio streaming where appropriate
Moved #define to .h file as it was being used in two .cpp files (working because of unity build)

[CL 2137973 by Matthew Griffin in Main branch]
2014-07-04 09:47:36 -04:00
Matthew Griffin
7b37c1507d Preventing full data from being cooked in streaming sounds
Added platform feature/property for audio streaming so that it's not used on platforms that don't support it yet
Prevent full data from being cooked if sound is streaming AND streaming is supported on the cooked platform
Prevent streaming chunks from being cooked if cooked platform doesn't support streaming
Prevent the Resource data from being initialized and full data size being added to stats if sound is streaming

[CL 2130171 by Matthew Griffin in Main branch]
2014-07-03 06:07:49 -04:00
Josh Markiewicz
b37f250b75 #Fort weekly dev->main using approved smoketest CL#2118999
UE4-Fortnite-CL-2118999
CL# 2118999
MCP CL# 2117450
Linux Dedicated Server
Backend: Testing

  "app" : "fortnite",
  "moduleName" : "Fortnite-PublicService",
  "branch" : "TRUNK",
  "build" : "217",
  "cln" : "2117450",
  "version" : "UNKNOWN"

[CL 2123380 by Josh Markiewicz in Main branch]
2014-07-01 11:28:39 -04:00
Matthew Griffin
2ff606464b Added Audio Streaming Manager and streaming audio playback
Audio Streaming Manager will keep track of SoundWaves that are marked for streaming and any sound sources that are using those waves.
Added functionality to all Sound Buffers to report which chunk of audio they are currently reading from, which the manager will use to request the current and next chunk be loaded in memory.
Added a struct to contain all of the additional information needed for a Streaming SoundWave and set off requests, which the manager will also keep track of to avoid increasing the memory size of all SoundWaves.
Tidied up the Opus Decompressor to reduce the amount of repeated code and share the basic functionality for streaming and non-streaming usage.
Set XAudio sounds up to use streaming data, with a function added to the audio device so that other platforms won't try to make use of it for the moment.

[CL 2123061 by Matthew Griffin in Main branch]
2014-07-01 05:42:02 -04:00
Laurent Delayen
a377ef0cf4 Dev to Main from cl #2110143
[CL 2118596 by Laurent Delayen in Main branch]
2014-06-26 17:26:58 -04:00
Matthew Griffin
551379cad2 Fixing issues with SoundWave memory and duplicated variables in some platforms.
Moved most of the contents of FAudioDevice::FreeResource to USoundWave::FreeResources so that we can be sure that all memory is cleared up during teardown.
Removed FreeResource function from some subclasses of audio device, as they weren't doing anything different than the base one.
Also removed ListSounds function from these same classes as that seems to have fallen behind current base class version and isn't used anyway.
Removed platform specific audio buffer storage so that there isn't confusion about which is being used and ensured that casts are used when necessary.
Fixed compile issue with STAT_AudioResourceCreationTime for HTML5.

[CL 2109273 by Matthew Griffin in Main branch]
2014-06-18 10:31:15 -04:00
Bob Tellez
cc8b692587 UE4: Fixed up some usage of the OVERRIDE macro
[CL 2107727 by Bob Tellez in Main branch]
2014-06-16 23:33:51 -04:00
Bob Tellez
d45afc096c Merging using CL#2104122 UE4-Fortnite-To-UE4
[CL 2107706 by Bob Tellez in Main branch]
2014-06-16 23:03:48 -04:00
Jaroslaw Palczynski
ebce413232 UE4 Refactoring. Changed OVERRIDE and FINAL macros to keywords override and final.
[CL 2104397 by Jaroslaw Palczynski in Main branch]
2014-06-13 06:14:46 -04:00
Marc Audy
120b8734b3 Wrap some more XAudio API calls in ValidateAPI
[CL 2103173 by Marc Audy in Main branch]
2014-06-12 10:39:19 -04:00