From c18d3764fda44981d1a0c1108e3c523b7d066713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Wed, 23 Aug 2017 18:15:18 +0200 Subject: [PATCH 01/11] Randomize 2.0: Add fill value & fill randomize values to Song --- src/core/include/hydrogen/basics/song.h | 23 +++++++++++++++++++++-- src/core/src/basics/song.cpp | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/core/include/hydrogen/basics/song.h b/src/core/include/hydrogen/basics/song.h index 9163afd35e..d8d076c52f 100644 --- a/src/core/include/hydrogen/basics/song.h +++ b/src/core/include/hydrogen/basics/song.h @@ -226,7 +226,23 @@ class Song : public H2Core::Object return __velocity_automation_path; } - DrumkitComponent* get_component( int ID ); + float get_fill_value() const { + return __fill_value; + } + + void set_fill_value(float fill_value) { + __fill_value = fill_value; + } + + float get_fill_randomize() const { + return __fill_randomize; + } + + void set_fill_randomize(float fill_randomize) { + __fill_randomize = fill_randomize; + } + + DrumkitComponent* get_component( int ID ); void readTempPatternList( const QString& filename ); bool writeTempPatternList( const QString& filename ); @@ -297,7 +313,10 @@ class Song : public H2Core::Object QString __playback_track_filename; bool __playback_track_enabled; float __playback_track_volume; - AutomationPath* __velocity_automation_path; + AutomationPath* __velocity_automation_path; + + float __fill_value; + float __fill_randomize; }; diff --git a/src/core/src/basics/song.cpp b/src/core/src/basics/song.cpp index 3707612c3a..0a32aca807 100644 --- a/src/core/src/basics/song.cpp +++ b/src/core/src/basics/song.cpp @@ -82,6 +82,8 @@ Song::Song( const QString& name, const QString& author, float bpm, float volume , __playback_track_enabled( false ) , __playback_track_volume( 0.0 ) , __velocity_automation_path( NULL ) + , __fill_value(0.5) + , __fill_randomize(1) { INFOLOG( QString( "INIT '%1'" ).arg( __name ) ); From 3237302ef97297651d62b2228c615214425ab2e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Wed, 23 Aug 2017 19:03:58 +0200 Subject: [PATCH 02/11] Probability 2.0: Calculate threshold for playing notes --- src/core/include/hydrogen/basics/song.h | 1 + src/core/src/basics/song.cpp | 10 ++++++++++ src/core/src/hydrogen.cpp | 4 ++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/core/include/hydrogen/basics/song.h b/src/core/include/hydrogen/basics/song.h index d8d076c52f..1ac00c56d5 100644 --- a/src/core/include/hydrogen/basics/song.h +++ b/src/core/include/hydrogen/basics/song.h @@ -292,6 +292,7 @@ class Song : public H2Core::Object { __playback_track_volume = volume; } + float get_threshold() const; private: diff --git a/src/core/src/basics/song.cpp b/src/core/src/basics/song.cpp index 0a32aca807..814a07ae13 100644 --- a/src/core/src/basics/song.cpp +++ b/src/core/src/basics/song.cpp @@ -1344,4 +1344,14 @@ Pattern* SongReader::getPattern( QDomNode pattern, InstrumentList* instrList ) return pPattern; } + + +float Song::get_threshold() const +{ + float lower = std::max(0.0f, 1.0f - get_fill_value() - get_fill_randomize()); + float upper = std::min(1.0f, 1.0f - get_fill_value() + get_fill_randomize()); + float rnd = (float)rand()/(float)RAND_MAX; + return lower + rnd * (upper-lower); +} + }; diff --git a/src/core/src/hydrogen.cpp b/src/core/src/hydrogen.cpp index 936f3e9e8a..db324ced21 100644 --- a/src/core/src/hydrogen.cpp +++ b/src/core/src/hydrogen.cpp @@ -496,8 +496,8 @@ inline void audioEngine_process_playNotes( unsigned long nframes ) // Humanize - Velocity parameter pNote->set_velocity( pNote->get_velocity() * velocity_adjustment ); - float rnd = (float)rand()/(float)RAND_MAX; - if (pNote->get_probability() < rnd) { + float threshold = pSong->get_threshold(); + if (pNote->get_probability() < threshold) { m_songNoteQueue.pop(); pNote->get_instrument()->dequeue(); continue; From 3e9340883c1381f15641eaa45261abd25ff86142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Wed, 23 Aug 2017 20:58:41 +0200 Subject: [PATCH 03/11] Probability 2.0: Add knobs for fill value and fill probability --- src/gui/src/Mixer/MixerLine.cpp | 24 +++++++++++++++++++++--- src/gui/src/Mixer/MixerLine.h | 3 +++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/gui/src/Mixer/MixerLine.cpp b/src/gui/src/Mixer/MixerLine.cpp index ec3f7cdfaf..dec90267ba 100644 --- a/src/gui/src/Mixer/MixerLine.cpp +++ b/src/gui/src/Mixer/MixerLine.cpp @@ -686,17 +686,25 @@ MasterMixerLine::MasterMixerLine(QWidget* parent) m_pPeakLCD->setPalette( lcdPalette ); m_pHumanizeVelocityRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize velocity" ), false, false ); - m_pHumanizeVelocityRotary->move( 74, 88 ); + m_pHumanizeVelocityRotary->move( 74, 88 -64 ); connect( m_pHumanizeVelocityRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pHumanizeTimeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize time" ), false, false ); - m_pHumanizeTimeRotary->move( 74, 125 ); + m_pHumanizeTimeRotary->move( 74, 125 -64); connect( m_pHumanizeTimeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pSwingRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Swing" ), false, false ); - m_pSwingRotary->move( 74, 162 ); + m_pSwingRotary->move( 74, 162 -64); connect( m_pSwingRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pFillValueRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Fill" ), false, false ); + m_pFillValueRotary->move( 74, 162 ); + connect( m_pFillValueRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + + m_pFillRandomizeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Randomize" ), false, false ); + m_pFillRandomizeRotary->move( 74, 162 +64); + connect( m_pFillRandomizeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + // Mute btn m_pMuteBtn = new ToggleButton( this, @@ -824,6 +832,8 @@ void MasterMixerLine::updateMixerLine() m_pHumanizeTimeRotary->setValue( pSong->get_humanize_time_value() ); m_pHumanizeVelocityRotary->setValue( pSong->get_humanize_velocity_value() ); m_pSwingRotary->setValue( pSong->get_swing_factor() ); + m_pFillValueRotary->setValue( pSong->get_fill_value() ); + m_pFillRandomizeRotary->setValue( pSong->get_fill_randomize() ); m_pMuteBtn->setPressed( pSong->__is_muted ); } else { @@ -851,6 +861,14 @@ void MasterMixerLine::rotaryChanged( Rotary *pRef ) pEngine->getSong()->set_swing_factor( fVal ); sMsg = trUtf8( "Set swing factor [%1]").arg( fVal, 0, 'f', 2 ); } + else if ( pRef == m_pFillValueRotary ) { + pEngine->getSong()->set_fill_value( fVal ); + sMsg = trUtf8( "Set fill value [%1]").arg( fVal, 0, 'f', 2 ); + } + else if ( pRef == m_pFillRandomizeRotary ) { + pEngine->getSong()->set_fill_randomize( fVal ); + sMsg = trUtf8( "Set fill randomize [%1]").arg( fVal, 0, 'f', 2 ); + } else { ERRORLOG( "[knobChanged] Unhandled knob" ); } diff --git a/src/gui/src/Mixer/MixerLine.h b/src/gui/src/Mixer/MixerLine.h index 572a3f7141..b9fc397a7c 100644 --- a/src/gui/src/Mixer/MixerLine.h +++ b/src/gui/src/Mixer/MixerLine.h @@ -271,6 +271,9 @@ class MasterMixerLine: public PixmapWidget Rotary * m_pHumanizeTimeRotary; Rotary * m_pHumanizeVelocityRotary; + Rotary * m_pFillValueRotary; + Rotary * m_pFillRandomizeRotary; + ToggleButton * m_pMuteBtn; }; From d3b8905098a84f9414fa80315cc7c8ce29654d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Sat, 26 Aug 2017 20:32:50 +0200 Subject: [PATCH 04/11] Probability 2.0: Save and load fill value and fill probability from file --- src/core/src/basics/song.cpp | 6 +++++- src/core/src/local_file_mgr.cpp | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/src/basics/song.cpp b/src/core/src/basics/song.cpp index 814a07ae13..586e7e95bc 100644 --- a/src/core/src/basics/song.cpp +++ b/src/core/src/basics/song.cpp @@ -83,7 +83,7 @@ Song::Song( const QString& name, const QString& author, float bpm, float volume , __playback_track_volume( 0.0 ) , __velocity_automation_path( NULL ) , __fill_value(0.5) - , __fill_randomize(1) + , __fill_randomize(0) { INFOLOG( QString( "INIT '%1'" ).arg( __name ) ); @@ -639,6 +639,8 @@ Song* SongReader::readSong( const QString& filename ) float fHumanizeTimeValue = LocalFileMng::readXmlFloat( songNode, "humanize_time", 0.0 ); float fHumanizeVelocityValue = LocalFileMng::readXmlFloat( songNode, "humanize_velocity", 0.0 ); float fSwingFactor = LocalFileMng::readXmlFloat( songNode, "swing_factor", 0.0 ); + float fFillValue = LocalFileMng::readXmlFloat( songNode, "fillValue", 0.5 ); + float fFillRandomize = LocalFileMng::readXmlFloat( songNode, "fillRandomize", 1.0 ); song = new Song( sName, sAuthor, fBpm, fVolume ); song->set_metronome_volume( fMetronomeVolume ); @@ -649,6 +651,8 @@ Song* SongReader::readSong( const QString& filename ) song->set_humanize_time_value( fHumanizeTimeValue ); song->set_humanize_velocity_value( fHumanizeVelocityValue ); song->set_swing_factor( fSwingFactor ); + song->set_fill_value( fFillValue ); + song->set_fill_randomize( fFillRandomize ); song->set_playback_track_filename( sPlaybackTrack ); song->set_playback_track_enabled( bPlaybackTrackEnabled ); song->set_playback_track_volume( fPlaybackTrackVolume ); diff --git a/src/core/src/local_file_mgr.cpp b/src/core/src/local_file_mgr.cpp index 154ab1d703..a1a03041b6 100644 --- a/src/core/src/local_file_mgr.cpp +++ b/src/core/src/local_file_mgr.cpp @@ -366,6 +366,8 @@ int SongWriter::writeSong( Song *song, const QString& filename ) LocalFileMng::writeXmlString( songNode, "humanize_time", QString("%1").arg( song->get_humanize_time_value() ) ); LocalFileMng::writeXmlString( songNode, "humanize_velocity", QString("%1").arg( song->get_humanize_velocity_value() ) ); LocalFileMng::writeXmlString( songNode, "swing_factor", QString("%1").arg( song->get_swing_factor() ) ); + LocalFileMng::writeXmlString( songNode, "fillValue", QString("%1").arg( song->get_fill_value() ) ); + LocalFileMng::writeXmlString( songNode, "fillRandomize", QString("%1").arg( song->get_fill_randomize() ) ); // component List QDomNode componentListNode = doc.createElement( "componentList" ); From 888ffdb01b5b015f55f37d2ff1a7ed2cca0ef93b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Sat, 26 Aug 2017 21:23:06 +0200 Subject: [PATCH 05/11] Probability 2.0: Add MIDI actions for humanize time & velocity, swing and fill value & randomize --- src/core/include/hydrogen/midi_action.h | 5 +++ src/core/src/midi_action.cpp | 47 +++++++++++++++++++++++++ src/gui/src/Mixer/MixerLine.cpp | 5 +++ 3 files changed, 57 insertions(+) diff --git a/src/core/include/hydrogen/midi_action.h b/src/core/include/hydrogen/midi_action.h index d33e7ebb70..45492cd269 100644 --- a/src/core/include/hydrogen/midi_action.h +++ b/src/core/include/hydrogen/midi_action.h @@ -123,6 +123,11 @@ class MidiActionManager : public H2Core::Object bool redo_action(Action * , H2Core::Hydrogen * , targeted_element ); bool gain_level_absolute(Action * , H2Core::Hydrogen * , targeted_element ); bool pitch_level_absolute(Action * , H2Core::Hydrogen * , targeted_element ); + bool humanize_velocity_absolute(Action * , H2Core::Hydrogen * , targeted_element ); + bool humanize_time_absolute(Action * , H2Core::Hydrogen * , targeted_element ); + bool swing_absolute(Action * , H2Core::Hydrogen * , targeted_element ); + bool fill_value_absolute(Action * , H2Core::Hydrogen * , targeted_element ); + bool fill_randomize_absolute(Action * , H2Core::Hydrogen * , targeted_element ); QStringList eventList; diff --git a/src/core/src/midi_action.cpp b/src/core/src/midi_action.cpp index 5d0c23a299..b615b8918e 100644 --- a/src/core/src/midi_action.cpp +++ b/src/core/src/midi_action.cpp @@ -119,6 +119,13 @@ MidiActionManager::MidiActionManager() : Object( __class_name ) { actionMap.insert(make_pair("MASTER_VOLUME_ABSOLUTE", make_pair(&MidiActionManager::master_volume_absolute, empty))); actionMap.insert(make_pair("STRIP_VOLUME_RELATIVE", make_pair(&MidiActionManager::strip_volume_relative, empty))); actionMap.insert(make_pair("STRIP_VOLUME_ABSOLUTE", make_pair(&MidiActionManager::strip_volume_absolute, empty))); + + actionMap.insert(make_pair("HUMANIZE_VELOCITY_ABSOLUTE", make_pair(&MidiActionManager::humanize_velocity_absolute, empty))); + actionMap.insert(make_pair("HUMANIZE_TIME_ABSOLUTE", make_pair(&MidiActionManager::humanize_time_absolute, empty))); + actionMap.insert(make_pair("SWING_ABSOLUTE", make_pair(&MidiActionManager::swing_absolute, empty))); + actionMap.insert(make_pair("FILL_VALUE_ABSOLUTE", make_pair(&MidiActionManager::fill_value_absolute, empty))); + actionMap.insert(make_pair("FILL_RANDOMIZE_ABSOLUTE", make_pair(&MidiActionManager::fill_randomize_absolute, empty))); + for(int i = 0; i < MAX_FX; ++i) { targeted_element effect = {i,0}; ostringstream toChar; @@ -438,6 +445,46 @@ bool MidiActionManager::master_volume_absolute(Action * pAction, Hydrogen* pEngi return true; } +bool MidiActionManager::humanize_velocity_absolute(Action * pAction, H2Core::Hydrogen* pEngine , targeted_element ) { + bool ok; + int value = pAction->getParameter2().toInt(&ok,10); + + Song *song = pEngine->getSong(); + song->set_humanize_velocity_value( value / 127.0 ); +} + +bool MidiActionManager::humanize_time_absolute(Action *pAction , H2Core::Hydrogen* pEngine , targeted_element ) { + bool ok; + int value = pAction->getParameter2().toInt(&ok,10); + + Song *song = pEngine->getSong(); + song->set_humanize_time_value( value / 127.0 ); +} + +bool MidiActionManager::swing_absolute(Action *pAction , H2Core::Hydrogen* pEngine , targeted_element ) { + bool ok; + int value = pAction->getParameter2().toInt(&ok,10); + + Song *song = pEngine->getSong(); + song->set_swing_factor( value / 127.0 ); +} + +bool MidiActionManager::fill_value_absolute(Action *pAction , H2Core::Hydrogen* pEngine , targeted_element ) { + bool ok; + int value = pAction->getParameter2().toInt(&ok,10); + + Song *song = pEngine->getSong(); + song->set_fill_value( value / 127.0 ); +} + +bool MidiActionManager::fill_randomize_absolute(Action *pAction , H2Core::Hydrogen* pEngine , targeted_element ) { + bool ok; + int value = pAction->getParameter2().toInt(&ok,10); + + Song *song = pEngine->getSong(); + song->set_fill_randomize( value / 127.0 ); +} + bool MidiActionManager::master_volume_relative(Action * pAction, Hydrogen* pEngine, targeted_element ) { //increments/decrements the volume of the whole song diff --git a/src/gui/src/Mixer/MixerLine.cpp b/src/gui/src/Mixer/MixerLine.cpp index dec90267ba..5bc25065e6 100644 --- a/src/gui/src/Mixer/MixerLine.cpp +++ b/src/gui/src/Mixer/MixerLine.cpp @@ -688,22 +688,27 @@ MasterMixerLine::MasterMixerLine(QWidget* parent) m_pHumanizeVelocityRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize velocity" ), false, false ); m_pHumanizeVelocityRotary->move( 74, 88 -64 ); connect( m_pHumanizeVelocityRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pHumanizeVelocityRotary->setAction( new Action("HUMANIZE_VELOCITY_ABSOLUTE") ); m_pHumanizeTimeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize time" ), false, false ); m_pHumanizeTimeRotary->move( 74, 125 -64); connect( m_pHumanizeTimeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pHumanizeTimeRotary->setAction( new Action("HUMANIZE_TIME_ABSOLUTE") ); m_pSwingRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Swing" ), false, false ); m_pSwingRotary->move( 74, 162 -64); connect( m_pSwingRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pSwingRotary->setAction( new Action("SWING_ABSOLUTE") ); m_pFillValueRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Fill" ), false, false ); m_pFillValueRotary->move( 74, 162 ); connect( m_pFillValueRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pFillValueRotary->setAction( new Action("FILL_VALUE_ABSOLUTE") ); m_pFillRandomizeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Randomize" ), false, false ); m_pFillRandomizeRotary->move( 74, 162 +64); connect( m_pFillRandomizeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pFillRandomizeRotary->setAction( new Action("FILL_RANDOMIZE_ABSOLUTE") ); // Mute btn m_pMuteBtn = new ToggleButton( From 676598308f831804f9559653ec9cca9d56930d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Wed, 30 Aug 2017 22:54:12 +0200 Subject: [PATCH 06/11] Probability 2.0: Use fill value and fill probability when exporting MIDI --- src/core/src/smf/smf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/src/smf/smf.cpp b/src/core/src/smf/smf.cpp index 5a07441f03..bd5cabaaf3 100644 --- a/src/core/src/smf/smf.cpp +++ b/src/core/src/smf/smf.cpp @@ -278,8 +278,8 @@ void SMFWriter::save( const QString& sFilename, Song *pSong ) FOREACH_NOTE_CST_IT_BOUND(notes,it,nNote) { Note *pNote = it->second; if ( pNote ) { - float rnd = (float)rand()/(float)RAND_MAX; - if ( pNote->get_probability() < rnd ) { + float threshold = pSong->get_threshold(); + if ( pNote->get_probability() < threshold ) { continue; } From 7d712ce7e254210747d739adda1d30f8bcfc2379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Wed, 30 Aug 2017 22:55:02 +0200 Subject: [PATCH 07/11] Probability 2.0: Update mixer line graphics --- .../mixerPanel/masterMixerline_background.png | Bin 7023 -> 9054 bytes src/gui/src/Mixer/MixerLine.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/img/gray/mixerPanel/masterMixerline_background.png b/data/img/gray/mixerPanel/masterMixerline_background.png index 57688d3cbff8a3e36629e6169a489205384a7bb4..7d144b8a5f0b36ef570412ce6d6c7600b6169589 100644 GIT binary patch literal 9054 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 lIWKXP-dTRQT5@S14LN`5(}#m&yPD literal 7023 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 Gk^cv|taB{@ diff --git a/src/gui/src/Mixer/MixerLine.cpp b/src/gui/src/Mixer/MixerLine.cpp index 5bc25065e6..afa0ffc0d9 100644 --- a/src/gui/src/Mixer/MixerLine.cpp +++ b/src/gui/src/Mixer/MixerLine.cpp @@ -686,22 +686,22 @@ MasterMixerLine::MasterMixerLine(QWidget* parent) m_pPeakLCD->setPalette( lcdPalette ); m_pHumanizeVelocityRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize velocity" ), false, false ); - m_pHumanizeVelocityRotary->move( 74, 88 -64 ); + m_pHumanizeVelocityRotary->move( 74, 88 -45 ); connect( m_pHumanizeVelocityRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pHumanizeVelocityRotary->setAction( new Action("HUMANIZE_VELOCITY_ABSOLUTE") ); m_pHumanizeTimeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize time" ), false, false ); - m_pHumanizeTimeRotary->move( 74, 125 -64); + m_pHumanizeTimeRotary->move( 74, 125 -45); connect( m_pHumanizeTimeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pHumanizeTimeRotary->setAction( new Action("HUMANIZE_TIME_ABSOLUTE") ); m_pSwingRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Swing" ), false, false ); - m_pSwingRotary->move( 74, 162 -64); + m_pSwingRotary->move( 74, 162 -45); connect( m_pSwingRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pSwingRotary->setAction( new Action("SWING_ABSOLUTE") ); m_pFillValueRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Fill" ), false, false ); - m_pFillValueRotary->move( 74, 162 ); + m_pFillValueRotary->move( 74, 125 +64 ); connect( m_pFillValueRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pFillValueRotary->setAction( new Action("FILL_VALUE_ABSOLUTE") ); From ff8f6dcb076427b337bef04786099f63ed039147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Mon, 8 Oct 2018 20:22:56 +0200 Subject: [PATCH 08/11] Probability 2.0: update graphics --- .../mixerPanel/masterMixerline_background.png | Bin 9054 -> 10299 bytes src/gui/src/Mixer/MixerLine.cpp | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/data/img/gray/mixerPanel/masterMixerline_background.png b/data/img/gray/mixerPanel/masterMixerline_background.png index 7d144b8a5f0b36ef570412ce6d6c7600b6169589..adda8cfe4ad5a29b7c4115bdd8f0d0c5cf73ea15 100644 GIT binary patch delta 9283 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%0DIPUR(1QC z!T&uZjDa~$>be(=(R5NYT2Wex&@aBY%sft7Gpr?)uA^UzFMa z%L?t?fkJG*|7mHgDHmt40}L{7f*-lj=<-}e`y*5@og>zuz3?TTq8bef{+9yE6KrT=Rg8rIaj z+W+AH--rJ1BE2Y@>u&-RdZ4*e_9}b1$1hSN{|Orm;g}B@enT=6$aH~P`r?{& zmOn`SP{q=cL&MXSa1O+#?9!ZlKqep}LMhha;u%|{3lDDteBICd&x?M8s4%g2fluYT z9JN`h#dGC%wdJOVG+&(vX-v}QEH9NwHA8ous)LVy*w3GoHv76)-x}2DL#UCwH&aT_ z!urR)r7lymJt^~iYjt?ef0k>#%oW)Qjk~BUL`)iucr#nm+!PQTaHwO6aY}QzD&M zQgDqMq-M5cbNJ>+urR)j<0_~hc=@0~Qq`podq3`WB2J!|{L{H0%k3Ne&~DNJcy#vY zqG4g-^KJ&Cv4O1q#bx=;C=a-nN6tZyTExf&udk_WuN&t$uS&@9@Kcdu+OkJ;eC9gZa+vkolqX0aM|ZnZjjndIE}M1;0yHU@t!rh`BMN1sp29u!Hl(Yes{SA314R ziRPn;{dN(h0>_E<&Jw+L$-I~ikp#|(o^5Uc1C{=F7})uqz74xl(7{~OlQi_*ob~l} zZ42`O#KMpu%fr%5Cc8dB_4;h1$K+Fv(DP=J_Y$rnvC(3D)YDbcD?8YBy<&>Vc79s) zigd@O6g%`V5}KT@^sEK0_94F(ZEU_fO;+ne4(o=MoM!Mfw^Hk>syZdxJk@9fgl6?J z%vWu{?4S!4AQFzfpQnr~KimRWSK;9<72Cze- kYeD`vtE=j0t@`XYZiZ6CMuE*XfP?+$Yv0wX)^K?KU#;wR1^@s6 diff --git a/src/gui/src/Mixer/MixerLine.cpp b/src/gui/src/Mixer/MixerLine.cpp index afa0ffc0d9..741c53a459 100644 --- a/src/gui/src/Mixer/MixerLine.cpp +++ b/src/gui/src/Mixer/MixerLine.cpp @@ -686,27 +686,27 @@ MasterMixerLine::MasterMixerLine(QWidget* parent) m_pPeakLCD->setPalette( lcdPalette ); m_pHumanizeVelocityRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize velocity" ), false, false ); - m_pHumanizeVelocityRotary->move( 74, 88 -45 ); + m_pHumanizeVelocityRotary->move( 74, 43 ); connect( m_pHumanizeVelocityRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pHumanizeVelocityRotary->setAction( new Action("HUMANIZE_VELOCITY_ABSOLUTE") ); m_pHumanizeTimeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Humanize time" ), false, false ); - m_pHumanizeTimeRotary->move( 74, 125 -45); + m_pHumanizeTimeRotary->move( 74, 80 ); connect( m_pHumanizeTimeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pHumanizeTimeRotary->setAction( new Action("HUMANIZE_TIME_ABSOLUTE") ); m_pSwingRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Swing" ), false, false ); - m_pSwingRotary->move( 74, 162 -45); + m_pSwingRotary->move( 74, 117 ); connect( m_pSwingRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pSwingRotary->setAction( new Action("SWING_ABSOLUTE") ); m_pFillValueRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Fill" ), false, false ); - m_pFillValueRotary->move( 74, 125 +64 ); + m_pFillValueRotary->move( 74, 172 ); connect( m_pFillValueRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pFillValueRotary->setAction( new Action("FILL_VALUE_ABSOLUTE") ); m_pFillRandomizeRotary = new Rotary( this, Rotary::TYPE_NORMAL, trUtf8( "Randomize" ), false, false ); - m_pFillRandomizeRotary->move( 74, 162 +64); + m_pFillRandomizeRotary->move( 74, 209 ); connect( m_pFillRandomizeRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); m_pFillRandomizeRotary->setAction( new Action("FILL_RANDOMIZE_ABSOLUTE") ); From 2c1f244b3606541c6eec55a6c1120d49ef16d476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Mon, 8 Oct 2018 23:37:59 +0200 Subject: [PATCH 09/11] Probability 2.0: Tweak threshold formula --- src/core/src/basics/song.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/src/basics/song.cpp b/src/core/src/basics/song.cpp index 586e7e95bc..1f10873353 100644 --- a/src/core/src/basics/song.cpp +++ b/src/core/src/basics/song.cpp @@ -1352,10 +1352,12 @@ Pattern* SongReader::getPattern( QDomNode pattern, InstrumentList* instrList ) float Song::get_threshold() const { - float lower = std::max(0.0f, 1.0f - get_fill_value() - get_fill_randomize()); - float upper = std::min(1.0f, 1.0f - get_fill_value() + get_fill_randomize()); + float w = get_fill_randomize(); + float k = 1.0f - w; + float lower = get_fill_value() * k; + float upper = lower + w; float rnd = (float)rand()/(float)RAND_MAX; - return lower + rnd * (upper-lower); + return 1.0f - (lower + rnd * (upper-lower)); } }; From 59517f7d3008b43fb5884645fbf859b0470cb0ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Tue, 9 Oct 2018 19:44:13 +0200 Subject: [PATCH 10/11] Probability: 2.0: Draw probability bars in black --- src/gui/src/PatternEditor/NotePropertiesRuler.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/src/PatternEditor/NotePropertiesRuler.cpp b/src/gui/src/PatternEditor/NotePropertiesRuler.cpp index 35ddbe4b4f..a72bda0c50 100644 --- a/src/gui/src/PatternEditor/NotePropertiesRuler.cpp +++ b/src/gui/src/PatternEditor/NotePropertiesRuler.cpp @@ -652,9 +652,14 @@ void NotePropertiesRuler::createVelocityBackground(QPixmap *pixmap) value = (uint)(pNote->get_probability() * height()); } uint line_start = line_end - value; - QColor centerColor = DrumPatternEditor::computeNoteColor( pNote->get_velocity() ); int nLineWidth = 3; - p.fillRect( x_pos - 1 + xoffset, line_start, nLineWidth, line_end - line_start , centerColor ); + if ( m_Mode == VELOCITY ) { + QColor centerColor = DrumPatternEditor::computeNoteColor( pNote->get_velocity() ); + p.fillRect( x_pos - 1 + xoffset, line_start, nLineWidth, line_end - line_start , centerColor ); + } + else if ( m_Mode == PROBABILITY ) { + p.fillRect( x_pos - 1 + xoffset, line_start, nLineWidth, line_end - line_start , Qt::black ); + } xoffset++; } } From 62197d358073f557eb3444b7cedf20d5d3836156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Sitek?= Date: Tue, 9 Oct 2018 20:50:03 +0200 Subject: [PATCH 11/11] Probability 2.0: Update probability editor when new note is created --- src/gui/src/PatternEditor/DrumPatternEditor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/src/PatternEditor/DrumPatternEditor.cpp b/src/gui/src/PatternEditor/DrumPatternEditor.cpp index dabe192088..55bacfe1b0 100644 --- a/src/gui/src/PatternEditor/DrumPatternEditor.cpp +++ b/src/gui/src/PatternEditor/DrumPatternEditor.cpp @@ -343,6 +343,7 @@ void DrumPatternEditor::addOrDeleteNoteAction( int nColumn, m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); m_pPatternEditorPanel->getPianoRollEditor()->updateEditor(); + m_pPatternEditorPanel->getProbabilityEditor()->updateEditor(); } }