aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* Combine multiple divisions into oneChris Robinson2023-09-101-8/+11
|
* Improve the FFT bit reversal computationChris Robinson2023-09-092-34/+43
| | | | | This also allows to include 11-bit indices in the fast lookup table path, without exceeding GCC's internal limit of compile-time calculations.
* Rename a couple internal cmake target namesChris Robinson2023-09-091-29/+29
| | | | To avoid clashes when used as a sub-project
* Optimize FFT calculations for lengths of 1024 or lessChris Robinson2023-09-091-23/+64
| | | | | This replaces sin/cos calls with an array of 10 complex values for lookup tables, and separates the first loop iteration with a constant x1 multiplier.
* Include the early and late reverb gain for the decay fade timerChris Robinson2023-09-051-3/+30
|
* Precalculate some square factorsChris Robinson2023-09-041-7/+2
|
* Fix CMake deprecation warning in OpenAL config. (#909)Nick2023-09-041-1/+1
|
* Don't use a custom config for the pipewire event loopChris Robinson2023-09-031-1/+1
|
* Use a variant instead of a union+flagChris Robinson2023-09-032-39/+47
|
* Avoid putting strings in fixed arrays of char arraysChris Robinson2023-09-021-21/+22
|
* Handle a null string in DeviceHelper::OnDefaultDeviceChangedChris Robinson2023-08-311-6/+6
|
* Combine separate loops into oneChris Robinson2023-08-301-5/+6
|
* Mention surround714 in alsoftrc.sampleChris Robinson2023-08-301-4/+9
|
* Don't set VISIBILITY_PRESETs without visibility attributesChris Robinson2023-08-291-23/+20
|
* Use a more accurate ring modulator waveform generatorChris Robinson2023-08-291-37/+76
| | | | | | This restricts available frequencies to fit an integer number of samples per cycle, but ensures no unintended harmonics from misaligned samples w.r.t. sawtooth and square waveforms.
* Avoid some large stack buffersChris Robinson2023-08-281-27/+18
|
* Fix waveforms generated by altonegenChris Robinson2023-08-281-32/+41
|
* Slightly improve some all-pass filter coefficientsChris Robinson2023-08-281-6/+6
|
* Replace another C string with string_viewChris Robinson2023-08-261-5/+4
|
* Simplify building a string messageChris Robinson2023-08-261-11/+3
|
* Use string_view in a couple more placesChris Robinson2023-08-254-38/+20
|
* Use a bit_cast instead of a union for type-punningChris Robinson2023-08-251-31/+16
|
* Allow querying AL_EFFECTSLOT_EFFECTChris Robinson2023-08-253-6/+14
| | | | | | | This doesn't make much sense since the effect associated with the ID may be modified and not represent the effect being played, or was even deleted and isn't a valid effect ID, but Generic Software allows querying it so it should be queryable for compatibility if nothing else.
* Fix ALC_CONTEXT_FLAGS_EXT valueChris Robinson2023-08-231-1/+1
|
* Clear errno prior to the call that may set itChris Robinson2023-08-211-0/+1
|
* Fix conversion and maybe-unused warnings with my_fopenChris Robinson2023-08-181-3/+10
|
* Use a string instead of a c_str for a string_viewChris Robinson2023-08-181-1/+1
|
* Make ALC_SOFT_system_events publicChris Robinson2023-08-184-19/+25
|
* Remove an unnecessary source fileChris Robinson2023-08-183-35/+11
|
* Use an array of bytes instead of ints for small valuesChris Robinson2023-08-151-4/+4
|
* Don't null check the context in the direct EAX functionsChris Robinson2023-08-132-57/+15
|
* Make AL(C)_EXT_debug publicChris Robinson2023-08-114-68/+68
|
* Add missing includesChris Robinson2023-08-112-0/+3
|