static / popping audible when doing quick seeks through track

Bug #1440625 reported by Owen Williams
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mixxx
Fix Released
Medium
Unassigned

Bug Description

I have a knob on my controller set up to act like a strip-search input -- if I twist it, it seeks ahead by a certain amount so I can quickly preview a track. On current master, when I do this, I hear some static and popping -- it sounds like the crossfade over the sync isn't working right. I don't hear any pops when doing something like a loop

Revision history for this message
Owen Williams (ywwg) wrote :

crossfade over the seek, I mean. This is with master sync and quantize on, so each seek is quantized.

Revision history for this message
Owen Williams (ywwg) wrote :

I do hear the static even without quantize on, though.

Revision history for this message
Daniel Schürmann (daschuer) wrote :

This is probably the known issue, produced by cache misses.
The old stream is faded out, but there are no samples for fade in. Once the cache is in place the samples start without fading.
This should be solved in a common solution with Bug #1435170, to avoid introducing a third place for ramping code.

Revision history for this message
Owen Williams (ywwg) wrote :

Yeah, there's a fade out (crossfade to empty samples) and then the next buffer is full volume. In case of a cache miss we should probably not fade, then crossfade the next buffer from the last sample value. Or we could keep the fade, and then zero out the new buffer until a zero crossing.

Revision history for this message
Owen Williams (ywwg) wrote :

Actually in case of a cache miss we could write the buffer all the way to the last zero crossing and then write zeros to the end of the buffer. It would be pretty easy to write testable sample_util functions like "ClearAfterLastCrossing" and "ClearUntilFirstCrossing"

Revision history for this message
Owen Williams (ywwg) wrote :

Hm, currently enginebuffer has no way of knowing that we had a cache miss. CachingReader has been hacked to never report failure, though that's easy to fix. ReadaheadManager should also report that upstream. Then, finally, the scalers should report a cache miss by way of an output parameter. We can still handle the error case as we do now by zeroing out the missing samples, but we shouldn't be hiding the error like we are.

Once the scalers report the cache miss, we can decide how to handle it in enginebuffer.

Revision history for this message
Daniel Schürmann (daschuer) wrote :

It dos not make much difference if the stream stops at a zero sample or at any other sample value.
You can check it using Audacity Spectrum Analysis.
Once you stop without fading, you get a click due to the rectangular gain change.
The only solution is to fade out the last stream, wait until the samples are cached and fade in the new stream.

By the way: we can improve by using a Hanning window instead of our triangular ramp.

Changed in mixxx:
status: New → Confirmed
importance: Undecided → Medium
milestone: none → 1.12.0
Revision history for this message
Daniel Schürmann (daschuer) wrote :

This has been fixed.

Changed in mixxx:
status: Confirmed → Fix Released
Revision history for this message
Swiftb0y (swiftb0y) wrote :

Mixxx now uses GitHub for bug tracking. This bug has been migrated to:
https://github.com/mixxxdj/mixxx/issues/7943

lock status: Metadata changes locked and limited to project staff
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.