1 /********************************************************************** 2 3 Audacity: A Digital Audio Editor 4 5 ProjectAudioIO.h 6 7 Paul Licameli split from AudacityProject.h 8 9 **********************************************************************/ 10 11 #ifndef __PROJECT_AUDIO_IO__ 12 #define __PROJECT_AUDIO_IO__ 13 14 #include "ClientData.h" // to inherit 15 #include <wx/weakref.h> 16 #include <wx/event.h> // to declare custom event type 17 18 #include <atomic> 19 #include <memory> 20 class AudacityProject; 21 class Meter; 22 23 // Sent to the project when the play speed changes 24 wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, 25 EVT_PLAY_SPEED_CHANGE, wxCommandEvent); 26 27 ///\ brief Holds per-project state needed for interaction with AudioIO, 28 /// including the audio stream token and pointers to meters 29 class AUDACITY_DLL_API ProjectAudioIO final 30 : public ClientData::Base 31 { 32 public: 33 static ProjectAudioIO &Get( AudacityProject &project ); 34 static const ProjectAudioIO &Get( const AudacityProject &project ); 35 36 explicit ProjectAudioIO( AudacityProject &project ); 37 ProjectAudioIO( const ProjectAudioIO & ) PROHIBITED; 38 ProjectAudioIO &operator=( const ProjectAudioIO & ) PROHIBITED; 39 ~ProjectAudioIO(); 40 41 int GetAudioIOToken() const; 42 bool IsAudioActive() const; 43 void SetAudioIOToken(int token); 44 45 const std::shared_ptr<Meter> &GetPlaybackMeter() const; 46 void SetPlaybackMeter( 47 const std::shared_ptr<Meter> &playback); 48 const std::shared_ptr<Meter> &GetCaptureMeter() const; 49 void SetCaptureMeter( 50 const std::shared_ptr<Meter> &capture); 51 52 // Speed play GetPlaySpeed()53 double GetPlaySpeed() const { 54 return mPlaySpeed.load( std::memory_order_relaxed ); } 55 void SetPlaySpeed( double value ); 56 57 private: 58 AudacityProject &mProject; 59 60 // Project owned meters 61 std::shared_ptr<Meter> mPlaybackMeter; 62 std::shared_ptr<Meter> mCaptureMeter; 63 64 // This is atomic because scrubber may read it in a separate thread from 65 // the main 66 std::atomic<double> mPlaySpeed{}; 67 68 int mAudioIOToken{ -1 }; 69 }; 70 71 #endif 72