, _silence_end (s)
, _normalize (false)
- , _normalize_target (1.0)
+ , _normalize_loudness (false)
+ , _normalize_dbfs (GAIN_COEFF_UNITY)
+ , _normalize_lufs (-23)
+ , _normalize_dbtp (-1)
, _with_toc (false)
, _with_cue (false)
+ , _with_mp4chaps (false)
+ , _soundcloud_upload (false)
+ , _command ("")
+ , _analyse (true)
{
format_ids.insert (F_None);
endiannesses.insert (E_FileDefault);
ExportFormatSpecification::ExportFormatSpecification (Session & s, XMLNode const & state)
: session (s)
+
+ , has_sample_format (false)
+ , supports_tagging (false)
+ , _has_broadcast_info (false)
+ , _channel_limit (0)
+ , _dither_type (D_None)
+ , _src_quality (SRC_SincBest)
+ , _tag (true)
+
+ , _trim_beginning (false)
, _silence_beginning (s)
+ , _trim_end (false)
, _silence_end (s)
+
+ , _normalize (false)
+ , _normalize_loudness (false)
+ , _normalize_dbfs (GAIN_COEFF_UNITY)
+ , _normalize_lufs (-23)
+ , _normalize_dbtp (-1)
+ , _with_toc (false)
+ , _with_cue (false)
+ , _with_mp4chaps (false)
+ , _soundcloud_upload (false)
+ , _command ("")
+ , _analyse (true)
{
_silence_beginning.type = Time::Timecode;
_silence_end.type = Time::Timecode;
set_state (state);
}
-ExportFormatSpecification::ExportFormatSpecification (ExportFormatSpecification const & other)
+ExportFormatSpecification::ExportFormatSpecification (ExportFormatSpecification const & other, bool modify_name)
: ExportFormatBase(other)
, session (other.session)
, _silence_beginning (other.session)
, _silence_end (other.session)
+ , _soundcloud_upload (false)
+ , _analyse (other._analyse)
{
- set_name (other.name() + " (copy)");
+ if (modify_name) {
+ set_name (other.name() + " (copy)");
+ } else {
+ set_name (other.name());
+ }
_format_name = other._format_name;
has_sample_format = other.has_sample_format;
set_trim_beginning (other.trim_beginning());
set_trim_end (other.trim_end());
set_normalize (other.normalize());
- set_normalize_target (other.normalize_target());
+ set_normalize_loudness (other.normalize_loudness());
+ set_normalize_dbfs (other.normalize_dbfs());
+ set_normalize_lufs (other.normalize_lufs());
+ set_normalize_dbtp (other.normalize_dbtp());
set_tag (other.tag());
XMLNode &
ExportFormatSpecification::get_state ()
{
+ LocaleGuard lg;
XMLNode * node;
XMLNode * root = new XMLNode ("ExportFormatSpecification");
root->add_property ("id", _id.to_s());
root->add_property ("with-cue", _with_cue ? "true" : "false");
root->add_property ("with-toc", _with_toc ? "true" : "false");
+ root->add_property ("with-mp4chaps", _with_mp4chaps ? "true" : "false");
+ root->add_property ("command", _command);
node = root->add_child ("Encoding");
node->add_property ("id", enum_2_string (format_id()));
node = processing->add_child ("Normalize");
node->add_property ("enabled", normalize() ? "true" : "false");
- node->add_property ("target", to_string (normalize_target(), std::dec));
+ node->add_property ("loudness", normalize_loudness() ? "yes" : "no");
+ node->add_property ("dbfs", to_string (normalize_dbfs(), std::dec));
+ node->add_property ("lufs", to_string (normalize_lufs(), std::dec));
+ node->add_property ("dbtp", to_string (normalize_dbtp(), std::dec));
XMLNode * silence = processing->add_child ("Silence");
XMLNode * start = silence->add_child ("Start");
XMLProperty const * prop;
XMLNode const * child;
string value;
+ LocaleGuard lg;
if ((prop = root.property ("name"))) {
_name = prop->value();
} else {
_with_cue = false;
}
-
+
if ((prop = root.property ("with-toc"))) {
_with_toc = string_is_affirmative (prop->value());
} else {
_with_toc = false;
}
-
+
+ if ((prop = root.property ("with-mp4chaps"))) {
+ _with_mp4chaps = string_is_affirmative (prop->value());
+ } else {
+ _with_mp4chaps = false;
+ }
+
+ if ((prop = root.property ("command"))) {
+ _command = prop->value();
+ } else {
+ _command = "";
+ }
+
/* Encoding and SRC */
if ((child = root.child ("Encoding"))) {
_normalize = (!prop->value().compare ("true"));
}
+ // old formats before ~ 4.7-930ish
if ((prop = child->property ("target"))) {
- _normalize_target = atof (prop->value());
+ _normalize_dbfs = atof (prop->value());
+ }
+
+ if ((prop = child->property ("loudness"))) {
+ _normalize_loudness = string_is_affirmative (prop->value());
+ }
+
+ if ((prop = child->property ("dbfs"))) {
+ _normalize_dbfs = atof (prop->value());
+ }
+
+ if ((prop = child->property ("lufs"))) {
+ _normalize_lufs = atof (prop->value());
+ }
+
+ if ((prop = child->property ("dbtp"))) {
+ _normalize_dbtp = atof (prop->value());
}
}
list<string> components;
if (_normalize) {
- components.push_back (_("normalize"));
+ if (_normalize_loudness) {
+ components.push_back (_("normalize loudness"));
+ } else {
+ components.push_back (_("normalize peak"));
+ }
}
if (_trim_beginning && _trim_end) {
case SR_96:
components.push_back ("96 kHz");
break;
+ case SR_176_4:
+ components.push_back ("176.4 kHz");
+ break;
case SR_192:
components.push_back ("192 kHz");
break;
components.push_back ("CUE");
}
+ if (_with_mp4chaps) {
+ components.push_back ("MP4ch");
+ }
+
+ if (!_command.empty()) {
+ components.push_back ("+");
+ }
+
string desc;
if (include_name) {
desc = _name + ": ";
XMLNodeList list (node->children ("Option"));
for (XMLNodeList::iterator it = list.begin(); it != list.end(); ++it) {
- XMLProperty * prop = (*it)->property ("name");
+ XMLProperty const * prop = (*it)->property ("name");
if (prop && !name.compare (prop->value())) {
prop = (*it)->property ("value");
if (prop) {