Support arbitrary bit-depth and sample-rate processing.
Bug #807511 reported by
Sean M. Pappalardo
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mixxx |
Confirmed
|
Wishlist
|
Unassigned |
Bug Description
If only for marketing reasons, and for studio use, it would be fun to extend our mixing engine to work with 24-bit (integer) and 32-bit float samples at sample rates up to and including 192kHz.
This would actually be useful since WAV and FLAC both support 32-bit float samples and up to 192kHz sample rates. (FLAC goes as high as 655.35kHz!)
But it should be selectable, and default to 16-bit, 48kHz (or whatever it is currently,) so people that don't need that level of quality won't waste the resources on it (and Mixxx can still run on lower powered hardware.)
Changed in mixxx: | |
status: | New → Confirmed |
summary: |
- Allow insane sound quality settings + Support arbitrary bit-depth and sample-rate processing. |
tags: |
added: bitdepth engine samplerate soundmanager removed: bit depth rate sample sound width |
Changed in mixxx: | |
status: | Confirmed → In Progress |
assignee: | nobody → Uwe Klotz (uklotzde) |
tags: |
added: soundsource removed: bitdepth engine quality samplerate soundmanager |
Changed in mixxx: | |
status: | In Progress → Confirmed |
assignee: | Uwe Klotz (uklotzde) → nobody |
To post a comment you must log in.
CachingReader on up (in the engine call path) all uses 32-bit floats. Having the SoundSource's just write floats to memory instead of int16's would allow all the decoders to write to the precisions which their corresponding formats support, and would have no real affect on performance, with the only real downside being minor duplication of code in SoundSource's (because most will be doing an int16 to float32 conversion, but there is a method in SampleUtil accomplishing this which CachingReader currently uses to do the job). The SoundSource interface needs updating anyway, with brilliance like `unsigned read(unsigned long size, const SAMPLE *dest)'... yeah, because a destination buffer should obviously be const. /sarcasm
This might be more important in input (since most digital audio is made available as 16-bit CD-Audio anyway...), as all our input is int16 (because that's what xwax wants) but once passthrough gets done it'd be useful to support the 24-bit input many cards support these days. We'd just have to convert from float32 or int32 or whatever to int16 for xwax.