Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ratecontrol scratchfix VC logic #3

Merged
merged 3 commits into from
Apr 21, 2014

Conversation

daschuer
Copy link

Hi @ywwg,

here a version similar to VC logic and with waveform scratch fix.

@ywwg
Copy link
Owner

ywwg commented Apr 14, 2014

maybe scratch2_indicates_scratching, defaults to on? Ugh the names are so bad.

@daschuer
Copy link
Author

It looks like you think to the new co like a config value. My point is that the name should be look like a interactive value, because it actually has the the same function like "vinylcontrol_scratching".
"scratch2" indicates always a rate independent of the new co. If it is expected to be slow changing and near 1.0 it is not scratching. If its expected to change sign it is scratching. Indicating this, that's what the new CO is for.

It could be also be "scratch2_disables_keylock" or "scratch2_allows_keylock". But this way we introduce a new terminology compared to VC. Sync logic is prepared to act on the "reportScratching" as well so it is better not to focus the name too much.

@ywwg
Copy link
Owner

ywwg commented Apr 14, 2014

well, the name is important because controller config writers, who don't know the codebase well, will need to use it and understand what it does. I think it is a config value, it's telling the engine whether or not it should treat scratch2_enable as an indication that the user is scratching or not.

@daschuer
Copy link
Author

Yes, that is the source of our disagreement.

If we decide to go the config value way, then IMHO a dedicated rate control for the moving platter use case would be better. Then it could have a self explaining name.

The current version has the advantage, that the controller config writer can notice from the name, that he should change the value if it is possible to detect scratching by the script.

In the original version he might know when to set it, but not why. And it is confusing, because the enable control will not be always on, It is still allowed to switch scratch2_enable.

ywwg added a commit that referenced this pull request Apr 21, 2014
@ywwg ywwg merged commit 292c3b3 into ywwg:ratecontrol-scratchfix Apr 21, 2014
ywwg pushed a commit that referenced this pull request Apr 21, 2014
@daschuer daschuer deleted the ratecontrol-scratchfix branch September 15, 2014 20:57
ywwg pushed a commit that referenced this pull request Oct 10, 2015
Added tar archive with a reference library structure that should now …
ywwg pushed a commit that referenced this pull request Nov 14, 2015
ywwg pushed a commit that referenced this pull request Jan 16, 2016
Clarified en-US strings, adjusted line length.
ywwg pushed a commit that referenced this pull request Feb 6, 2021
Implements changes to effect unit handling as requested by @Be-ing
ywwg pushed a commit that referenced this pull request Mar 18, 2022
…h sync

When loading a track that is not yet present in the library (and thus
doesn't have any BPM because it hasn't been analyzed yet) while another
deck is playing and both decks have sync enabled, a debug assertion is
triggered:

    DEBUG ASSERT: "isValid()" in function double mixxx::Bpm::value() const at src/track/bpm.h:53
    Aborted (core dumped)

The backtrace looks as follows:

    #0  0x00007f175c87234c in __pthread_kill_implementation () at /usr/lib/libc.so.6
    #1  0x00007f175c8254b8 in raise () at /usr/lib/libc.so.6
    #2  0x00007f175c80f534 in abort () at /usr/lib/libc.so.6
    #3  0x00007f175cf05ee4 in qt_assert(char const*, char const*, int) () at /usr/lib/libQt5Core.so.5
    #4  0x000055deb2e67e1c in mixxx::(anonymous namespace)::handleMessage(QtMsgType, QMessageLogContext const&, QString const&) (type=<optimized out>, context=<optimized out>, input=<optimized out>) at src/util/logging.cpp:355
    #5  0x00007f175cf47128 in  () at /usr/lib/libQt5Core.so.5
    #6  0x00007f175cf3fd8a in  () at /usr/lib/libQt5Core.so.5
    #7  0x00007f175cf06526 in QMessageLogger::critical(char const*, ...) const () at /usr/lib/libQt5Core.so.5
    #8  0x000055deb2e5c720 in mixxx_debug_assert(char const*, char const*, int, char const*) (assertion=assertion@entry=0x55deb39bd0db "isValid()", file=file@entry=0x55deb39bbf30 "src/track/bpm.h", line=line@entry=53, function=function@entry=0x55deb39bbf08 "double mixxx::Bpm::value() const") at gsrc/util/assert.h:9
    #9  0x000055deb2ee7e7e in mixxx_debug_assert_return_true(char const*, char const*, int, char const*) (function=0x55deb39bbf08 "double mixxx::Bpm::value() const", line=53, file=0x55deb39bbf30 "src/track/bpm.h", assertion=0x55deb39bd0db "isValid()") at gsrc/util/assert.h:18
    #10 mixxx::Bpm::value() const (this=<synthetic pointer>) at src/track/bpm.h:53
    #11 mixxx::operator*(mixxx::Bpm, double) (multiple=1, bpm=...) at src/track/bpm.h:160
    #12 SyncControl::setLocalBpm(mixxx::Bpm) (this=<optimized out>, localBpm=...) at src/engine/sync/synccontrol.cpp:567
    mixxxdj#13 0x000055deb34c7ba3 in EngineBuffer::postProcess(int) (this=0x55deb56eb060, iBufferSize=2048) at src/engine/enginebuffer.cpp:1318
    mixxxdj#14 0x000055deb3139023 in EngineMaster::processChannels(int) (this=0x55deb5449440, iBufferSize=<optimized out>) at src/engine/enginemaster.cpp:383
    mixxxdj#15 0x000055deb31394f7 in EngineMaster::process(int) (this=0x55deb5449440, iBufferSize=iBufferSize@entry=2048) at src/engine/enginemaster.cpp:410
    mixxxdj#16 0x000055deb2f91d0b in SoundManager::onDeviceOutputCallback(long) (this=<optimized out>, iFramesPerBuffer=iFramesPerBuffer@entry=1024) at src/soundio/soundmanager.cpp:596
    mixxxdj#17 0x000055deb32dd794 in SoundDevicePortAudio::callbackProcessClkRef(long, float*, float const*, PaStreamCallbackTimeInfo const*, unsigned long) (this=0x55deb553e6b0, framesPerBuffer=1024, out=<optimized out>, in=<optimized out>, timeInfo=<optimized out>, statusFlags=<optimized out>) at src/soundio/sounddeviceportaudio.cpp:965

This happens because `newLocalBpm` is invalid when `localBpm` is
invalid. Trying to do sync decks while no tempo information is available
does not make sense, so we only synchronize decks if the local BPM is
available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants