99
1010#include " control/controlobject.h"
1111#include " engine/controls/ratecontrol.h"
12+ #include " engine/defs_keylock.h"
1213#include " mixer/basetrackplayer.h"
1314#include " preferences/usersettings.h"
1415#include " test/mixxxtest.h"
@@ -31,9 +32,9 @@ TEST_F(EngineBufferTest, DisableKeylockResetsPitch) {
3132 // To prevent one-slider users from getting stuck on a key,
3233 // KeyunlockMode::ResetLockedKey resets the musical pitch.
3334 ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
34- 1.0 ); // KeylockMode::LockCurrentKey
35+ static_cast < double >( KeylockMode::LockCurrentKey));
3536 ControlObject::set (ConfigKey (m_sGroup1, " keyunlockMode" ),
36- 0.0 ); // KeyunlockMode::ResetLockedKey
37+ static_cast < double >( KeyunlockMode::ResetLockedKey));
3738 ControlObject::set (ConfigKey (m_sGroup1, " file_bpm" ), 128.0 );
3839 ControlObject::set (ConfigKey (m_sGroup1, " keylock" ), 1.0 );
3940 ControlObject::set (ConfigKey (m_sGroup1, " pitch" ), 0.5 );
@@ -48,9 +49,9 @@ TEST_F(EngineBufferTest, DisableKeylockResetsPitch) {
4849TEST_F (EngineBufferTest, DisableKeylockKeepsPitch) {
4950 // Pitch must not change when unlocking with KeyunlockMode::KeepLockedKey.
5051 ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
51- 1.0 ); // KeylockMode::LockCurrentKey
52+ static_cast < double >( KeylockMode::LockCurrentKey));
5253 ControlObject::set (ConfigKey (m_sGroup1, " keyunlockMode" ),
53- 1.0 ); // KeyunlockMode::KeepLockedKey
54+ static_cast < double >( KeyunlockMode::KeepLockedKey));
5455 ControlObject::set (ConfigKey (m_sGroup1, " file_bpm" ), 128.0 );
5556 ControlObject::set (ConfigKey (m_sGroup1, " keylock" ), 1.0 );
5657 ControlObject::set (ConfigKey (m_sGroup1, " pitch" ), 0.5 );
@@ -75,12 +76,42 @@ TEST_F(EngineBufferTest, TrackLoadResetsPitch) {
7576 ASSERT_NEAR (0.0 , ControlObject::get (ConfigKey (m_sGroup1, " pitch_adjust" )), 1e-10 );
7677}
7778
79+ TEST_F (EngineBufferTest, TrackLoadResetsPitch_LockCurrentKey) {
80+ // The pitch should be reset to 0 when a new track was loaded when
81+ // * rate is not 0
82+ // * keylock is ON
83+ // * keylock mode is LockCurrentKey,
84+ // * Reset Pitch on track load option is enabled
85+ //
86+ // First test case:
87+ // * change tempo with key unlocked -> pitch changes
88+ // * lock key
89+ // // * reset pitch -> is now 0 OPTIONAL
90+ // * load another track -> pitch should (still) be 0
91+ config ()->setValue (ConfigKey (" [Controls]" , " SpeedAutoReset" ),
92+ BaseTrackPlayer::TrackLoadReset::RESET_PITCH );
93+ ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
94+ static_cast <double >(KeylockMode::LockCurrentKey));
95+ ControlObject::set (ConfigKey (m_sGroup1, " rate" ), 0.5 );
96+ ControlObject::set (ConfigKey (m_sGroup1, " keylock" ), 1.0 );
97+ ControlObject::set (ConfigKey (m_sGroup1, " reset_key" ), 1.0 );
98+ ProcessBuffer ();
99+ // Note that pitch_adjust is NOT reset to 0 with KeylockMode::LockCurrentKey
100+ ASSERT_DOUBLE_EQ (0.0 , ControlObject::get (ConfigKey (m_sGroup1, " pitch" )));
101+ ProcessBuffer ();
102+
103+ m_pMixerDeck1->loadFakeTrack (false , 0.0 );
104+ ProcessBuffer ();
105+
106+ ASSERT_DOUBLE_EQ (0.0 , ControlObject::get (ConfigKey (m_sGroup1, " pitch" )));
107+ }
108+
78109TEST_F (EngineBufferTest, PitchRoundtrip) {
79110 ControlObject::set (ConfigKey (m_sGroup1, " keylock" ), 0.0 );
80111 ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
81- 0.0 ); // KeylockMode::LockOriginalKey
112+ static_cast < double >( KeylockMode::LockOriginalKey));
82113 ControlObject::set (ConfigKey (m_sGroup1, " keyunlockMode" ),
83- 0.0 ); // KeyunlockMode::ResetLockedKey
114+ static_cast < double >( KeyunlockMode::ResetLockedKey));
84115 ProcessBuffer ();
85116 // we are in kPakmOffsetScaleReseting mode
86117 ControlObject::set (ConfigKey (m_sGroup1, " rate" ), 0.5 );
@@ -103,15 +134,15 @@ TEST_F(EngineBufferTest, PitchRoundtrip) {
103134 ASSERT_DOUBLE_EQ (0.0 , ControlObject::get (ConfigKey (m_sGroup1, " pitch_adjust" )));
104135
105136 ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
106- 1.0 ); // KeylockMode::LockCurrentKey
137+ static_cast < double >( KeylockMode::LockCurrentKey));
107138 ProcessBuffer ();
108139 // rate must not change
109140 ASSERT_DOUBLE_EQ (0.5 , ControlObject::get (ConfigKey (m_sGroup1, " rate" )));
110141 // pitch must reflect the absolute pitch
111142 ASSERT_DOUBLE_EQ (0.0 , ControlObject::get (ConfigKey (m_sGroup1, " pitch" )));
112143
113144 ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
114- 0.0 ); // KeylockMode::LockOriginalKey
145+ static_cast < double >( KeylockMode::LockOriginalKey));
115146 ProcessBuffer ();
116147 // rate must not change
117148 ASSERT_DOUBLE_EQ (0.5 , ControlObject::get (ConfigKey (m_sGroup1, " rate" )));
@@ -370,7 +401,7 @@ TEST_F(EngineBufferE2ETest, DISABLED_KeylockReverseTest) {
370401 ControlObject::set (ConfigKey (kAppGroup , QStringLiteral (" keylock_engine" )),
371402 static_cast <double >(EngineBuffer::KeylockEngine::SoundTouch));
372403 ControlObject::set (ConfigKey (m_sGroup1, " keylockMode" ),
373- 0.0 );
404+ static_cast < double >(KeylockMode::LockOriginalKey) );
374405 ControlObject::set (ConfigKey (m_sGroup1, " rate" ), 0.5 );
375406 ControlObject::set (ConfigKey (m_sGroup1, " play" ), 1.0 );
376407 ControlObject::set (ConfigKey (m_sGroup1, " keylock" ), 1.0 );
0 commit comments