#include "sound_asset.h"
#include "util.h"
#include "exceptions.h"
+#include "sound_frame.h"
using namespace std;
using namespace boost;
SoundAsset::SoundAsset (
vector<string> const & files, string directory, string mxf_name, sigc::signal1<void, float>* progress, int fps, int length
)
- : Asset (directory, mxf_name, progress, fps, length)
+ : MXFAsset (directory, mxf_name, progress, fps, length)
, _channels (files.size ())
+ , _sampling_rate (0)
{
construct (sigc::bind (sigc::mem_fun (*this, &SoundAsset::path_from_channel), files));
}
SoundAsset::SoundAsset (
sigc::slot<string, Channel> get_path, string directory, string mxf_name, sigc::signal1<void, float>* progress, int fps, int length, int channels
)
- : Asset (directory, mxf_name, progress, fps, length)
+ : MXFAsset (directory, mxf_name, progress, fps, length)
, _channels (channels)
+ , _sampling_rate (0)
{
construct (get_path);
}
SoundAsset::SoundAsset (string directory, string mxf_name, int fps, int length)
- : Asset (directory, mxf_name, 0, fps, length)
+ : MXFAsset (directory, mxf_name, 0, fps, length)
, _channels (0)
{
+ ASDCP::PCM::MXFReader reader;
+ if (ASDCP_FAILURE (reader.OpenRead (path().string().c_str()))) {
+ throw FileError ("could not open MXF file for reading", path().string());
+ }
+
+
+ ASDCP::PCM::AudioDescriptor desc;
+ if (ASDCP_FAILURE (reader.FillAudioDescriptor (desc))) {
+ throw DCPReadError ("could not read audio MXF information");
+ }
+ _sampling_rate = desc.AudioSamplingRate.Numerator / desc.AudioSamplingRate.Denominator;
+ _channels = desc.ChannelCount;
}
string
fill_writer_info (&writer_info);
ASDCP::PCM::MXFWriter mxf_writer;
- if (ASDCP_FAILURE (mxf_writer.OpenWrite (mxf_path().string().c_str(), writer_info, audio_desc))) {
- throw FileError ("could not open audio MXF for writing", mxf_path().string());
+ if (ASDCP_FAILURE (mxf_writer.OpenWrite (path().string().c_str(), writer_info, audio_desc))) {
+ throw FileError ("could not open audio MXF for writing", path().string());
}
for (int i = 0; i < _length; ++i) {
{
s << " <MainSound>\n"
<< " <Id>urn:uuid:" << _uuid << "</Id>\n"
- << " <AnnotationText>" << _mxf_name << "</AnnotationText>\n"
+ << " <AnnotationText>" << _file_name << "</AnnotationText>\n"
<< " <EditRate>" << _fps << " 1</EditRate>\n"
<< " <IntrinsicDuration>" << _length << "</IntrinsicDuration>\n"
<< " <EntryPoint>0</EntryPoint>\n"
}
list<string>
-SoundAsset::equals (shared_ptr<const Asset> other, EqualityFlags flags, double max_mean, double max_std_dev) const
+SoundAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt) const
{
- list<string> notes = Asset::equals (other, flags, max_mean, max_std_dev);
+ list<string> notes = MXFAsset::equals (other, opt);
- if (flags & MXF_INSPECT) {
+ if (opt.flags & MXF_INSPECT) {
ASDCP::PCM::MXFReader reader_A;
- if (ASDCP_FAILURE (reader_A.OpenRead (mxf_path().string().c_str()))) {
- cout << "failed " << mxf_path() << "\n";
- throw FileError ("could not open MXF file for reading", mxf_path().string());
+ if (ASDCP_FAILURE (reader_A.OpenRead (path().string().c_str()))) {
+ cout << "failed " << path() << "\n";
+ throw FileError ("could not open MXF file for reading", path().string());
}
ASDCP::PCM::MXFReader reader_B;
- if (ASDCP_FAILURE (reader_B.OpenRead (other->mxf_path().string().c_str()))) {
- cout << "failed " << other->mxf_path() << "\n";
- throw FileError ("could not open MXF file for reading", mxf_path().string());
+ if (ASDCP_FAILURE (reader_B.OpenRead (other->path().string().c_str()))) {
+ cout << "failed " << other->path() << "\n";
+ throw FileError ("could not open MXF file for reading", path().string());
}
ASDCP::PCM::AudioDescriptor desc_A;
}
if (buffer_A.Size() != buffer_B.Size()) {
- notes.push_back ("sizes of video data for frame " + lexical_cast<string>(i) + " differ");
+ notes.push_back ("sizes of audio data for frame " + lexical_cast<string>(i) + " differ");
continue;
}
return notes;
}
+
+shared_ptr<const SoundFrame>
+SoundAsset::get_frame (int n) const
+{
+ return shared_ptr<const SoundFrame> (new SoundFrame (path().string(), n));
+}