summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-11-07 19:21:39 +0100
committerRobin Gareus <robin@gareus.org>2018-11-07 19:21:39 +0100
commit2991afaf0da78f860854f59a7d6c4e64fb519d23 (patch)
treed37ecb996b5ac2114509b34f839747d81c72fd94 /libs
parent1ca76c4e18ed7ab8a8f145dfb6ba68a1536bdb33 (diff)
Add support for recording to .flac
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/types.h1
-rw-r--r--libs/ardour/enums.cc1
-rw-r--r--libs/ardour/luabindings.cc1
-rw-r--r--libs/ardour/sndfilesource.cc13
-rw-r--r--libs/ardour/utils.cc2
5 files changed, 16 insertions, 2 deletions
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 635b78334b..a9b297d505 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -543,6 +543,7 @@ enum HeaderFormat {
RF64,
RF64_WAV,
MBWF,
+ FLAC,
};
struct PeakData {
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index 5b7bbe457d..4ff286a1d7 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -380,6 +380,7 @@ setup_enum_writer ()
REGISTER_ENUM (RF64);
REGISTER_ENUM (RF64_WAV);
REGISTER_ENUM (MBWF);
+ REGISTER_ENUM (FLAC);
REGISTER (_HeaderFormat);
REGISTER_ENUM (AudioUnit);
diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc
index 36c63a9269..899e98a7fe 100644
--- a/libs/ardour/luabindings.cc
+++ b/libs/ardour/luabindings.cc
@@ -1947,6 +1947,7 @@ LuaBindings::common (lua_State* L)
.addConst ("RF64", ARDOUR::HeaderFormat(RF64))
.addConst ("RF64_WAV", ARDOUR::HeaderFormat(RF64_WAV))
.addConst ("MBWF", ARDOUR::HeaderFormat(MBWF))
+ .addConst ("FLAC", ARDOUR::HeaderFormat(FLAC))
.endNamespace ()
.beginNamespace ("InsertMergePolicy")
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index df228cb69e..ac10f94ae1 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -133,6 +133,15 @@ SndFileSource::SndFileSource (Session& s, const string& path, const string& orig
_flags = Flag (_flags & ~Broadcast);
break;
+ case FLAC:
+ fmt = SF_FORMAT_FLAC;
+ if (sfmt == FormatFloat) {
+ sfmt = FormatInt24;
+ }
+ _flags = Flag (_flags & ~Broadcast);
+ _flags = Flag (_flags & ~Destructive); // XXX or force WAV if destructive?
+ break;
+
case AIFF:
fmt = SF_FORMAT_AIFF;
_flags = Flag (_flags & ~Broadcast);
@@ -384,8 +393,8 @@ SndFileSource::open ()
}
if ((_info.format & SF_FORMAT_TYPEMASK ) == SF_FORMAT_FLAC) {
- assert (!writable());
- _sndfile = sf_open_fd (fd, SFM_READ, &_info, true);
+ assert (!destructive());
+ _sndfile = sf_open_fd (fd, writable () ? SFM_WRITE : SFM_READ, &_info, true);
} else {
_sndfile = sf_open_fd (fd, writable() ? SFM_RDWR : SFM_READ, &_info, true);
}
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index dd893f399d..96a1b8a2e4 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -568,6 +568,8 @@ ARDOUR::native_header_format_extension (HeaderFormat hf, const DataType& type)
return ".aif";
case iXML:
return ".ixml";
+ case FLAC:
+ return ".flac";
case RF64:
case RF64_WAV:
case MBWF: