1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
/**********************************************************************
Audacity: A Digital Audio Editor
ProjectAudioIO.cpp
Paul Licameli split from AudacityProject.cpp
**********************************************************************/
#include "ProjectAudioIO.h"
#include "AudioIOBase.h"
#include "Mix.h"
#include "Project.h"
#include "ProjectRate.h"
AudioIOStartStreamOptions
ProjectAudioIO::DefaultOptionsFactory(AudacityProject &project, bool)
{
auto &projectAudioIO = Get(project);
AudioIOStartStreamOptions options{
project.shared_from_this(), ProjectRate::Get(project).GetRate()
};
options.captureMeter = projectAudioIO.GetCaptureMeter();
options.playbackMeter = projectAudioIO.GetPlaybackMeter();
options.envelope =
Mixer::WarpOptions::DefaultWarp::Call(&project);
// options.listener remains null
// boolean argument is ignored
return options;
}
AudioIOStartStreamOptions ProjectAudioIO::GetDefaultOptions(
AudacityProject &project, bool newDefaults)
{
return DefaultOptions::Call(project, newDefaults);
}
static const AudacityProject::AttachedObjects::RegisteredFactory sAudioIOKey{
[]( AudacityProject &parent ){
return std::make_shared< ProjectAudioIO >( parent );
}
};
ProjectAudioIO &ProjectAudioIO::Get( AudacityProject &project )
{
return project.AttachedObjects::Get< ProjectAudioIO >( sAudioIOKey );
}
const ProjectAudioIO &ProjectAudioIO::Get( const AudacityProject &project )
{
return Get( const_cast<AudacityProject &>(project) );
}
ProjectAudioIO::ProjectAudioIO( AudacityProject &project )
: mProject{ project }
{
}
ProjectAudioIO::~ProjectAudioIO()
{
}
int ProjectAudioIO::GetAudioIOToken() const
{
return mAudioIOToken;
}
void ProjectAudioIO::SetAudioIOToken(int token)
{
mAudioIOToken = token;
}
bool ProjectAudioIO::IsAudioActive() const
{
auto gAudioIO = AudioIOBase::Get();
return GetAudioIOToken() > 0 &&
gAudioIO->IsStreamActive(GetAudioIOToken());
}
const std::shared_ptr<Meter> &ProjectAudioIO::GetPlaybackMeter() const
{
return mPlaybackMeter;
}
void ProjectAudioIO::SetPlaybackMeter(
const std::shared_ptr<Meter> &playback)
{
auto &project = mProject;
mPlaybackMeter = playback;
auto gAudioIO = AudioIOBase::Get();
if (gAudioIO)
{
gAudioIO->SetPlaybackMeter( project.shared_from_this() , mPlaybackMeter );
}
}
const std::shared_ptr<Meter> &ProjectAudioIO::GetCaptureMeter() const
{
return mCaptureMeter;
}
void ProjectAudioIO::SetCaptureMeter(
const std::shared_ptr<Meter> &capture)
{
auto &project = mProject;
mCaptureMeter = capture;
auto gAudioIO = AudioIOBase::Get();
if (gAudioIO)
{
gAudioIO->SetCaptureMeter( project.shared_from_this(), mCaptureMeter );
}
}
void ProjectAudioIO::SetPlaySpeed(double value)
{
if (auto oldValue = GetPlaySpeed(); value != oldValue) {
mPlaySpeed.store( value, std::memory_order_relaxed );
Publish({});
}
}
|