Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Add an option for "basic" HRTF rendering | Chris Robinson | 2015-02-11 | 3 | -9/+36 |
| | | | | | | | | | | | | | | | | | This method is intended to help development by easily testing the quality of the B-Format encode and B-Format-to-HRTF decode. When used with HRTF, all sources are renderer using the virtual B-Format output, rather than just B-Format sources. Despite the CPU cost savings (only four channels need to be filtered with HRTF, while sources all render normally), the spatial acuity offered by the B-Format output is pretty poor since it's only first-order ambisonics, so "full" HRTF rendering is definitely preferred. It's /possible/ for some systems to be edge cases that prefer the CPU cost savings provided by basic over the sharper localization provided by full, and you do still get 3D positional cues, but this is unlikely to be an actual use- case in practice. | ||||
* | Calculate HRTF coefficients for all B-Format channels at once | Chris Robinson | 2015-02-10 | 3 | -34/+72 |
| | | | | | | It's possible to calculate HRTF coefficients for full third-order ambisonics now, but it's still not possible to use them here without upmixing first-order content. | ||||
* | Use a single statement to declare the buffer format channel maps | Chris Robinson | 2015-02-10 | 1 | -14/+9 |
| | |||||
* | Pass the (FuMa) channel number to GetBFormatHrtfCoeffs | Chris Robinson | 2015-02-10 | 3 | -10/+10 |
| | |||||
* | Correct conversion from polar to cartesian coords for HRTF | Chris Robinson | 2015-02-10 | 1 | -3/+3 |
| | | | | | A functional no-op (cos(a) == cos(-a), -sin(a) == sin(-a)), but Ambisonics expects the azimuth angle to go counter-clockwise. | ||||
* | Use B-Format for HRTF's virtual output format | Chris Robinson | 2015-02-09 | 4 | -33/+97 |
| | | | | | | | | This adds the ability to directly decode B-Format with HRTF, though only first- order (WXYZ) for now. Second- and third-order would be easilly doable, however we'd need to be able to up-mix first-order content (from the BFORMAT2D and BFORMAT3D buffer formats) since it would be inappropriate to decode lower-order content with a higher-order decoder. | ||||
* | Properly handle a mono output buffer with the MIDI synths | Chris Robinson | 2015-02-09 | 5 | -17/+19 |
| | |||||
* | Add a comment detailing how the HRTF channel buffer is set up | Chris Robinson | 2015-02-09 | 1 | -19/+45 |
| | |||||
* | Make sure the BS2B filter is freed if HRTF is enabled | Chris Robinson | 2015-02-09 | 1 | -0/+4 |
| | |||||
* | Move HRTF params and state closer together | Chris Robinson | 2015-02-09 | 4 | -18/+18 |
| | |||||
* | Add a note to the JACK backend about a (minor) race condition | Chris Robinson | 2015-02-07 | 1 | -0/+14 |
| | |||||
* | Fix some ringbuffer function comments | Chris Robinson | 2015-02-07 | 1 | -4/+4 |
| | |||||
* | Clean up another vector iterator loop | Chris Robinson | 2015-02-07 | 1 | -12/+12 |
| | |||||
* | Avoid tracing wide-char strings | Chris Robinson | 2015-02-07 | 2 | -27/+43 |
| | | | | | | Because on Windows, traced strings are written to a char string, which causes UTF-16 strings to be converted to a narrow (non-UTF-8) encoding, potentially losing characters. | ||||
* | Avoid unnecessary uses of ExchangeInt/Ptr | Chris Robinson | 2015-02-04 | 4 | -15/+23 |
| | |||||
* | Avoid unnecessary ExchangeInt uses | Chris Robinson | 2015-02-04 | 1 | -2/+2 |
| | |||||
* | Try the JACK backend before PulseAudio | Chris Robinson | 2015-02-03 | 1 | -3/+3 |
| | | | | | The backend will not spawn a server by default, so PulseAudio will still be preferred as long as a JACK server isn't already running. | ||||
* | Signal the mixer thread outside of the mutex lock | Chris Robinson | 2015-02-03 | 1 | -1/+5 |
| | |||||
* | Don't try to spawn a JACK server by default | Chris Robinson | 2015-02-03 | 1 | -6/+6 |
| | | | | And don't print an error if one couldn't be started when not requested. | ||||
* | Always use the JACK server buffer size as the update size | Chris Robinson | 2015-02-03 | 1 | -12/+15 |
| | | | | | The buffer-size config option now only specifies an additional mix ahead to keep ready for audio requests, rather than a pretend period size. | ||||
* | Ensure PulseAudio's mixing loop is signaled when stopping | Chris Robinson | 2015-01-21 | 1 | -0/+8 |
| | |||||
* | Remove a couple unused variables | Chris Robinson | 2015-01-20 | 1 | -3/+0 |
| | |||||
* | Fix variable check | Chris Robinson | 2015-01-20 | 1 | -1/+1 |
| | |||||
* | Fix X7DOT1_NARROW name to X7DOT1_WIDE | Chris Robinson | 2015-01-15 | 1 | -3/+3 |
| | |||||
* | Accept a "narrow" layout for 7.1 with mmdevapi | Chris Robinson | 2015-01-15 | 1 | -2/+3 |
| | |||||
* | Fix high-pass coefficients | Chris Robinson | 2015-01-13 | 1 | -6/+6 |
| | |||||
* | Add missing alignas to CubicLUT declaration | Chris Robinson | 2015-01-13 | 1 | -1/+1 |
| | |||||
* | Fix the flags type | Chris Robinson | 2015-01-11 | 1 | -1/+2 |
| | |||||
* | Remove some IN_IDE_PARSER uses | Chris Robinson | 2014-12-24 | 4 | -18/+4 |
| | |||||
* | Remove some unnecessary restrict uses | Chris Robinson | 2014-12-24 | 1 | -7/+6 |
| | |||||
* | Update some function comments (bytes -> elements) | Chris Robinson | 2014-12-24 | 1 | -7/+8 |
| | |||||
* | Update a comment | Chris Robinson | 2014-12-24 | 1 | -2/+2 |
| | |||||
* | Don't update the channel format if all JACK ports were allocated | Chris Robinson | 2014-12-23 | 1 | -9/+11 |
| | |||||
* | Try the device-specified channel configuration first | Chris Robinson | 2014-12-23 | 1 | -3/+15 |
| | | | | | This does basically no checking that the channel config is correct, but should be good enough for when non-stereo modes are requested. | ||||
* | Use the custom ringbuffer instead of JACK's | Chris Robinson | 2014-12-23 | 1 | -41/+20 |
| | |||||
* | Add a lockless ringbuffer | Chris Robinson | 2014-12-23 | 2 | -0/+290 |
| | | | | | | Largely copied from JACK, it's extended to work with user-specified element sizes instead of bytes. This is necessary to be able to work with 6- and 7- channel output modes. | ||||
* | Don't set unused pointers to NULL, don't try to write 0 samples | Chris Robinson | 2014-12-23 | 1 | -7/+8 |
| | |||||
* | At least measure the ringbuffer size for JACK's latency | Chris Robinson | 2014-12-23 | 1 | -1/+17 |
| | | | | | | We should also add the port latency, but there's currently no way to ensure it's synchronized with the ringbuffer (the ringbuffer will update before the port latency gets updated). | ||||
* | Add an option to prevent spawning a JACK server | Chris Robinson | 2014-12-22 | 2 | -2/+11 |
| | |||||
* | Add JACK to the config utility | Chris Robinson | 2014-12-22 | 1 | -0/+1 |
| | |||||
* | Add an option for an increased ringbuffer size with JACK | Chris Robinson | 2014-12-22 | 2 | -2/+24 |
| | |||||
* | Fill out the JACK playback backend | Chris Robinson | 2014-12-22 | 1 | -15/+326 |
| | | | | | | | | | | | | | | | | | | | | | | | | A few notes about it: The OpenAL device's requested buffer metrics are ignored, and instead the device will keep one JACK-sized buffer's worth of audio prepared for JACK's next process request. Output is restricted to 32-bit float stereo. Part of this is because JACK requires a buffer size that's a power of 2 (measured in samples), and the ringbuffer requires a buffer size that's a power of 2 (measured in bytes). A channel count of 6 (5.1) or 7 (6.1) will not work without causing a sample to split over the edge of the ringbuffer. Additioanlly, JACK doesn't provide information about what channel configuration a device or set of ports has, so there's no way to know what ports 3 and up map to (even the first two ports are unknown, but assuming stereo seems to work well enough). There is no device latency measurement (for AL_SOFT_source_latency) due to the non-atomicity between the ringbuffer's read size and port latency. A method is needed to ensure the ringbuffer's read size and port latency can both be measured between the end of a JACK update cycle (when the port latency has been updated with the newly-retrieved audio) and the following ringbuffer read update. | ||||
* | Add a skeleton backend for JACK | Chris Robinson | 2014-12-21 | 5 | -0/+290 |
| | |||||
* | Add a cmake module to find JACK | Chris Robinson | 2014-12-21 | 1 | -0/+60 |
| | |||||
* | Set error if capture device fails to start | Chris Robinson | 2014-12-21 | 1 | -4/+10 |
| | |||||
* | Trace lparam and wparam message values | Chris Robinson | 2014-12-21 | 1 | -1/+1 |
| | |||||
* | Check the PROPVARIANT type before use | Chris Robinson | 2014-12-21 | 1 | -2/+8 |
| | |||||
* | Use VECTOR_FOR_EACH instead of a manual loop | Chris Robinson | 2014-12-21 | 1 | -9/+7 |
| | |||||
* | Use a macro for the record thread name | Chris Robinson | 2014-12-21 | 4 | -3/+5 |
| | |||||
* | Cast to the pointer-to-type to increment the buffer | Chris Robinson | 2014-12-21 | 1 | -1/+1 |
| |