Chris Robinson
c2a6efc77a
Use the panning algorithms to build the multi-channel source matrix
...
This prevents the stereo-duplication option from working. It should hopefully
be restored soon.
2011-05-06 04:37:10 -07:00
Chris Robinson
6928487aa1
Remove some redundancy
2011-05-06 02:53:22 -07:00
Chris Robinson
f97eca34df
Minor source update fixes
2011-05-06 00:51:12 -07:00
Chris Robinson
1363e044ac
Remove the head_dampen option
...
Now that HRTF is properly supported, it's not needed
2011-05-06 00:38:10 -07:00
Chris Robinson
9967d4eadd
Mark a couple more pointers as restricted
2011-05-06 00:33:58 -07:00
Chris Robinson
e2850df07e
Use the same filters for mono sources and multi-channel
2011-05-03 16:18:46 -07:00
Chris Robinson
9a28402b90
Fix non-spatialized mono sources
2011-05-02 18:33:32 -07:00
Chris Robinson
f843b7e2e3
Implement HRTF mixers for multi-channel sources
2011-05-02 02:22:30 -07:00
Chris Robinson
eea86ab891
Use flags instead of separate bools
2011-05-01 18:18:37 -07:00
Chris Robinson
56d9418119
Add an HRTF filter for mono sources
...
The data is based on the KEMAR HRTF data provided by MIT, which can be found at
<http://sound.media.mit.edu/resources/KEMAR.html >. The compact measurements
were used. See hrtf_tables.inc for more information.
The filter is only available for stereo output, using a 44100hz playback rate.
Note also that it currently only applies to mono sounds, and the cf_level and
head_dampen config options are ignored while it is active.
2011-05-01 13:59:44 -07:00
Chris Robinson
10a9753183
Add a compatibility option to treat cone angles as half angles
...
All previous versions of the library treated the source cone angles as half
angles, which is contrary to the spec. Setting the __ALSOFT_HALF_ANGLE_CONES
environment variable to "true" or "1" restores the buggy behavior for
compatibility with applications that expect it.
This is not a config file option because new apps should not be made to depend
on the old behavior.
2011-04-22 23:17:27 -07:00
Chris Robinson
1e8718fe87
Convert full-width cone angle source properties to half-width
...
The spec intends the property values to be the full angle encompassed by the
cones, but the calculation interprets them as the angle from the center
point.
2011-04-22 22:59:58 -07:00
Chris Robinson
678d0b87d0
Apply the device matrix to the multi-channel source matrix
...
Mono sources and effects already output according to the available output
device channels. Multiplying the device matrix with the source matrix results
in a matrix that has the same effect as applying the source matrix followed by
the device matrix, so all the channel remixing can be done in one place.
2011-04-14 21:03:37 -07:00
Chris Robinson
4eeed5376f
Invert the device matrix row/column
...
It is accessed now as mat[target][source]
2011-03-13 08:46:54 -07:00
Chris Robinson
77ad538e68
Remove more unneeded casts
2011-03-13 07:11:09 -07:00
Chris Robinson
b699aca65b
Remove unnecessary casts
2011-03-13 06:34:41 -07:00
Chris Robinson
c3cd4c80b2
Use a matrix when rendering to the dry buffer
2010-12-09 16:37:23 -08:00
Chris Robinson
be3f3c4bf0
Make better use of the type range when converting from float
2010-12-09 05:06:29 -08:00
Chris Robinson
4010a6b745
Remove some now-unused functions
2010-12-08 02:56:24 -08:00
Chris Robinson
88e3a22772
Separate device format into 'channel config' and 'sample type' components
2010-12-04 19:50:00 -08:00
Chris Robinson
59990acc2a
Add functions to write (signed) byte and ushort samples to devices
2010-12-02 16:36:37 -08:00
Chris Robinson
4a0bf9fd44
Template-ize the device buffer writing functions
2010-12-01 21:50:49 -08:00
Chris Robinson
9e8fb89a52
Rename OUTPUTCHANNELS to something more descriptive
2010-12-01 18:33:17 -08:00
Chris Robinson
0cf32e2946
Reorder some parameters for consistency
2010-11-29 19:48:18 -08:00
Chris Robinson
da4f5c6f96
Uninline some functions
...
Also add -Winline to the compiler command line to watch for future inline problems
2010-11-28 19:52:17 -08:00
Chris Robinson
0e748d98d5
Rename some stuff for consistency
2010-11-28 13:08:51 -08:00
Chris Robinson
c41e893361
Don't store the internal format in the buffer
...
The type and channel config are good enough
2010-11-28 12:53:35 -08:00
Chris Robinson
d2895c7985
Use the enums in a couple more places
2010-11-27 00:15:07 -08:00
Chris Robinson
4d4d699780
Fix step calculations
2010-11-26 20:17:05 -08:00
Chris Robinson
ca1ec4b221
Fix some comments
2010-11-26 18:01:29 -08:00
Chris Robinson
facb922f3e
Properly clamp high pitch values
2010-11-26 17:47:43 -08:00
Chris Robinson
1cb29ece08
Make a FRACTIONONE macro, and use it
2010-11-26 01:21:46 -08:00
Chris Robinson
98d78f7ff9
Slightly improve channel gain calculations
2010-11-26 00:24:54 -08:00
Chris Robinson
e1c0b5ea24
Call MixSource directly, instead of through a function pointer
2010-11-25 23:09:18 -08:00
Chris Robinson
6ab22e7cbb
Reorder some stored source params
2010-11-24 10:01:50 -08:00
Chris Robinson
a7b4e0b5c5
Get rid of the device timer stuff
2010-11-21 06:32:59 -08:00
Chris Robinson
e884da50ea
Move aluMixData back to ALu.c
2010-11-21 02:51:18 -08:00
Chris Robinson
07346da740
Use the number of sends the device is configured for in more places
2010-11-06 14:27:33 -07:00
Chris Robinson
314832e35a
Rename a couple more variables
2010-10-10 04:00:50 -07:00
Chris Robinson
6a9dd185e6
Improve naming and placement of a couple variables
2010-10-10 03:47:57 -07:00
Chris Robinson
2172827f43
Simplify a calculation
2010-10-09 15:24:24 -07:00
Chris Robinson
117ed52091
Better protect against negative attenuation
2010-09-24 13:16:09 -07:00
Chris Robinson
8a0e15ff37
Store air absorption factor locally
2010-09-12 00:10:33 -07:00
Chris Robinson
8953a73fb1
Prevent effectiveDist from going negative
2010-09-11 23:57:15 -07:00
Chris Robinson
8003278a55
Combine non-attenuated source calculation functions
2010-08-07 06:57:31 -07:00
Chris Robinson
5f22d30fc9
Calculate the source stepping value with the param calculations
2010-08-07 05:43:16 -07:00
Chris Robinson
f4304ca062
Calculate the actual stepping value in the source update method
2010-08-07 00:38:02 -07:00
Chris Robinson
98bc60cfb7
Combine stereo and stereo-duplicate mixers
...
Use a separate update method for stereo sources to the set appropriate channel
gains
2010-08-05 01:07:20 -07:00
Chris Robinson
0dc3f1984e
Move the core mixer functions to a separate source file
2010-08-03 23:19:36 -07:00
Chris Robinson
e74976e645
Use a callback to specify the source update method
2010-08-03 23:10:00 -07:00
Chris Robinson
91278608c5
Add some spacing
2010-08-03 01:44:52 -07:00
Chris Robinson
8e2d765671
Move active source iteration to aluMixData
2010-08-03 01:09:02 -07:00
Chris Robinson
2af39e51f8
Separate speaker/panning initialization into another source file
2010-08-03 00:21:36 -07:00
Chris Robinson
41e2c41ecc
Combine duplicate lines into the mixing macro
2010-07-31 21:09:59 -07:00
Chris Robinson
30108c7855
Remove an unnecessary variable
2010-07-31 19:14:27 -07:00
Chris Robinson
7eb124d99c
Keep count of the number of samples played
2010-07-22 08:11:44 -07:00
Chris Robinson
6db3463d17
Fix backslash alignment for the single-channel mixer macro
2010-07-06 16:32:58 -07:00
Chris Robinson
7f6df7695c
Use an array of active sources when mixing
...
Prevents iterating over all allocated sources during mixing updates
2010-06-06 00:17:50 -07:00
Chris Robinson
90db244b5f
Skip mixing after checking looping validity
2010-06-03 03:58:04 -07:00
Chris Robinson
8cfac7c6b8
Don't bother storing the loop points in the source
2010-05-24 01:07:13 -07:00
Chris Robinson
6dab9d54d1
Use the loop start when filling in padding data for looping sources
2010-05-13 06:52:44 -07:00
Chris Robinson
7ed5d12717
Pay attention to the source loop points
2010-05-13 04:53:21 -07:00
Chris Robinson
23b2c1f902
Only use a modulo to loop when the source is static
2010-05-13 02:12:50 -07:00
Chris Robinson
af4faaf666
Use a UIntMap for the effect slot list
2010-05-12 02:20:14 -07:00
Chris Robinson
d678f1d88b
Store looping locally when mixing a source
2010-05-12 00:38:04 -07:00
Chris Robinson
099c2f3593
Use a simple loop to set multi-channel dry gains
2010-05-09 22:06:10 -07:00
Chris Robinson
0378422fcb
Use a map to store sources and buffers
...
And do a lookup using a binary search instead of linear
2010-05-01 19:59:41 -07:00
Chris Robinson
5d7815beed
Only apply ambient gain to available output channels
2010-04-27 11:39:54 -07:00
Chris Robinson
110be7f500
Add an option to scale the output mix
2010-04-23 07:54:43 -07:00
Chris Robinson
a04dac670e
Make stereo duplication a property of the device
...
Further, don't use it with mono/stereo output
2010-04-20 03:57:40 -07:00
Chris Robinson
fc2473f826
Translate the source position separately
...
This is to handle the case where an app specifies the same values for the
source and listener, and expects centered panning. This fails due to floating-
point errors in the matrix, causing the result to be ever-so-slightly off of 0.
This error would normally be hidden by the position normalization, which will
not lengthen a distance shorter than the reference distance so the panning
would be nearly imperceptible. But that also fails if the reference distance
is set to 0, causing the position to expand to a full unit.
Keep the 4x4 matrix calculations, however. It will still be useful for the
requested listener matrix extension.
2010-04-16 02:09:53 -07:00
Chris Robinson
000d848f0b
Return immediately when no layout is specified
2010-04-11 23:03:36 -07:00
Chris Robinson
3c5007352e
More type fixes
2010-04-11 20:17:43 -07:00
Chris Robinson
e0fa497948
Use a linear scaling when sending multi-channel sources to auxiliary slots
2010-04-11 15:20:46 -07:00
Chris Robinson
f082c73539
Use proper types for some variables
2010-04-11 14:33:22 -07:00
Chris Robinson
d4f8bd665f
Only consider output speakers for the panning LUT
2010-04-11 14:23:10 -07:00
Chris Robinson
488ec612bb
Avoid hard-coding the channel count
2010-04-09 14:21:47 -07:00
Chris Robinson
484702a2e5
Get the speaker arrangement before setting up the channel matrix
2010-04-09 12:27:30 -07:00
Chris Robinson
371058fb9e
Re-enable stereo duplication
2010-04-08 23:00:14 -07:00
Chris Robinson
97b00670f5
Use the proper type for the speaker-to-channel map
2010-04-08 18:05:24 -07:00
Chris Robinson
aace50ebf4
Store the panning LUT in the device
2010-04-08 15:58:11 -07:00
Chris Robinson
49201e892b
Use a single layout for the virtual speakers
...
The downmix should probably be improved to take the angles into account
2010-04-08 15:41:32 -07:00
Chris Robinson
068c0076af
Set the device channel matrix when the device is reset
2010-04-08 15:02:03 -07:00
Chris Robinson
37c93a6ad8
Always mix internally at 8.1
...
The channels are remixed when writing to the output buffer. Stereo duplication
is currently broken, but this can be restored later
2010-04-08 14:47:12 -07:00
Chris Robinson
1b1c76da34
Invert device channel map array
2010-04-08 13:11:21 -07:00
Chris Robinson
eea23a012a
Relax circular layout requirement
2010-03-20 00:54:44 -07:00
Chris Robinson
ec917e8e2f
Rename some struct members for consistency
2010-03-16 15:37:41 -07:00
Chris Robinson
08b1bed38b
Remove a couple incorrect comments
2010-03-10 07:16:53 -08:00
Chris Robinson
1f10195c47
Use powf when available
2010-03-07 22:12:33 -08:00
Chris Robinson
931f5875cd
Fix speaker angle fixup
2010-01-12 09:11:46 -08:00
Chris Robinson
505f61ff43
Properly trace the invalid speaker angle
2010-01-12 08:50:32 -08:00
Chris Robinson
574792d2e1
Fix Windows compilation
2010-01-11 23:47:03 -08:00
Chris Robinson
ab2eb5a603
Check buffer size when copying padding instead of the data pointer
2010-01-11 10:58:33 -08:00
Chris Robinson
3d7f925d52
Add helpful values to the resampler enum
2010-01-11 07:02:29 -08:00
Chris Robinson
93b584ff84
Add a cosine resampler
2010-01-11 06:19:54 -08:00
Chris Robinson
705849ca73
Add an option for point resampling
2010-01-11 05:37:20 -08:00
Chris Robinson
1a57f095e8
Hold global lock during mixing only when iterating device contexts
2010-01-11 03:57:49 -08:00
Chris Robinson
a0ef7be9a5
Improve layout parsing and allow using long names for speakers
2009-12-28 11:49:55 -08:00
Chris Robinson
7f0c6629b9
Use a 64-bit value to scale potentially-large numbers
2009-12-24 15:41:45 -08:00
Chris Robinson
ddfad996a9
Don't render mono as stereo
2009-12-21 02:59:30 -08:00