Been using Linux for nearly 15 years now ... the audio sub-system still sucks. Why doesn't the kernel do something sane like support 4 or 8 channels and mix natively ... what, is the scheduler performance so crappy that it can't handle 8 stereo channels of 16-bit 48KHz data timely? Stuck with my single channel Intel on-board audio still. Every two years we get a "new and improved" crap audio server process, and nobody learns.
Open source identity: PulseAudio creator Lennart Poettering (CIO)
Posted Oct 13, 2009 6:17 UTC (Tue) by alankila (subscriber, #47141)
[Link]
There is no one setting that is OK for everyone. The most important thing to consider is that hi-fi audio processing can take a lot of time, and the only real improvements available for, say, convolutions are SSE/SSE2 processing that can operate 4 or 2 floats at a time.
Unfortunately for kernel, it can't do floating point mathematics. That limits kernel's operations to integer-only stuff, which is unable to do it well enough. 32-bit integers aren't wide enough for running 96 dB SNR convolutions, so no serious audio freak would accept such a compromise.
So, to summarize: you can't solve this problem from kernel in fashion that is acceptable for everyone.
Open source identity: PulseAudio creator Lennart Poettering (CIO)
Posted Oct 14, 2009 2:13 UTC (Wed) by paulj (subscriber, #341)
[Link]
Unfortunately for kernel, it can't do floating point mathematics.
That's not true though. While there may be very good reasons for not prohibiting
the kernel from using FP generally, there's no reason that specific sub-
systems of the kernel could not use FP or SSE if they're careful. E.g. see the
use of MMX and SSE by the RAID-5/6 modules.
Open source identity: PulseAudio creator Lennart Poettering (CIO)
Posted Oct 14, 2009 2:50 UTC (Wed) by alankila (subscriber, #47141)
[Link]
Hey, good point. It is already being done. Looks like floating point processing runs with pre-emption disabled. It could still be harmful for latency/realtime work, unless done in small chunks or something. (Source: asm/i387.h, kernel_fpu_begin().)