Add support for recording to .flac
authorRobin Gareus <robin@gareus.org>
Wed, 7 Nov 2018 18:21:39 +0000 (19:21 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 7 Nov 2018 18:21:39 +0000 (19:21 +0100)
libs/ardour/ardour/types.h
libs/ardour/enums.cc
libs/ardour/luabindings.cc
libs/ardour/sndfilesource.cc
libs/ardour/utils.cc

index 635b78334b4c58a64361f8c90f96a2185f4ed6d7..a9b297d5051ea0605a25c400390a98072122214b 100644 (file)
@@ -543,6 +543,7 @@ enum HeaderFormat {
        RF64,
        RF64_WAV,
        MBWF,
+       FLAC,
 };
 
 struct PeakData {
index 5b7bbe457dfa79b43990b61437040fecec776e61..4ff286a1d7029950e548c2574d72888b2fe0827b 100644 (file)
@@ -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);
index 36c63a92691bea9d60b7667ae4951470f19df645..899e98a7fe3ef466e15ed06da42cde1df5aba320 100644 (file)
@@ -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")
index df228cb69ee6ef29528e80e9578f82b8d00aac52..ac10f94ae12e04f683c073077910ac8df4703a71 100644 (file)
@@ -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);
        }
index dd893f399d576c029dd99b24c6316e46207e99ab..96a1b8a2e43c67b9602277d64b3a6f4ac1696063 100644 (file)
@@ -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: