annotate foosdk/sdk/foobar2000/SDK/replaygain.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "replaygain.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "replaygain_scanner.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 void t_replaygain_config::reset()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 m_source_mode = source_mode_none;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 m_processing_mode = processing_mode_none;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 m_preamp_without_rg = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 m_preamp_with_rg = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 audio_sample t_replaygain_config::query_scale(const file_info & info) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 return query_scale(info.get_replaygain());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 audio_sample t_replaygain_config::query_scale(const replaygain_info & info) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 const audio_sample peak_margin = 1.0;//used to be 0.999 but it must not trigger on lossless
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 audio_sample peak = peak_margin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 audio_sample gain = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 bool have_rg_gain = false, have_rg_peak = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 if (m_source_mode == source_mode_track || m_source_mode == source_mode_album)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 if (m_source_mode == source_mode_track)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 if (info.is_track_gain_present()) {gain = info.m_track_gain; have_rg_gain = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 else if (info.is_album_gain_present()) {gain = info.m_album_gain; have_rg_gain = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 if (info.is_track_peak_present()) {peak = info.m_track_peak; have_rg_peak = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 else if (info.is_album_peak_present()) {peak = info.m_album_peak; have_rg_peak = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 if (info.is_album_gain_present()) {gain = info.m_album_gain; have_rg_gain = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 else if (info.is_track_gain_present()) {gain = info.m_track_gain; have_rg_gain = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 if (info.is_album_peak_present()) {peak = info.m_album_peak; have_rg_peak = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 else if (info.is_track_peak_present()) {peak = info.m_track_peak; have_rg_peak = true; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 gain += have_rg_gain ? m_preamp_with_rg : m_preamp_without_rg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 audio_sample scale = 1.0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 if (m_processing_mode == processing_mode_gain || m_processing_mode == processing_mode_gain_and_peak)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 scale *= (audio_sample) audio_math::gain_to_scale(gain);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 if ((m_processing_mode == processing_mode_peak || m_processing_mode == processing_mode_gain_and_peak) && have_rg_peak)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 if (scale * peak > peak_margin)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 scale = (audio_sample)(peak_margin / peak);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 return scale;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 audio_sample t_replaygain_config::query_scale(const metadb_handle_ptr & p_object) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 return query_scale(p_object->get_async_info_ref()->info());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 audio_sample replaygain_manager::core_settings_query_scale(const file_info & p_info)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 t_replaygain_config temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 get_core_settings(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 return temp.query_scale(p_info);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 audio_sample replaygain_manager::core_settings_query_scale(const metadb_handle_ptr & info)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 t_replaygain_config temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 get_core_settings(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 return temp.query_scale(info);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 //enum t_source_mode {source_mode_none,source_mode_track,source_mode_album};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 //enum t_processing_mode {processing_mode_none,processing_mode_gain,processing_mode_gain_and_peak,processing_mode_peak};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 static const char* querysign(int val) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 return val < 0 ? "-" : val>0 ? "+" : "\xc2\xb1";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 static pfc::string_fixed_t<128> format_dbdelta(double p_val) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 pfc::string_fixed_t<128> ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 int val = (int)pfc::rint32(p_val * 10);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 ret << querysign(val) << (abs(val) / 10) << "." << (abs(val) % 10) << "dB";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 void t_replaygain_config::print_preamp(double val, pfc::string_base & out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 out = format_dbdelta(val);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 void t_replaygain_config::format_name(pfc::string_base & p_out) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 switch(m_processing_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 case processing_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 p_out = "None.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 case processing_mode_gain:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 switch(m_source_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 case source_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 if (m_preamp_without_rg == 0) p_out = "None.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 else p_out = PFC_string_formatter() << "Preamp : " << format_dbdelta(m_preamp_without_rg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 case source_mode_track:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 pfc::string_formatter fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 fmt << "Apply track gain";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 if (m_preamp_without_rg != 0 || m_preamp_with_rg != 0) fmt << ", with preamp";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 fmt << ".";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 p_out = fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 case source_mode_album:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 pfc::string_formatter fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 fmt << "Apply album gain";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 if (m_preamp_without_rg != 0 || m_preamp_with_rg != 0) fmt << ", with preamp";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 fmt << ".";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 p_out = fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 case processing_mode_gain_and_peak:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 switch(m_source_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 case source_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 if (m_preamp_without_rg >= 0) p_out = "None.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 else p_out = PFC_string_formatter() << "Preamp : " << format_dbdelta(m_preamp_without_rg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 case source_mode_track:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 pfc::string_formatter fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 fmt << "Apply track gain";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 if (m_preamp_without_rg != 0 || m_preamp_with_rg != 0) fmt << ", with preamp";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 fmt << ", prevent clipping according to track peak.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 p_out = fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 case source_mode_album:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 pfc::string_formatter fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 fmt << "Apply album gain";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 if (m_preamp_without_rg != 0 || m_preamp_with_rg != 0) fmt << ", with preamp";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 fmt << ", prevent clipping according to album peak.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 p_out = fmt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 case processing_mode_peak:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 switch(m_source_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 case source_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 p_out = "None.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 case source_mode_track:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 p_out = "Prevent clipping according to track peak.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 case source_mode_album:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 p_out = "Prevent clipping according to album peak.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 bool t_replaygain_config::is_active() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 switch(m_processing_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 case processing_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 case processing_mode_gain:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 switch(m_source_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 case source_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 return m_preamp_without_rg != 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 case source_mode_track:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 case source_mode_album:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 case processing_mode_gain_and_peak:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 switch(m_source_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 case source_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 return m_preamp_without_rg < 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 case source_mode_track:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 case source_mode_album:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 case processing_mode_peak:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 switch(m_source_mode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 case source_mode_none:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 case source_mode_track:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 case source_mode_album:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 replaygain_scanner::ptr replaygain_scanner_entry::instantiate( uint32_t flags ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 replaygain_scanner_entry_v2::ptr p2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 if ( p2 &= this ) return p2->instantiate( flags );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 else return instantiate();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 t_replaygain_config replaygain_manager::get_core_settings() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 t_replaygain_config cfg; get_core_settings(cfg); return cfg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 }