1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-11 17:13:37 +02:00
Files
audacity/src/ProjectAudioManager.h
Paul Licameli 9093364b8c Fix other problems since commit f6e5696...
... Problem with static initialization order of ReservedCommandFlags, caused
wrong enablement of menu items (at least on Mac), such as Plot Spectrum or
Contrast enabled when there was no selection
2020-01-28 17:49:07 -05:00

170 lines
5.1 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
ProjectAudioManager.h
Paul Licameli split from ProjectManager.h
**********************************************************************/
#ifndef __AUDACITY_PROJECT_AUDIO_MANAGER__
#define __AUDACITY_PROJECT_AUDIO_MANAGER__
#include <memory>
#include <vector>
#include "AudioIOListener.h" // to inherit
#include "ClientData.h" // to inherit
class AudacityProject;
struct AudioIOStartStreamOptions;
class TrackList;
class SelectedRegion;
class WaveTrack;
using WaveTrackArray = std::vector < std::shared_ptr < WaveTrack > >;
enum class PlayMode : int {
normalPlay,
oneSecondPlay, // Disables auto-scrolling
loopedPlay, // Disables auto-scrolling
cutPreviewPlay
};
struct TransportTracks;
enum StatusBarField : int;
class ProjectAudioManager final
: public ClientData::Base
, public AudioIOListener
, public std::enable_shared_from_this< ProjectAudioManager >
{
public:
static ProjectAudioManager &Get( AudacityProject &project );
static const ProjectAudioManager &Get( const AudacityProject &project );
// Find suitable tracks to record into, or return an empty array.
static WaveTrackArray ChooseExistingRecordingTracks(
AudacityProject &proj, bool selectedOnly);
static bool UseDuplex();
static TransportTracks GetAllPlaybackTracks(
TrackList &trackList, bool selectedOnly, bool useMidi = false);
explicit ProjectAudioManager( AudacityProject &project );
ProjectAudioManager( const ProjectAudioManager & ) PROHIBITED;
ProjectAudioManager &operator=( const ProjectAudioManager & ) PROHIBITED;
~ProjectAudioManager() override;
bool IsTimerRecordCancelled() { return mTimerRecordCanceled; }
void SetTimerRecordCancelled() { mTimerRecordCanceled = true; }
void ResetTimerRecordCancelled() { mTimerRecordCanceled = false; }
bool Paused() const { return mPaused; }
bool Playing() const;
// Whether recording into this project (not just into some project) is
// active
bool Recording() const;
bool Stopping() const { return mStopping; }
// Whether the last attempt to start recording requested appending to tracks
bool Appending() const { return mAppending; }
bool Looping() const { return mLooping; }
bool Cutting() const { return mCutting; }
// A project is only allowed to stop an audio stream that it owns.
bool CanStopAudioStream () const;
void OnRecord(bool altAppearance);
bool DoRecord(AudacityProject &project,
const TransportTracks &transportTracks, // If captureTracks is empty, then tracks are created
double t0, double t1,
bool altAppearance,
const AudioIOStartStreamOptions &options);
int PlayPlayRegion(const SelectedRegion &selectedRegion,
const AudioIOStartStreamOptions &options,
PlayMode playMode,
bool backwards = false,
// Allow t0 and t1 to be beyond end of tracks
bool playWhiteSpace = false);
// Play currently selected region, or if nothing selected,
// play from current cursor.
void PlayCurrentRegion(bool looped = false, bool cutpreview = false);
void OnPause();
// Pause - used by AudioIO to pause sound activate recording
void Pause();
// Stop playing or recording
void Stop(bool stopStream = true);
void StopIfPaused();
bool DoPlayStopSelect( bool click, bool shift );
void DoPlayStopSelect( );
PlayMode GetLastPlayMode() const { return mLastPlayMode; }
private:
void SetPaused( bool value ) { mPaused = value; }
void SetAppending( bool value ) { mAppending = value; }
void SetLooping( bool value ) { mLooping = value; }
void SetCutting( bool value ) { mCutting = value; }
void SetStopping( bool value ) { mStopping = value; }
void SetupCutPreviewTracks(double playStart, double cutStart,
double cutEnd, double playEnd);
void ClearCutPreviewTracks();
// Cancel the addition of temporary recording tracks into the project
void CancelRecording();
// Audio IO callback methods
void OnAudioIORate(int rate) override;
void OnAudioIOStartRecording() override;
void OnAudioIOStopRecording() override;
void OnAudioIONewBlockFiles(const AutoSaveFile & blockFileLog) override;
void OnCommitRecording() override;
void OnSoundActivationThreshold() override;
AudacityProject &mProject;
std::shared_ptr<TrackList> mCutPreviewTracks;
PlayMode mLastPlayMode{ PlayMode::normalPlay };
//flag for cancellation of timer record.
bool mTimerRecordCanceled{ false };
bool mPaused{ false };
bool mAppending{ false };
bool mLooping{ false };
bool mCutting{ false };
bool mStopping{ false };
int mDisplayedRate{ 0 };
static std::pair< TranslatableStrings, unsigned >
StatusWidthFunction(
const AudacityProject &project, StatusBarField field);
};
AudioIOStartStreamOptions DefaultPlayOptions( AudacityProject &project );
AudioIOStartStreamOptions DefaultSpeedPlayOptions( AudacityProject &project );
#include "commands/CommandFlag.h"
extern const ReservedCommandFlag
&CanStopAudioStreamFlag();
#endif