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

update Novation Launchpad controller scripts #10

Conversation

dszakallas
Copy link

@dszakallas dszakallas commented Feb 18, 2019

Updates Novation Launchpad sources and bundles to v2.2.3 v2.2.4 v2.2.5 v2.2.6:

  • Works with QJSEngine

    • Qt 5.7 (on Debian Stretch)
    • Qt 5.12 (on MacOS)
  • Sends MIDI messages as numbers. Previously, strings were working fine, but on latest HEAD of the branch they are failing.

  • Adds experimental support for Launchpad Pro. I don't have that controller, so I cannot guarantee it works properly until someone tests it.

  • Contains a few bug fixes since 2.1.6

  • Shrinks script size, which makes loading faster

See a better diff: dszakallas/mixxx-launchpad@v2.1.6...v2.2.6

@Be-ing
Copy link

Be-ing commented Feb 18, 2019

Great, thanks for working on this! Did you test with both Qt 5.12 and Qt < 5.12?

@Be-ing
Copy link

Be-ing commented Feb 18, 2019

Adds experimental support for Launchpad Pro. I don't have that controller, so I cannot guarantee it works properly until someone tests it.

I'd prefer to not ship the build for that with Mixxx until we have confirmation that it works from someone who has the hardware. Shipping a mapping with Mixxx should be an indicator that it does indeed work. If you want to post it to the forum instead, that would be great. If someone later posts that it does work with the hardware, we can ship it with Mixxx.

@dszakallas
Copy link
Author

I only tested it with 5.12 so far.

@dszakallas
Copy link
Author

dszakallas commented Feb 18, 2019

If someone later posts that it does work with the hardware, we can ship it with Mixxx.

OK, I'll do that. I'll remove the compiled script and MIDI mapping. I guess there's no harm leaving the sources as they are.

@dszakallas dszakallas force-pushed the upgrade-lp branch 2 times, most recently from 86d8710 to 581513b Compare February 21, 2019 19:49
@Be-ing
Copy link

Be-ing commented Feb 23, 2019

ping @ferranpujolcamins, can you merge this?

@ferranpujolcamins
Copy link
Owner

@dszakallas could you test in linux with Qt 5.9?

@dszakallas
Copy link
Author

dszakallas commented Feb 25, 2019

I can't, I need help with that

@dszakallas
Copy link
Author

OK, I spun up a virtual machine and checked it, it doesn't work, because of that DataView/ByteArray issue discussed here: mixxxdj#1795 (comment)

@dszakallas
Copy link
Author

dszakallas commented Feb 25, 2019

I think this affects every version under Qt5.12

@dszakallas
Copy link
Author

The bug is triggered when calling lodash's isEqual, so it will likely happen with other scripts using this function.

@dszakallas
Copy link
Author

I removed the lodash/isEquals dependency, and tested on Qt 5.7.

@ferranpujolcamins ferranpujolcamins merged commit f2610e3 into ferranpujolcamins:migrate-to-QJSEngine Mar 2, 2019
@ferranpujolcamins
Copy link
Owner

@dszakallas Thank you!

ferranpujolcamins pushed a commit that referenced this pull request Jan 18, 2021
Fix reading/writing of library.last_played_at
ferranpujolcamins pushed a commit that referenced this pull request May 7, 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
    #13 0x000055deb34c7ba3 in EngineBuffer::postProcess(int) (this=0x55deb56eb060, iBufferSize=2048) at src/engine/enginebuffer.cpp:1318
    #14 0x000055deb3139023 in EngineMaster::processChannels(int) (this=0x55deb5449440, iBufferSize=<optimized out>) at src/engine/enginemaster.cpp:383
    #15 0x000055deb31394f7 in EngineMaster::process(int) (this=0x55deb5449440, iBufferSize=iBufferSize@entry=2048) at src/engine/enginemaster.cpp:410
    #16 0x000055deb2f91d0b in SoundManager::onDeviceOutputCallback(long) (this=<optimized out>, iFramesPerBuffer=iFramesPerBuffer@entry=1024) at src/soundio/soundmanager.cpp:596
    #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.

3 participants