Open lunixbochs opened 5 years ago
What platform and backend are you using?
This is audiounit on mac. If I set the input rate to 44100, I don't get any artifacts, so it only happens when downsampling. It happens even if I dump straight to disk from the input data callback (which is what I've done here), but I can also hear them if I turn around and pipe the samples into an output stream using the echo example from the cubeb header.
Can you attach an example program? This consistently work well here on OSX.
You should certainly not do IO or any other blocking call from the callback though, that will cause problems like what you describe.
It has identical artifacts when hooked up to an output stream without IO. Adding a step to write the samples to a file did not change the output at all. My CPU is also effectively idle. I'm not getting any CoreAudio messages about dropped frames in Console.app.
It might be hard to hear on the loopback if you're just talking into a mic. When I use my phone to play a 600hz tone into the mic it's very obvious.
You might also have a different hardware capture rate than me, which could make the resampler behave differently for you. The attached source file is set to 15khz, but I get the same effect at 16khz, 32khz, 48khz, or even 96khz. Any resampled frequency. The only one that doesn't crackle under my loud 600hz tone is 44.1khz, my native input frequency.
FWIW my core use case is code I'm porting away from AudioUnit to cubeb for cross-platform support, and AudioUnit has no artifacts when resampling to 16khz for the same workload.
I think I can repro and I have a possible fix for you to test: https://github.com/padenot/cubeb/commit/264cdd69f1109940b7ddb9e1514b6b431bf1ac42. If this works well, I'll write a proper fix. Can you try to apply this patch and test if it makes things better?
Indeed what was critical to repro was to have a continuous tone, I just whistled into my mic and it became very clear.
Sounds much better with that patch!
Is this planned to be fixed sometime soon? I'm maintaining a fork until then.
Oops sorry. I'm taking time off for Christmas, but I can clean and land this right after. Sorry about forgetting about this.
just checking on this
I'm getting some gross wideband artifacts when recording with cubeb using lower sample rates (16khz, when my native device rate is 44.1khz), which I'm guessing is the fault of the speex resampler
The left spectrogram is the output from cubeb for a ~320hz tone. Notice the lattice of staticy artifacts, which shouldn't be there, and aren't present on the right side (recorded with baudline).
out.wav.zip