Changeset 535

Show
Ignore:
Timestamp:
09/29/08 07:35:16 (2 months ago)
Author:
gabriel
Message:

Merge rev 439:445 from trunk

Conflicts:

Sconstruct
gui/src/PreferencesDialog.h

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/jackMidi/Sconstruct

    r534 r535  
    162162        env.EnableQt4Modules( ['QtCore', 'QtGui'], debug=False) 
    163163        env.CacheDir( "scons_cache" ) 
     164        env.Decider( "MD5-timestamp" ) 
    164165 
    165166        if jack: 
     
    195196        # 
    196197        env.CacheDir( "scons_cache" ) 
     198        env.Decider( "MD5-timestamp" ) 
    197199 
    198200        # rcc needs a -name flag because examples use identified resource files 
  • branches/jackMidi/gui/src/MainForm.cpp

    r534 r535  
    158158#endif 
    159159 
     160         
    160161//playlist display timer 
    161162        QTimer *playlistDisplayTimer = new QTimer(this); 
     
    163164        playlistDisplayTimer->start(15000);     // update player control at  
    164165// ~ playlist display timer 
     166         
     167//beatcouter 
     168        Hydrogen::get_instance()->setBcOffsetAdjust(); 
    165169 
    166170} 
  • branches/jackMidi/gui/src/PreferencesDialog.cpp

    r402 r535  
    132132        connectDefaultsCheckBox->setChecked( pPref->m_bJackConnectDefaults ); 
    133133        trackOutputComboBox->setCurrentIndex( pPref->m_nJackTrackOutputMode ); 
     134        manualTransportOffsetSpinBox->setValue( pPref->m_nJackManualTransportOffset ); 
    134135        //~ JACK 
    135136 
     
    243244        useLashCheckbox->setChecked( pPref->m_bsetLash );        
    244245 
     246        sBcountOffset->setValue( pPref->m_countOffset ); 
     247        sBstartOffset->setValue( pPref->m_startOffset ); 
     248 
    245249        m_bNeedDriverRestart = false; 
    246250} 
     
    394398                pPref->m_bsetLash = false ; //if m_bsetlash = true, when the pref. Dialog closed lash would be activatet this case we dont want  
    395399        } 
     400 
     401        pPref->m_countOffset = sBcountOffset->value(); 
     402        pPref->m_startOffset = sBstartOffset->value(); 
     403        Hydrogen::get_instance()->setBcOffsetAdjust(); 
    396404 
    397405        pPref->savePreferences(); 
     
    693701        QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Please restart hydrogen to enable/disable LASH support" ) ); 
    694702} 
     703 
     704void PreferencesDialog::on_manualTransportOffsetSpinBox_valueChanged( int value ) 
     705{ 
     706        Preferences::getInstance()->m_nJackManualTransportOffset = value; 
     707} 
  • branches/jackMidi/gui/src/PreferencesDialog.h

    r402 r535  
    5353                void on_useLashCheckbox_clicked(); 
    5454                void on_m_pMidiDriverComboBox_currentIndexChanged( const QString& text ); 
     55                void on_manualTransportOffsetSpinBox_valueChanged( int i ); 
    5556 
    5657        private: 
  • branches/jackMidi/gui/src/UI/PreferencesDialog_UI.ui

    r402 r535  
    2626     <number>6</number> 
    2727    </property> 
    28     <property name="leftMargin" > 
    29      <number>0</number> 
    30     </property> 
    31     <property name="topMargin" > 
    32      <number>0</number> 
    33     </property> 
    34     <property name="rightMargin" > 
    35      <number>0</number> 
    36     </property> 
    37     <property name="bottomMargin" > 
     28    <property name="margin" > 
    3829     <number>0</number> 
    3930    </property> 
     
    4637       <enum>QSizePolicy::Expanding</enum> 
    4738      </property> 
    48       <property name="sizeHint"
     39      <property name="sizeHint" stdset="0"
    4940       <size> 
    5041        <width>184</width> 
     
    112103       <enum>QSizePolicy::Expanding</enum> 
    113104      </property> 
    114       <property name="sizeHint"
     105      <property name="sizeHint" stdset="0"
    115106       <size> 
    116107        <width>183</width> 
     
    137128    </sizepolicy> 
    138129   </property> 
     130   <property name="toolTip" > 
     131    <string/> 
     132   </property> 
    139133   <property name="tabShape" > 
    140134    <enum>QTabWidget::Rounded</enum> 
    141135   </property> 
    142136   <property name="currentIndex" > 
    143     <number>1</number> 
     137    <number>0</number> 
    144138   </property> 
    145139   <widget class="QWidget" name="tab_1" > 
     140    <property name="geometry" > 
     141     <rect> 
     142      <x>0</x> 
     143      <y>0</y> 
     144      <width>537</width> 
     145      <height>355</height> 
     146     </rect> 
     147    </property> 
    146148    <attribute name="title" > 
    147149     <string>&amp;General</string> 
     
    182184     </property> 
    183185    </widget> 
     186    <widget class="QSpinBox" name="sBcountOffset" > 
     187     <property name="geometry" > 
     188      <rect> 
     189       <x>11</x> 
     190       <y>91</y> 
     191       <width>52</width> 
     192       <height>21</height> 
     193      </rect> 
     194     </property> 
     195     <property name="toolTip" > 
     196      <string>first step, adjust timing mismatch between controller/keyboard trigger latency and computed bpm</string> 
     197     </property> 
     198     <property name="minimum" > 
     199      <number>-200</number> 
     200     </property> 
     201     <property name="maximum" > 
     202      <number>200</number> 
     203     </property> 
     204    </widget> 
     205    <widget class="QLabel" name="bClabel_2" > 
     206     <property name="geometry" > 
     207      <rect> 
     208       <x>70</x> 
     209       <y>91</y> 
     210       <width>331</width> 
     211       <height>21</height> 
     212      </rect> 
     213     </property> 
     214     <property name="text" > 
     215      <string>Beat counter drift compensation in 1/10 ms   </string> 
     216     </property> 
     217    </widget> 
     218    <widget class="QSpinBox" name="sBstartOffset" > 
     219     <property name="geometry" > 
     220      <rect> 
     221       <x>11</x> 
     222       <y>121</y> 
     223       <width>52</width> 
     224       <height>21</height> 
     225      </rect> 
     226     </property> 
     227     <property name="toolTip" > 
     228      <string>second step, adjust offset between last controller/keybord trigger and the deferred sequencer startup </string> 
     229     </property> 
     230     <property name="minimum" > 
     231      <number>-500</number> 
     232     </property> 
     233     <property name="maximum" > 
     234      <number>500</number> 
     235     </property> 
     236    </widget> 
     237    <widget class="QLabel" name="label" > 
     238     <property name="geometry" > 
     239      <rect> 
     240       <x>70</x> 
     241       <y>121</y> 
     242       <width>261</width> 
     243       <height>21</height> 
     244      </rect> 
     245     </property> 
     246     <property name="text" > 
     247      <string>Beat counter start offset in ms    </string> 
     248     </property> 
     249    </widget> 
    184250   </widget> 
    185251   <widget class="QWidget" name="tab_2" > 
     252    <property name="geometry" > 
     253     <rect> 
     254      <x>0</x> 
     255      <y>0</y> 
     256      <width>537</width> 
     257      <height>355</height> 
     258     </rect> 
     259    </property> 
    186260    <attribute name="title" > 
    187261     <string>Audio &amp;System</string> 
     
    220294     </property> 
    221295     <layout class="QGridLayout" > 
    222       <property name="leftMargin" > 
     296      <property name="margin" > 
    223297       <number>0</number> 
    224298      </property> 
    225       <property name="topMargin" > 
    226        <number>0</number> 
    227       </property> 
    228       <property name="rightMargin" > 
    229        <number>0</number> 
    230       </property> 
    231       <property name="bottomMargin" > 
    232        <number>0</number> 
    233       </property> 
    234       <property name="horizontalSpacing" > 
    235        <number>6</number> 
    236       </property> 
    237       <property name="verticalSpacing" > 
     299      <property name="spacing" > 
    238300       <number>6</number> 
    239301      </property> 
     
    366428      <rect> 
    367429       <x>10</x> 
    368        <y>280</y> 
     430       <y>240</y> 
    369431       <width>291</width> 
    370        <height>58</height> 
     432       <height>79</height> 
    371433      </rect> 
    372434     </property> 
    373435     <layout class="QGridLayout" > 
    374       <property name="leftMargin" > 
     436      <property name="margin" > 
    375437       <number>0</number> 
    376438      </property> 
    377       <property name="topMargin" > 
    378        <number>0</number> 
    379       </property> 
    380       <property name="rightMargin" > 
    381        <number>0</number> 
    382       </property> 
    383       <property name="bottomMargin" > 
    384        <number>0</number> 
    385       </property> 
    386       <property name="horizontalSpacing" > 
    387        <number>6</number> 
    388       </property> 
    389       <property name="verticalSpacing" > 
     439      <property name="spacing" > 
    390440       <number>6</number> 
    391441      </property> 
     
    445495       </widget> 
    446496      </item> 
     497      <item row="2" column="0" > 
     498       <widget class="QLabel" name="manualTransportOffsetLabel" > 
     499        <property name="text" > 
     500         <string>Manual Transport Offset</string> 
     501        </property> 
     502       </widget> 
     503      </item> 
     504      <item row="2" column="1" > 
     505       <widget class="QSpinBox" name="manualTransportOffsetSpinBox" > 
     506        <property name="minimum" > 
     507         <number>-10</number> 
     508        </property> 
     509        <property name="maximum" > 
     510         <number>10</number> 
     511        </property> 
     512       </widget> 
     513      </item> 
    447514     </layout> 
    448515    </widget> 
     
    481548       <y>190</y> 
    482549       <width>291</width> 
    483        <height>52</height> 
     550       <height>41</height> 
    484551      </rect> 
    485552     </property> 
    486553     <layout class="QVBoxLayout" > 
     554      <property name="spacing" > 
     555       <number>-1</number> 
     556      </property> 
    487557      <item> 
    488558       <widget class="QCheckBox" name="connectDefaultsCheckBox" > 
     
    509579   </widget> 
    510580   <widget class="QWidget" name="tab_3" > 
     581    <property name="geometry" > 
     582     <rect> 
     583      <x>0</x> 
     584      <y>0</y> 
     585      <width>537</width> 
     586      <height>355</height> 
     587     </rect> 
     588    </property> 
    511589    <attribute name="title" > 
    512590     <string>&amp;Midi System</string> 
     
    522600     </property> 
    523601     <layout class="QGridLayout" > 
    524       <property name="leftMargin" > 
     602      <property name="margin" > 
    525603       <number>0</number> 
    526604      </property> 
    527       <property name="topMargin" > 
    528        <number>0</number> 
    529       </property> 
    530       <property name="rightMargin" > 
    531        <number>0</number> 
    532       </property> 
    533       <property name="bottomMargin" > 
    534        <number>0</number> 
    535       </property> 
    536       <property name="horizontalSpacing" > 
    537        <number>6</number> 
    538       </property> 
    539       <property name="verticalSpacing" > 
     605      <property name="spacing" > 
    540606       <number>6</number> 
    541607      </property> 
     
    695761   </widget> 
    696762   <widget class="QWidget" name="tab_4" > 
     763    <property name="geometry" > 
     764     <rect> 
     765      <x>0</x> 
     766      <y>0</y> 
     767      <width>537</width> 
     768      <height>355</height> 
     769     </rect> 
     770    </property> 
    697771    <attribute name="title" > 
    698772     <string>&amp;Appearance</string> 
     
    721795     </property> 
    722796     <layout class="QGridLayout" > 
    723       <property name="leftMargin" > 
     797      <property name="margin" > 
    724798       <number>0</number> 
    725799      </property> 
    726       <property name="topMargin" > 
    727        <number>0</number> 
    728       </property> 
    729       <property name="rightMargin" > 
    730        <number>0</number> 
    731       </property> 
    732       <property name="bottomMargin" > 
    733        <number>0</number> 
    734       </property> 
    735       <property name="horizontalSpacing" > 
    736        <number>6</number> 
    737       </property> 
    738       <property name="verticalSpacing" > 
     800      <property name="spacing" > 
    739801       <number>6</number> 
    740802      </property> 
     
    793855     </property> 
    794856     <layout class="QGridLayout" > 
    795       <property name="leftMargin" > 
     857      <property name="margin" > 
    796858       <number>0</number> 
    797859      </property> 
    798       <property name="topMargin" > 
    799        <number>0</number> 
    800       </property> 
    801       <property name="rightMargin" > 
    802        <number>0</number> 
    803       </property> 
    804       <property name="bottomMargin" > 
    805        <number>0</number> 
    806       </property> 
    807       <property name="horizontalSpacing" > 
    808        <number>6</number> 
    809       </property> 
    810       <property name="verticalSpacing" > 
     860      <property name="spacing" > 
    811861       <number>6</number> 
    812862      </property> 
  • branches/jackMidi/libs/hydrogen/include/hydrogen/IO/JackOutput.h

    r397 r535  
    5757        void disconnect(); 
    5858        void deactivate(); 
     59        // Workaround for buggy transports.  Offsets the transport frame 
     60        // by the returned amount. 
     61        int getManualTransportAdjustment(); 
    5962        unsigned getBufferSize(); 
    6063        unsigned getSampleRate(); 
     
    113116                                         int new_pos); 
    114117//~ jack timebase callback 
    115  
    116118private: 
    117119        H2Core::Hydrogen *m_pEngine; 
  • branches/jackMidi/libs/hydrogen/include/hydrogen/Preferences.h

    r398 r535  
    155155        bool m_bbc; 
    156156        bool m_mmcsetplay; 
     157         
     158        int m_countOffset; 
     159        int m_startOffset; 
    157160        //~ beatcounter 
    158161 
     
    187190        bool m_bJackTrackOuts; 
    188191        int m_nJackTrackOutputMode; 
     192        int m_nJackManualTransportOffset; // +/- buffer size 
    189193        //jack time master 
    190194        bool m_bJackMasterMode ; 
  • branches/jackMidi/libs/hydrogen/include/hydrogen/hydrogen.h

    r534 r535  
    183183        int getBcStatus(); 
    184184        void handleBeatCounter(); 
     185        void setBcOffsetAdjust(); 
    185186 
    186187        /// jack time master 
  • branches/jackMidi/libs/hydrogen/src/IO/jack_output.cpp

    r532 r535  
    185185} 
    186186 
    187  
    188  
    189  
    190187unsigned JackOutput::getBufferSize() 
    191188{ 
     
    193190} 
    194191 
    195  
     192int JackOutput::getManualTransportAdjustment() 
     193
     194        int rv = getBufferSize() 
     195                * Preferences::getInstance()->m_nJackManualTransportOffset; 
     196        return rv; 
     197
    196198 
    197199unsigned JackOutput::getSampleRate() 
     
    219221        //wolke if hydrogen is jack time master this is not relevant 
    220222        if( Preferences::getInstance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER &&  m_transport.m_status != TransportInfo::ROLLING) { 
    221                 m_transport.m_nFrames = Hydrogen::get_instance()->getHumantimeFrames() - getBufferSize(); 
     223                m_transport.m_nFrames = Hydrogen::get_instance()->getHumantimeFrames() - getManualTransportAdjustment(); 
    222224                WARNINGLOG( "Relocate: Call it off" ); 
    223225                calculateFrameOffset(); 
     
    347349                                        //this perform Jakobs mod in pattern mode, but both m_transport.m_nFrames works with the same result in pattern Mode 
    348350                                        // in songmode the first case dont work.  
    349                                         //so we can remove this "if query" and only use this old mod: m_transport.m_nFrames = H->getHumantimeFrames() - getBufferSize(); 
     351                                        //so we can remove this "if query" and only use this old mod: m_transport.m_nFrames = H->getHumantimeFrames() - getManualTransportAdjustment(); 
    350352                                        //because to get the songmode we have to add this "H2Core::Hydrogen *m_pEngine" to the header file 
    351353                                        //if we remove this we also can remove *m_pEngine from header 
     
    355357                                        else 
    356358                                        { 
    357                                                 m_transport.m_nFrames = H->getHumantimeFrames() - getBufferSize(); 
     359                                                m_transport.m_nFrames = H->getHumantimeFrames() - getManualTransportAdjustment(); 
    358360                                        } 
    359361                                        // In jack 'slave' mode, if there's no master, the following line is needed to be able to relocate by clicking the song ruler (wierd corner case, but still...) 
     
    363365                                        ///this is experimantal... but it works for the moment... fix me fix :-) wolke 
    364366                                        // ... will this actually happen? keeping it for now ( jakob lund ) 
    365                                         m_transport.m_nFrames = H->getHumantimeFrames() - getBufferSize(); 
     367                                        m_transport.m_nFrames = H->getHumantimeFrames() - getManualTransportAdjustment(); 
    366368                                } 
    367369                        } 
  • branches/jackMidi/libs/hydrogen/src/hydrogen.cpp

    r534 r535  
    8787 
    8888//100,000 ms in 1 second. 
    89 #define MS_DIVIDER .000001 
     89#define US_DIVIDER .000001 
    9090 
    9191float m_ntaktoMeterCompute = 1;         ///< beatcounter note lenght 
     
    9898double lastBeatTime, currentBeatTime, beatDiff;         ///< timediff 
    9999float beatCountBpm;                     ///< bpm 
     100int m_nCoutOffset = 0;                  ///ms default 0 
     101int m_nStartOffset = 0;                 ///ms default 0 
    100102//~ beatcounter 
    101103 
     
    16791681void Hydrogen::sequencer_play() 
    16801682{ 
    1681         // play from start if pattern mode is enabled 
    1682         if ( m_pSong->get_mode() == Song::PATTERN_MODE ) { 
    1683                 setPatternPos( 0 ); 
    1684         } 
    16851683        m_pAudioDriver->play(); 
    16861684} 
     
    24982496 
    24992497 
     2498void Hydrogen::setBcOffsetAdjust() 
     2499{ 
     2500        //individual fine tuning for the beatcounter 
     2501        //to adjust  ms_offset from different people and controller 
     2502        Preferences *pref = Preferences::getInstance(); 
     2503 
     2504        m_nCoutOffset = pref->m_countOffset; 
     2505        m_nStartOffset = pref->m_startOffset; 
     2506} 
     2507 
    25002508 
    25012509void Hydrogen::handleBeatCounter() 
    2502 {  
     2510
     2511          
    25032512        // Get first time value: 
    25042513        if (beatCount == 1) 
     
    25152524 
    25162525        // Build doubled time difference: 
    2517                 lastBeatTime = (double)(lastTime.tv_sec + (double)(lastTime.tv_usec * MS_DIVIDER)); 
    2518                 currentBeatTime = (double)(currentTime.tv_sec + (double)(currentTime.tv_usec * MS_DIVIDER)); 
     2526                lastBeatTime = (double)(lastTime.tv_sec + (double)(lastTime.tv_usec * US_DIVIDER)  + (int)m_nCoutOffset * .0001 ); 
     2527                currentBeatTime = (double)(currentTime.tv_sec + (double)(currentTime.tv_usec * US_DIVIDER) ); 
    25192528                beatDiff = beatCount == 1 ? 0 : currentBeatTime - lastBeatTime; 
    25202529                 
     
    25562565                                                } 
    25572566 
    2558                                                 int sleeptime =  (float) rtstartframe / (float) bcsamplerate * ( int ) 1000
     2567                                                int sleeptime =  (float) rtstartframe / (float) bcsamplerate * (int) 1000 + (int)m_nCoutOffset + (int) m_nStartOffset
    25592568                                                #ifdef WIN32 
    25602569                                                Sleep( sleeptime ); 
  • branches/jackMidi/libs/hydrogen/src/preferences.cpp

    r534 r535  
    340340 
    341341                                        m_nJackTrackOutputMode = LocalFileMng::readXmlInt( jackDriverNode, "jack_track_output_mode", m_nJackTrackOutputMode ); 
     342                                        m_nJackManualTransportOffset = LocalFileMng::readXmlInt( jackDriverNode, "jack_manual_transport_offset", m_nJackManualTransportOffset ); 
    342343                                } 
    343344 
     
    432433                                                m_mmcsetplay = SET_PLAY_ON; 
    433434                                        } 
     435                                 
     436                                m_countOffset = LocalFileMng::readXmlInt( guiNode, "countoffset", 0 ); 
     437                                m_startOffset = LocalFileMng::readXmlInt( guiNode, "playoffset", 0 ); 
     438                                 
    434439                                //~ beatcounter 
    435440 
     
    673678                        } 
    674679                        LocalFileMng::writeXmlString( &jackDriverNode, "jack_track_outs", jackTrackOutsString ); 
    675  
     680                        QString jackManualTransportOffsetString = QString("%1").arg(m_nJackManualTransportOffset); 
     681                        LocalFileMng::writeXmlString( &jackDriverNode, "jack_manual_transport_offset", jackManualTransportOffsetString ); 
    676682                } 
    677683                audioEngineNode.InsertEndChild( jackDriverNode ); 
     
    754760                        } 
    755761                        LocalFileMng::writeXmlString( &guiNode, "setplay", setPlay ); 
     762 
     763                LocalFileMng::writeXmlString( &guiNode, "countoffset", to_string(m_countOffset) ); 
     764                LocalFileMng::writeXmlString( &guiNode, "playoffset", to_string(m_startOffset) ); 
    756765                //~ beatcounter 
    757766