aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Cleanup PFFFTChris Robinson2023-10-091-571/+604
| | | | | | Make stylization more consistent. Remove SVMUL (they all simulated it with a LD_PS1 on the scalar). Avoid calling LD_PS1 on the same value in a loop.
* Avoid std::aligned_storage, it's deprecated in newer C++Chris Robinson2023-10-081-3/+3
|
* Remove more type-punning from pffftChris Robinson2023-10-081-52/+63
|
* Clean up some more type-punning in pffftChris Robinson2023-10-081-22/+42
|
* Mark some functions as maybe_unusedChris Robinson2023-10-081-0/+2
| | | | For non-SSE-capable targets
* Avoid some type-punning and clean up pffft a bitChris Robinson2023-10-081-161/+148
|
* Update and clarify some commentsChris Robinson2023-10-072-91/+93
|
* Add a generic GCC vector extension fallback for pffftChris Robinson2023-10-061-13/+80
| | | | Also combine multiple allocations into one.
* Improve NEON shufflingChris Robinson2023-10-061-21/+3
|
* Fix x86-64 MSVC checkChris Robinson2023-10-061-1/+1
|
* Use PFFFT for the convolution effectChris Robinson2023-10-061-40/+92
|
* Include a copy of PFFFTChris Robinson2023-10-064-0/+2241
| | | | | This is a notably faster FFT implementation for 32-bit float signals, provided under a 3-clause BSD license.
* Avoid inline assembly for getting/setting SSE stateChris Robinson2023-10-051-20/+49
|
* Clear the 0 and half-frequency bins for the phase shift filterChris Robinson2023-10-031-2/+5
| | | | | | This doesn't change the filter response, but is more correct since a real signal won't have an imaginary value on them (it can only have a magnitude with a phase of 0 or pi).
* Improve ambisonic rotator coefficient accuracyChris Robinson2023-10-021-17/+38
|
* Declare a missing variableChris Robinson2023-10-011-1/+1
|
* Get the default WASAPI device on UWPChris Robinson2023-10-011-25/+14
|
* Add a wrapper for COM initializationChris Robinson2023-09-293-34/+62
| | | | | This helps ensure COM is initialized and deinitialized in order relative to other objects (e.g. ComPtr).
* Ensure the WASAPI resample buffer is cleared when mixing startsChris Robinson2023-09-291-9/+6
| | | | | Otherwise, stopping and restarting without resetting could leave it with invalid pointers.
* Don't inline a couple more template functionsChris Robinson2023-09-261-2/+2
| | | | | I still wish I didn't have to force noinline just to avoid template functions being more aggressively inlined.
* Set the appropriate padding sizeChris Robinson2023-09-261-1/+1
| | | | It's based on the original/stream size, not the ALCdevice's.
* Constify some pointers to indicate they won't changeChris Robinson2023-09-253-3/+3
|
* Use std::array instead of a C-style arrayChris Robinson2023-09-251-1/+2
|
* Make cppwinrt version configurable (#919)Deal2023-09-261-1/+3
|
* Compile with c++20 support (#920)Deal2023-09-252-6/+8
| | | | | * Compile with c++20 support * Update CMakeLists.txt
* Honor the wasapi allow-resampler option with spatial sound outputChris Robinson2023-09-241-0/+4
|
* Match the output sample rate if not requesting oneChris Robinson2023-09-241-0/+4
|
* Support resampling with WASAPI spatial audio outputChris Robinson2023-09-241-14/+67
|
* Fix cppwinrt exception type capture (#918)Deal2023-09-231-1/+1
|
* Update AppVeyor to use VS 2019Chris Robinson2023-09-221-2/+2
|
* Avoid casting an integer literalChris Robinson2023-09-2215-33/+38
|
* Shift the appropriate typeChris Robinson2023-09-222-6/+12
|
* UWP: migrate C++/CX to C++/WinRT (#916)Deal2023-09-223-83/+78
|
* Try to get the device period for spatial audio streamsChris Robinson2023-09-211-30/+52
|
* Add a SampleConverter method to convert planar buffer linesChris Robinson2023-09-212-0/+93
|
* Don't assume the size of AudioObjectTypeChris Robinson2023-09-211-1/+1
|
* Again try to fix handling an enum typeChris Robinson2023-09-201-1/+2
|
* Don't assume an enum's underlying typeChris Robinson2023-09-201-1/+1
|
* Fix MSVC compilationChris Robinson2023-09-201-0/+2
| | | | MinGW's headers don't seem to define operator| for AudioObjectType.
* Preliminary implementation of WASAPI spatial audio playbackChris Robinson2023-09-203-161/+549
|
* Replace some more unnecessary angles with vectorsChris Robinson2023-09-181-47/+77
|
* Fix source span sizeChris Robinson2023-09-171-5/+5
|
* Rename noinline to NOINLINEChris Robinson2023-09-172-5/+5
| | | | To avoid clashes with compilers that use it as a keyword already
* Don't inline some big functionsChris Robinson2023-09-162-40/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is very dumb. Template functions are implicitly marked inline according to C++, and contrary to popular belief, "inline" *does* influence the compiler's decision to inline a function. A function the compiler may not have decided to inline normally may be inlined anyway, or issue a warning if it still decides not to inline, if explicitly or implicitly marked as such (or does inline it as requested, but then decides to not inline different functions it normally would because of a cumulative code size increase or something). Furthermore, once a function becomes inline due to being a template function, there's no way to undo it. Marking an inline function "noinline" pushes the problem the other way, causing the compiler to not inline a function it may have decided was beneficial to inline. There's no way to declare a template function to be inlined based solely on compiler heuristics, it will always be influenced by the implicit "inline" or explicit "noinline". That's what's happening here. A number of functions had been combined into a smaller number of large-ish template functions to reduce code duplication and ease maintanence, causing them to be implicitly inline as a side-effect. GCC then manages to inline these larger functions as implicitly requested, but in doing so prevents other smaller functions (which are explicitly marked inline) from being inlined due to excessive code increase and issue a warning. The "noinline" is a heavy-handed method of un-pessimizing the optimization pass, on the assumption the compiler apparently doesn't actually want to inline the template functions, but does so because they're technically marked inline. There's no good option here until it gets acknowledged that inline does mean something beyond allowing multiple definitions, and that template (and other types of) function definitions sometimes (if not most often) want to allow multiple definitions but don't want an artificial/detrimental boost in inline prioritization. /rant
* Use duration_cast to convert nanoseconds to secondsChris Robinson2023-09-161-9/+14
|
* Store channel positions as vectors instead of anglesChris Robinson2023-09-147-130/+175
| | | | To avoid extraneous conversions between angles and vectors
* Use a span instead of an auto&& to arrayChris Robinson2023-09-131-7/+7
|
* Add a alcGetProcAddress2 functionChris Robinson2023-09-123-0/+8
| | | | | | | | | | | | | | | | This is essentially just a copy of alcGetProcAddress. It's purpose is to bypass Creative's router's alcGetProcAddress implementation, which returns its own functions even if given a device handle. When combined with it also wrapping the drivers' device and context handles, that prevents any extention function that needs a recognizable device or context handle from working, like the *Direct functions, as there's no way for the app to get a device or context handle the driver can know about). An alternate function to get function pointers allows a driver to return its own implementation for standard and extension functions, which an application can use to "bootstrap" audio to use a particular driver directly, enabling use of extensions that the router gets in the way of (and also avoid the overhead of the router, however small that may be).
* Make some global and static member variables inlineChris Robinson2023-09-115-42/+6
| | | | | This also seems to work around the problematic MinGW code generation, so the indirection to access it can be removed.
* Approximate sin for the reverb modulator LFOChris Robinson2023-09-111-2/+7
| | | | | | | Reverb needs to prioritize efficiency since it's expected that an app may use multiple reverb effects simultaneously, and each individual effect may process twice during a pipeline transition. Approximating sin helps by replacing a per- sample libc call that we don't need to be perfectly accurate.