/*
- Copyright (C) 2006 Paul Davis
+ Copyright (C) 2006 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
+#ifdef WAF_BUILD
+#include "libardour-config.h"
+#endif
+
#include <vector>
#include <sys/time.h>
#include <glibmm/thread.h>
#include "ardour/audiofilesource.h"
+#include "ardour/debug.h"
#include "ardour/sndfile_helpers.h"
#include "ardour/sndfilesource.h"
#include "ardour/session.h"
// if these headers come before sigc++ is included
// the parser throws ObjC++ errors. (nil is a keyword)
-#ifdef HAVE_COREAUDIO
+#ifdef HAVE_COREAUDIO
#include "ardour/coreaudiosource.h"
#include <AudioToolbox/ExtendedAudioFile.h>
#include <AudioToolbox/AudioFormat.h>
#include "i18n.h"
+using namespace std;
using namespace ARDOUR;
using namespace PBD;
using namespace Glib;
nframes_t size;
Sample* buf;
- SizedSampleBuffer (nframes_t sz) : size (sz) {
+ SizedSampleBuffer (nframes_t sz) : size (sz) {
buf = new Sample[size];
}
Glib::StaticPrivate<SizedSampleBuffer> thread_interleave_buffer = GLIBMM_STATIC_PRIVATE_INIT;
/** Constructor used for existing internal-to-session files. */
-AudioFileSource::AudioFileSource (Session& s, const ustring& path, bool embedded, Source::Flag flags)
+AudioFileSource::AudioFileSource (Session& s, const ustring& path, Source::Flag flags)
: Source (s, DataType::AUDIO, path, flags)
, AudioSource (s, path)
- , FileSource (s, DataType::AUDIO, path, embedded, flags)
+ , FileSource (s, DataType::AUDIO, path, flags)
{
- if (init (path, true)) {
+ if (init (_path, true)) {
throw failed_constructor ();
}
+
}
/** Constructor used for new internal-to-session files. */
-AudioFileSource::AudioFileSource (Session& s, const ustring& path, bool embedded, Source::Flag flags,
- SampleFormat samp_format, HeaderFormat hdr_format)
+AudioFileSource::AudioFileSource (Session& s, const ustring& path, Source::Flag flags,
+ SampleFormat /*samp_format*/, HeaderFormat /*hdr_format*/)
: Source (s, DataType::AUDIO, path, flags)
, AudioSource (s, path)
- , FileSource (s, DataType::AUDIO, path, embedded, flags)
+ , FileSource (s, DataType::AUDIO, path, flags)
{
- _is_embedded = false;
-
- if (init (path, false)) {
+ if (init (_path, false)) {
throw failed_constructor ();
}
}
-/** Constructor used for existing internal-to-session files. File must exist. */
+/** Constructor used for existing internal-to-session files via XML. File must exist. */
AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exist)
: Source (s, node)
, AudioSource (s, node)
, FileSource (s, node, must_exist)
{
- if (set_state (node)) {
+ if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor ();
}
-
- if (init (_name, must_exist)) {
+
+ if (init (_path, must_exist)) {
throw failed_constructor ();
}
}
AudioFileSource::~AudioFileSource ()
{
+ DEBUG_TRACE (DEBUG::Destruction, string_compose ("AudioFileSource destructor %1, removable? %2\n", _path, removable()));
if (removable()) {
unlink (_path.c_str());
unlink (peakpath.c_str());
ustring str;
/* check for the broken location in use by 2.0 for several months */
-
+
str = broken_peak_path (audio_path);
-
+
if (Glib::file_test (str, Glib::FILE_TEST_EXISTS)) {
-
- if (is_embedded()) {
-
- /* it would be nice to rename it but the nature of
+
+ if (!within_session()) {
+
+ /* it would be nice to rename it but the nature of
the bug means that we can't reliably use it.
*/
-
+
peak_path = str;
-
+
} else {
/* all native files are mono, so we can just rename
it.
*/
::rename (str.c_str(), peak_path.c_str());
}
-
+
} else {
/* Nasty band-aid for older sessions that were created before we
used libsndfile for all audio files.
*/
-
-
- str = old_peak_path (audio_path);
+
+
+ str = old_peak_path (audio_path);
if (Glib::file_test (str, Glib::FILE_TEST_EXISTS)) {
peak_path = str;
}
}
int
-AudioFileSource::set_state (const XMLNode& node)
+AudioFileSource::set_state (const XMLNode& node, int version)
{
- if (Source::set_state (node)) {
+ if (Source::set_state (node, version)) {
return -1;
}
- if (AudioSource::set_state (node)) {
+ if (AudioSource::set_state (node, version)) {
return -1;
}
-
- if (FileSource::set_state (node)) {
+
+ if (FileSource::set_state (node, version)) {
return -1;
}
if (!writable()) {
return;
}
-
+
/* XXX notice that we're readers of _peaks_built
but we must hold a solid lock on PeaksReady.
*/
}
bool
-AudioFileSource::is_empty (Session& s, ustring path)
+AudioFileSource::is_empty (Session& /*s*/, ustring path)
{
SoundFileInfo info;
string err;
-
+
if (!get_soundfile_info (path, info, err)) {
/* dangerous: we can't get info, so assume that its not empty */
- return false;
+ return false;
}
return info.length == 0;
".vwe", ".VWE",
".paf", ".PAF",
".voc", ".VOC",
-#ifdef HAVE_FLAC
+ ".ogg", ".OGG",
".flac", ".FLAC",
-#endif // HAVE_FLAC
#ifdef HAVE_COREAUDIO
".mp3", ".MP3",
".aac", ".AAC",