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
|
/**********************************************************************
Audacity: A Digital Audio Editor
ImportUtils.cpp
Dominic Mazzoni
Vitaly Sverchinsky split from ImportPlugin.cpp
**********************************************************************/
#include "ImportUtils.h"
#include "WaveTrack.h"
#include "QualitySettings.h"
#include "BasicUI.h"
sampleFormat ImportUtils::ChooseFormat(sampleFormat effectiveFormat)
{
// Consult user preference
auto defaultFormat = QualitySettings::SampleFormatChoice();
// Don't choose format narrower than effective or default
auto format = std::max(effectiveFormat, defaultFormat);
// But also always promote 24 bits to float
if (format > int16Sample)
format = floatSample;
return format;
}
WaveTrack::Holder
ImportUtils::NewWaveTrack(WaveTrackFactory &trackFactory,
unsigned nChannels,
sampleFormat effectiveFormat,
double rate)
{
return trackFactory.Create(nChannels, ChooseFormat(effectiveFormat), rate);
}
void ImportUtils::ShowMessageBox(const TranslatableString &message, const TranslatableString& caption)
{
BasicUI::ShowMessageBox(message,
BasicUI::MessageBoxOptions().Caption(caption));
}
void ImportUtils::FinalizeImport(TrackHolders& outTracks, const std::vector<WaveTrack::Holder>& importedStreams)
{
for(auto& stream : importedStreams)
FinalizeImport(outTracks, *stream);
}
void ImportUtils::FinalizeImport(TrackHolders& outTracks, TrackList &&trackList)
{
if(trackList.empty())
return;
for(const auto track : trackList.Any<WaveTrack>())
track->Flush();
while (!trackList.empty())
outTracks.push_back(trackList.DetachFirst());
}
void ImportUtils::FinalizeImport(TrackHolders& outTracks, WaveTrack &track)
{
track.Flush();
outTracks.push_back(track.shared_from_this());
}
void ImportUtils::ForEachChannel(TrackList& trackList, const std::function<void(WaveChannel&)>& op)
{
for(auto track : trackList.Any<WaveTrack>())
{
for(auto channel : track->Channels())
{
op(*channel);
}
}
}
void ImportUtils::ForEachChannel(WaveTrack &track, const std::function<void(WaveChannel&)>& op)
{
for(auto channel : track.Channels())
{
op(*channel);
}
}
|