Changeset 1088

Show
Ignore:
Timestamp:
04/27/09 03:42:06 (4 years ago)
Author:
gabriel@…
Message:

Change API for Jack Transport Master. Remove unused methods from H2Core::Hydrogen.

This is a partial changeover. The API is changed, but:

  • H2Transport.cpp does not compile because the EVENT_JACK_MASTER needs to be implemented for the Event Queue.
  • hydrogen.cpp still does not compile.
Location:
branches/transport_redesign_2
Files:
2 added
6 modified

Legend:

Unmodified
Added
Removed
  • branches/transport_redesign_2/gui/src/PlayerControl.cpp

    r1080 r1088  
    540540                                { 
    541541                                        m_pJackMasterBtn->setPressed(false); 
    542                                         Hydrogen::get_instance()->offJackMaster();       
     542                                        Hydrogen::get_instance()->clearJackTimeMaster();         
    543543                                        pPref->m_bJackMasterMode = Preferences::NO_JACK_TIME_MASTER; 
    544544                                } 
     
    845845                AudioEngine::get_instance()->unlock(); 
    846846                (HydrogenApp::getInstance())->setStatusBarMessage(trUtf8(" Jack-Time-Master mode = On"), 5000); 
    847                 Hydrogen::get_instance()->onJackMaster(); 
     847                Hydrogen::get_instance()->setJackTimeMaster(false); 
    848848                 
    849849        } 
     
    854854                (HydrogenApp::getInstance())->setStatusBarMessage(trUtf8(" Jack-Time-Master mode = Off"), 5000); 
    855855                //m_pControlsBBTPanel->hide(); 
    856                 Hydrogen::get_instance()->offJackMaster(); 
     856                Hydrogen::get_instance()->clearJackTimeMaster(); 
    857857        } 
    858858 
  • branches/transport_redesign_2/libs/hydrogen/include/hydrogen/hydrogen.h

    r1087 r1088  
    193193 
    194194        /// jack time master 
    195         unsigned long getHumantimeFrames(); 
    196         void setHumantimeFrames(unsigned long hframes); 
    197         void offJackMaster(); 
    198         void onJackMaster(); 
    199         unsigned long getTimeMasterFrames(); 
    200         long getTickForHumanPosition( int humanpos ); 
    201         float getNewBpmJTM(); 
    202         void setNewBpmJTM( float bpmJTM); 
     195        bool setJackTimeMaster(bool if_none_already = false);  // Returns true if we became master 
     196        void clearJackTimeMaster(); 
     197        bool getJackTimeMaster();    /* Note:  There's no way to know for sure 
     198                                        if we are _actually_ the JACK time master. */ 
     199        ///~jack time master 
    203200 
    204201        void __panic(); 
  • branches/transport_redesign_2/libs/hydrogen/src/hydrogen.cpp

    r1087 r1088  
    23692369 
    23702370// jack transport master 
    2371 unsigned long Hydrogen::getHumantimeFrames() 
    2372 { 
    2373         return m_nHumantimeFrames; 
    2374 } 
    2375  
    2376 void Hydrogen::setHumantimeFrames(unsigned long hframes) 
    2377 { 
    2378         m_nHumantimeFrames = hframes; 
    2379 } 
    2380  
    2381  
    2382  
    2383 #ifdef JACK_SUPPORT 
    2384 void Hydrogen::offJackMaster() 
    2385 { 
    2386         static_cast< JackOutput* >( m_pAudioDriver )->com_release(); 
    2387 } 
    2388  
    2389 void Hydrogen::onJackMaster() 
    2390 { 
    2391         static_cast< JackOutput* >( m_pAudioDriver )->initTimeMaster(); 
    2392 } 
    2393  
    2394 unsigned long Hydrogen::getTimeMasterFrames() 
    2395 { 
    2396         float allframes = 0 ; 
    2397  
    2398         if ( m_pAudioDriver->m_transport.m_status == TransportInfo::STOPPED ){ 
    2399  
    2400                 int oldtick = getTickPosition(); 
    2401                 for (int i = 0; i <= getPatternPos(); i++){ 
    2402                         float framesforposition = 
    2403                                 (long)getTickForHumanPosition(i) 
    2404                                 * (float)m_pAudioDriver->m_transport.m_nTickSize; 
    2405                         allframes = framesforposition + allframes; 
    2406                 } 
    2407                 unsigned long framesfortimemaster = (unsigned int)( 
    2408                         allframes 
    2409                         + oldtick * (float)m_pAudioDriver->m_transport.m_nTickSize 
    2410                         ); 
    2411                 m_nHumantimeFrames = framesfortimemaster; 
    2412                 return framesfortimemaster; 
    2413         }else 
    2414         { 
    2415         return m_nHumantimeFrames; 
    2416         } 
    2417 } 
    2418 #endif 
    2419  
    2420 long Hydrogen::getTickForHumanPosition( int humanpos ) 
    2421 { 
    2422         std::vector< PatternList* > * columns = m_pSong->get_pattern_group_vector(); 
    2423          
    2424         int nPatternGroups = columns->size(); 
    2425         if ( humanpos >= nPatternGroups ) { 
    2426                 if ( m_pSong->is_loop_enabled() ) { 
    2427                         humanpos = humanpos % nPatternGroups; 
    2428                 } else { 
    2429                         return -1; 
    2430                 } 
    2431         } 
    2432  
    2433 //      std::vector<PatternList*> *pColumns = 
    2434 //              m_pSong->get_pattern_group_vector()[ humanpos - 1 ] 
    2435 //                      .get( 0 )->get_length(); 
    2436          
    2437 //      ERRORLOG( "Kick me!" ); 
    2438         if ( humanpos == 0 ) return 0; 
    2439         Pattern *pPattern = columns->at( humanpos - 1 )->get( 0 ); 
    2440         if ( pPattern ) { 
    2441                 return pPattern->get_length(); 
    2442         } else { 
    2443                 return MAX_NOTES; 
    2444         } 
    2445 //      int nPatternSize; 
    2446          
    2447 //      pColumns 
    2448          
    2449 /*      Pattern *pPattern = NULL; 
    2450         for ( int i = 0; i < humanpos; ++i ) { 
    2451                 PatternList *pColumn = ( *pColumns )[ i ]; 
    2452                 pPattern = pColumn->get( 0 ); 
    2453                 if ( pPattern ) { 
    2454                         nPatternSize = pPattern->get_length(); 
    2455                 } else { 
    2456                         nPatternSize = MAX_NOTES; 
    2457                 } 
    2458  
    2459                 humanTick = nPatternSize; 
    2460         }*/ 
    2461 //      return humanTick; 
    2462 } 
    2463  
    2464  
    2465  
    2466 float Hydrogen::getNewBpmJTM() 
    2467 { 
    2468         return m_nNewBpmJTM; 
    2469 } 
    2470  
    2471 void Hydrogen::setNewBpmJTM( float bpmJTM ) 
    2472 { 
    2473         m_nNewBpmJTM = bpmJTM; 
    2474 } 
    2475  
     2371 
     2372bool Hydrogen::setJackTimeMaster(bool if_none_already) 
     2373{ 
     2374        return m_pTransport->setJackTimeMaster(if_none_already); 
     2375} 
     2376 
     2377void Hydrogen::clearJackTimeMaster() 
     2378{ 
     2379        m_pTransport->clearJackTimeMaster(); 
     2380} 
     2381 
     2382bool Hydrogen::getJackTimeMaster() 
     2383{ 
     2384        return m_pTransport->getJackTimeMaster(); 
     2385} 
    24762386 
    24772387//~ jack transport master 
  • branches/transport_redesign_2/libs/hydrogen/src/song.cpp

    r1074 r1088  
    271271 
    272272        float fBpm = LocalFileMng::readXmlFloat( songNode, "bpm", 120 ); 
    273         Hydrogen::get_instance()->setNewBpmJTM( fBpm );  
    274273        float fVolume = LocalFileMng::readXmlFloat( songNode, "volume", 0.5 ); 
    275274        float fMetronomeVolume = LocalFileMng::readXmlFloat( songNode, "metronomeVolume", 0.5 ); 
  • branches/transport_redesign_2/libs/hydrogen/src/transport/H2Transport.cpp

    r1082 r1088  
    2121 */ 
    2222 
     23#include <memory> 
    2324#include <hydrogen/event_queue.h> 
    2425#include "H2Transport.h" 
    2526#include "SimpleTransportMaster.h" 
     27#include "JackTimeMaster.h" 
    2628 
    2729using namespace H2Core; 
     
    3032{ 
    3133public: 
    32     Transport* xport; 
     34    std::auto_ptr<Transport> xport; 
     35 
     36    /* This is used as a heartbeat signal with the JACK transport. 
     37     * It always sets it true.  We always set it false.  If it's 
     38     * ever false, then we're no longer being called... and probably 
     39     * no longer the transport master. 
     40     */ 
     41    bool presumed_jtm;  // We *think* we're the Jack time master. 
     42    bool heartbeat_jtm; 
     43    std::auto_ptr<JackTimeMaster> jtm; 
     44    Song* pSong;  // Cached pointer for JTM 
    3345}; 
    3446 
     
    3749{ 
    3850    d = new H2TransportPrivate; 
    39     d->xport = new SimpleTransportMaster; 
     51    d->xport.reset( new SimpleTransportMaster ); 
     52    d->presumed_jtm = false; 
     53    d->heartbeat_jtm = false; 
     54    d->pSong = 0; 
    4055} 
    4156 
    4257H2Transport::~H2Transport() 
    4358{ 
    44     delete d->xport; 
    4559    delete d; 
    4660} 
     
    4862int H2Transport::locate(uint32_t frame) 
    4963{ 
    50     if(d->xport) return d->xport->locate(frame); 
     64    if(d->xport.get()) return d->xport->locate(frame); 
    5165    return -1; 
    5266} 
     
    5468int H2Transport::locate(uint32_t bar, uint32_t beat, uint32_t tick) 
    5569{ 
    56     if(d->xport) return d->xport->locate(bar, beat, tick); 
     70    if(d->xport.get()) return d->xport->locate(bar, beat, tick); 
    5771    return -1; 
    5872} 
     
    6175{ 
    6276    EventQueue::get_instance()->push_event( EVENT_TRANSPORT, (int)TransportPosition::ROLLING ); 
    63     if(d->xport) d->xport->start(); 
     77    if(d->xport.get()) d->xport->start(); 
    6478} 
    6579 
     
    6781{ 
    6882    EventQueue::get_instance()->push_event( EVENT_TRANSPORT, (int)TransportPosition::STOPPED ); 
    69     if(d->xport) d->xport->stop(); 
     83    if(d->xport.get()) d->xport->stop(); 
    7084} 
    7185 
    7286void H2Transport::get_position(TransportPosition* pos) 
    7387{ 
    74     if(d->xport) d->xport->get_position(pos); 
     88    if(d->xport.get()) d->xport->get_position(pos); 
    7589} 
    7690 
    7791void H2Transport::processed_frames(uint32_t nFrames) 
    7892{ 
    79     if(d->xport) d->xport->processed_frames(nFrames); 
     93    if( d->heartbeat_jtm == false && d->presumed_jtm == true ) { 
     94        EventQueue::get_instance()->push_event( EVENT_JACK_MASTER, JACK_MASTER_NO_MORE ); 
     95        d->presumed_jtm = false; 
     96    } 
     97    d->heartbeat_jtm = false; 
     98 
     99    if(d->xport.get()) d->xport->processed_frames(nFrames); 
    80100} 
    81101 
    82102void H2Transport::set_current_song(Song* s) 
    83103{ 
    84     if(d->xport) d->xport->set_current_song(s); 
     104    d->pSong = s; 
     105    if( d->jtm.get() ) { 
     106        d->jtm->set_current_song(s); 
     107    } 
     108    if(d->xport.get()) d->xport->set_current_song(s); 
    85109} 
    86110 
    87111uint32_t H2Transport::get_current_frame() 
    88112{ 
    89     if(d->xport) { 
     113    if(d->xport.get()) { 
    90114        return d->xport->get_current_frame(); 
    91115    } 
     
    95119TransportPosition::State H2Transport::get_state() 
    96120{ 
    97     if(d->xport) { 
     121    if(d->xport.get()) { 
    98122        return d->xport->get_state(); 
    99123    } 
    100124    return TransportPosition::STOPPED; 
    101125} 
     126 
     127bool H2Transport::setJackTimeMaster(bool if_none_already) 
     128{ 
     129    if( ! d->jtm.get() ) { 
     130        d->jtm.reset( new JackTimeMaster ); 
     131        d->jtm->set_current_song( d->pSong ); 
     132    } 
     133    return d->jtm->setMaster(if_none_already); 
     134} 
     135 
     136void H2Transport::clearJackTimeMaster() 
     137{ 
     138    if( d->jtm.get() ) { 
     139        d->jtm->clearMaster(); 
     140    } 
     141} 
     142 
     143bool H2Transport::getJackTimeMaster() 
     144{ 
     145    return d->presumed_jtm; 
     146} 
  • branches/transport_redesign_2/libs/hydrogen/src/transport/H2Transport.h

    r1081 r1088  
    6868        virtual TransportPosition::State get_state(void); 
    6969 
     70        // Special Methods for Jack Transport. 
     71        bool setJackTimeMaster(bool if_none_already = false); 
     72        void clearJackTimeMaster(); 
     73        bool getJackTimeMaster(); 
     74 
    7075        // Interface for application (i.e. GUI) 
    7176        // * get list of transport models