fix double promotions
Found with -Wdouble-promotion Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
parent
fd71514068
commit
6d91b5c7b2
@ -23,24 +23,23 @@
|
|||||||
#include "util/Math.hxx"
|
#include "util/Math.hxx"
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <cstdlib>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
static float
|
static float
|
||||||
ParsePreamp(const char *s)
|
ParsePreamp(const char *s)
|
||||||
{
|
{
|
||||||
assert(s != nullptr);
|
assert(s != nullptr);
|
||||||
|
|
||||||
char *endptr;
|
char *endptr;
|
||||||
float f = strtod(s, &endptr);
|
float f = std::strtof(s, &endptr);
|
||||||
if (endptr == s || *endptr != '\0')
|
if (endptr == s || *endptr != '\0')
|
||||||
throw std::invalid_argument("Not a numeric value");
|
throw std::invalid_argument("Not a numeric value");
|
||||||
|
|
||||||
if (f < -15 || f > 15)
|
if (f < -15.0f || f > 15.0f)
|
||||||
throw std::invalid_argument("Number must be between -15 and 15");
|
throw std::invalid_argument("Number must be between -15 and 15");
|
||||||
|
|
||||||
return pow(10, f / 20.0);
|
return std::pow(10.0f, f / 20.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReplayGainConfig
|
ReplayGainConfig
|
||||||
@ -51,13 +50,13 @@ LoadReplayGainConfig(const ConfigData &config)
|
|||||||
replay_gain_config.preamp = config.With(ConfigOption::REPLAYGAIN_PREAMP, [](const char *s){
|
replay_gain_config.preamp = config.With(ConfigOption::REPLAYGAIN_PREAMP, [](const char *s){
|
||||||
return s != nullptr
|
return s != nullptr
|
||||||
? ParsePreamp(s)
|
? ParsePreamp(s)
|
||||||
: 1.0;
|
: 1.0f;
|
||||||
});
|
});
|
||||||
|
|
||||||
replay_gain_config.missing_preamp = config.With(ConfigOption::REPLAYGAIN_MISSING_PREAMP, [](const char *s){
|
replay_gain_config.missing_preamp = config.With(ConfigOption::REPLAYGAIN_MISSING_PREAMP, [](const char *s){
|
||||||
return s != nullptr
|
return s != nullptr
|
||||||
? ParsePreamp(s)
|
? ParsePreamp(s)
|
||||||
: 1.0;
|
: 1.0f;
|
||||||
});
|
});
|
||||||
|
|
||||||
replay_gain_config.limit = config.GetBool(ConfigOption::REPLAYGAIN_LIMIT,
|
replay_gain_config.limit = config.GetBool(ConfigOption::REPLAYGAIN_LIMIT,
|
||||||
|
@ -27,13 +27,13 @@ ReplayGainTuple::CalculateScale(const ReplayGainConfig &config) const noexcept
|
|||||||
float scale;
|
float scale;
|
||||||
|
|
||||||
if (IsDefined()) {
|
if (IsDefined()) {
|
||||||
scale = pow(10.0, gain / 20.0);
|
scale = std::pow(10.0f, gain / 20.0f);
|
||||||
scale *= config.preamp;
|
scale *= config.preamp;
|
||||||
if (scale > 15.0)
|
if (scale > 15.0f)
|
||||||
scale = 15.0;
|
scale = 15.0f;
|
||||||
|
|
||||||
if (config.limit && scale * peak > 1.0)
|
if (config.limit && scale * peak > 1.0f)
|
||||||
scale = 1.0 / peak;
|
scale = 1.0f / peak;
|
||||||
} else
|
} else
|
||||||
scale = config.missing_preamp;
|
scale = config.missing_preamp;
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
|
|||||||
partition.name.c_str(),
|
partition.name.c_str(),
|
||||||
(unsigned long)playlist.GetVersion(),
|
(unsigned long)playlist.GetVersion(),
|
||||||
playlist.GetLength(),
|
playlist.GetLength(),
|
||||||
pc.GetMixRampDb(),
|
(double)pc.GetMixRampDb(),
|
||||||
state);
|
state);
|
||||||
|
|
||||||
if (pc.GetCrossFade() > FloatDuration::zero())
|
if (pc.GetCrossFade() > FloatDuration::zero())
|
||||||
|
@ -611,7 +611,7 @@ DecoderBridge::SubmitReplayGain(const ReplayGainInfo *new_replay_gain_info) noex
|
|||||||
const auto &tuple = new_replay_gain_info->Get(rgm);
|
const auto &tuple = new_replay_gain_info->Get(rgm);
|
||||||
const auto scale =
|
const auto scale =
|
||||||
tuple.CalculateScale(dc.replay_gain_config);
|
tuple.CalculateScale(dc.replay_gain_config);
|
||||||
dc.replay_gain_db = 20.0 * std::log10(scale);
|
dc.replay_gain_db = 20.0f * std::log10(scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
replay_gain_info = *new_replay_gain_info;
|
replay_gain_info = *new_replay_gain_info;
|
||||||
|
@ -585,8 +585,8 @@ parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen) noexcept
|
|||||||
|
|
||||||
mad_bit_skip(ptr, 16);
|
mad_bit_skip(ptr, 16);
|
||||||
|
|
||||||
lame->peak = mad_f_todouble(mad_bit_read(ptr, 32) << 5); /* peak */
|
lame->peak = MAD_F(mad_bit_read(ptr, 32) << 5); /* peak */
|
||||||
FormatDebug(mad_domain, "LAME peak found: %f", lame->peak);
|
FormatDebug(mad_domain, "LAME peak found: %f", double(lame->peak));
|
||||||
|
|
||||||
lame->track_gain = 0;
|
lame->track_gain = 0;
|
||||||
unsigned name = mad_bit_read(ptr, 3); /* gain name */
|
unsigned name = mad_bit_read(ptr, 3); /* gain name */
|
||||||
@ -594,9 +594,9 @@ parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen) noexcept
|
|||||||
unsigned sign = mad_bit_read(ptr, 1); /* sign bit */
|
unsigned sign = mad_bit_read(ptr, 1); /* sign bit */
|
||||||
int gain = mad_bit_read(ptr, 9); /* gain*10 */
|
int gain = mad_bit_read(ptr, 9); /* gain*10 */
|
||||||
if (gain && name == 1 && orig != 0) {
|
if (gain && name == 1 && orig != 0) {
|
||||||
lame->track_gain = ((sign ? -gain : gain) / 10.0) + adj;
|
lame->track_gain = ((sign ? -gain : gain) / 10.0f) + adj;
|
||||||
FormatDebug(mad_domain, "LAME track gain found: %f",
|
FormatDebug(mad_domain, "LAME track gain found: %f",
|
||||||
lame->track_gain);
|
double(lame->track_gain));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tmz reports that this isn't currently written by any version of lame
|
/* tmz reports that this isn't currently written by any version of lame
|
||||||
@ -612,7 +612,7 @@ parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen) noexcept
|
|||||||
if (gain && name == 2 && orig != 0) {
|
if (gain && name == 2 && orig != 0) {
|
||||||
lame->album_gain = ((sign ? -gain : gain) / 10.0) + adj;
|
lame->album_gain = ((sign ? -gain : gain) / 10.0) + adj;
|
||||||
FormatDebug(mad_domain, "LAME album gain found: %f",
|
FormatDebug(mad_domain, "LAME album gain found: %f",
|
||||||
lame->track_gain);
|
double(lame->track_gain));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
mad_bit_skip(ptr, 16);
|
mad_bit_skip(ptr, 16);
|
||||||
@ -746,7 +746,7 @@ MadDecoder::DecodeFirstFrame(Tag *tag) noexcept
|
|||||||
/* Album gain isn't currently used. See comment in
|
/* Album gain isn't currently used. See comment in
|
||||||
* parse_lame() for details. -- jat */
|
* parse_lame() for details. -- jat */
|
||||||
if (client != nullptr && !found_replay_gain &&
|
if (client != nullptr && !found_replay_gain &&
|
||||||
lame.track_gain) {
|
lame.track_gain > 0.0f) {
|
||||||
ReplayGainInfo rgi;
|
ReplayGainInfo rgi;
|
||||||
rgi.Clear();
|
rgi.Clear();
|
||||||
rgi.track.gain = lame.track_gain;
|
rgi.track.gain = lame.track_gain;
|
||||||
|
@ -61,7 +61,7 @@ ScanOneOpusTag(StringView name, StringView value,
|
|||||||
const char *endptr;
|
const char *endptr;
|
||||||
const auto l = ParseInt64(value, &endptr, 10);
|
const auto l = ParseInt64(value, &endptr, 10);
|
||||||
if (endptr > value.begin() && endptr == value.end())
|
if (endptr > value.begin() && endptr == value.end())
|
||||||
rgi->track.gain = double(l) / 256.;
|
rgi->track.gain = float(l) / 256.0f;
|
||||||
} else if (rgi != nullptr &&
|
} else if (rgi != nullptr &&
|
||||||
name.EqualsIgnoreCase("R128_ALBUM_GAIN")) {
|
name.EqualsIgnoreCase("R128_ALBUM_GAIN")) {
|
||||||
/* R128_ALBUM_GAIN is a Q7.8 fixed point number in
|
/* R128_ALBUM_GAIN is a Q7.8 fixed point number in
|
||||||
@ -70,7 +70,7 @@ ScanOneOpusTag(StringView name, StringView value,
|
|||||||
const char *endptr;
|
const char *endptr;
|
||||||
const auto l = ParseInt64(value, &endptr, 10);
|
const auto l = ParseInt64(value, &endptr, 10);
|
||||||
if (endptr > value.begin() && endptr == value.end())
|
if (endptr > value.begin() && endptr == value.end())
|
||||||
rgi->album.gain = double(l) / 256.;
|
rgi->album.gain = float(l) / 256.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.OnPair(name, value);
|
handler.OnPair(name, value);
|
||||||
|
@ -76,9 +76,9 @@ PreparedLameEncoder::PreparedLameEncoder(const ConfigBlock &block)
|
|||||||
if (value != nullptr) {
|
if (value != nullptr) {
|
||||||
/* a quality was configured (VBR) */
|
/* a quality was configured (VBR) */
|
||||||
|
|
||||||
quality = ParseDouble(value, &endptr);
|
quality = float(ParseDouble(value, &endptr));
|
||||||
|
|
||||||
if (*endptr != '\0' || quality < -1.0 || quality > 10.0)
|
if (*endptr != '\0' || quality < -1.0f || quality > 10.0f)
|
||||||
throw FormatRuntimeError("quality \"%s\" is not a number in the "
|
throw FormatRuntimeError("quality \"%s\" is not a number in the "
|
||||||
"range -1 to 10",
|
"range -1 to 10",
|
||||||
value);
|
value);
|
||||||
@ -110,13 +110,13 @@ static void
|
|||||||
lame_encoder_setup(lame_global_flags *gfp, float quality, int bitrate,
|
lame_encoder_setup(lame_global_flags *gfp, float quality, int bitrate,
|
||||||
const AudioFormat &audio_format)
|
const AudioFormat &audio_format)
|
||||||
{
|
{
|
||||||
if (quality >= -1.0) {
|
if (quality >= -1.0f) {
|
||||||
/* a quality was configured (VBR) */
|
/* a quality was configured (VBR) */
|
||||||
|
|
||||||
if (0 != lame_set_VBR(gfp, vbr_rh))
|
if (0 != lame_set_VBR(gfp, vbr_rh))
|
||||||
throw std::runtime_error("error setting lame VBR mode");
|
throw std::runtime_error("error setting lame VBR mode");
|
||||||
|
|
||||||
if (0 != lame_set_VBR_q(gfp, quality))
|
if (0 != lame_set_VBR_q(gfp, int(quality)))
|
||||||
throw std::runtime_error("error setting lame VBR quality");
|
throw std::runtime_error("error setting lame VBR quality");
|
||||||
} else {
|
} else {
|
||||||
/* a bit rate was configured */
|
/* a bit rate was configured */
|
||||||
|
@ -94,9 +94,9 @@ PreparedTwolameEncoder::PreparedTwolameEncoder(const ConfigBlock &block)
|
|||||||
if (value != nullptr) {
|
if (value != nullptr) {
|
||||||
/* a quality was configured (VBR) */
|
/* a quality was configured (VBR) */
|
||||||
|
|
||||||
quality = ParseDouble(value, &endptr);
|
quality = float(ParseDouble(value, &endptr));
|
||||||
|
|
||||||
if (*endptr != '\0' || quality < -1.0 || quality > 10.0)
|
if (*endptr != '\0' || quality < -1.0f || quality > 10.0f)
|
||||||
throw FormatRuntimeError("quality \"%s\" is not a number in the "
|
throw FormatRuntimeError("quality \"%s\" is not a number in the "
|
||||||
"range -1 to 10",
|
"range -1 to 10",
|
||||||
value);
|
value);
|
||||||
@ -131,7 +131,7 @@ static void
|
|||||||
twolame_encoder_setup(twolame_options *options, float quality, int bitrate,
|
twolame_encoder_setup(twolame_options *options, float quality, int bitrate,
|
||||||
const AudioFormat &audio_format)
|
const AudioFormat &audio_format)
|
||||||
{
|
{
|
||||||
if (quality >= -1.0) {
|
if (quality >= -1.0f) {
|
||||||
/* a quality was configured (VBR) */
|
/* a quality was configured (VBR) */
|
||||||
|
|
||||||
if (0 != twolame_set_VBR(options, true))
|
if (0 != twolame_set_VBR(options, true))
|
||||||
|
@ -84,7 +84,7 @@ PreparedVorbisEncoder::PreparedVorbisEncoder(const ConfigBlock &block)
|
|||||||
char *endptr;
|
char *endptr;
|
||||||
quality = ParseDouble(value, &endptr);
|
quality = ParseDouble(value, &endptr);
|
||||||
|
|
||||||
if (*endptr != '\0' || quality < -1.0 || quality > 10.0)
|
if (*endptr != '\0' || quality < -1.0f || quality > 10.0f)
|
||||||
throw FormatRuntimeError("quality \"%s\" is not a number in the "
|
throw FormatRuntimeError("quality \"%s\" is not a number in the "
|
||||||
"range -1 to 10",
|
"range -1 to 10",
|
||||||
value);
|
value);
|
||||||
@ -122,13 +122,13 @@ VorbisEncoder::VorbisEncoder(float quality, int bitrate,
|
|||||||
_audio_format.format = SampleFormat::FLOAT;
|
_audio_format.format = SampleFormat::FLOAT;
|
||||||
audio_format = _audio_format;
|
audio_format = _audio_format;
|
||||||
|
|
||||||
if (quality >= -1.0) {
|
if (quality >= -1.0f) {
|
||||||
/* a quality was configured (VBR) */
|
/* a quality was configured (VBR) */
|
||||||
|
|
||||||
if (0 != vorbis_encode_init_vbr(&vi,
|
if (0 != vorbis_encode_init_vbr(&vi,
|
||||||
audio_format.channels,
|
audio_format.channels,
|
||||||
audio_format.sample_rate,
|
audio_format.sample_rate,
|
||||||
quality * 0.1)) {
|
quality * 0.1f)) {
|
||||||
vorbis_info_clear(&vi);
|
vorbis_info_clear(&vi);
|
||||||
throw std::runtime_error("error initializing vorbis vbr");
|
throw std::runtime_error("error initializing vorbis vbr");
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ VorbisEncoder::VorbisEncoder(float quality, int bitrate,
|
|||||||
if (0 != vorbis_encode_init(&vi,
|
if (0 != vorbis_encode_init(&vi,
|
||||||
audio_format.channels,
|
audio_format.channels,
|
||||||
audio_format.sample_rate, -1.0,
|
audio_format.sample_rate, -1.0,
|
||||||
bitrate * 1000, -1.0)) {
|
bitrate * 1000, -1.0f)) {
|
||||||
vorbis_info_clear(&vi);
|
vorbis_info_clear(&vi);
|
||||||
throw std::runtime_error("error initializing vorbis encoder");
|
throw std::runtime_error("error initializing vorbis encoder");
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ public:
|
|||||||
double _volume_scale_factor)
|
double _volume_scale_factor)
|
||||||
:Mixer(pulse_mixer_plugin, _listener),
|
:Mixer(pulse_mixer_plugin, _listener),
|
||||||
output(_output),
|
output(_output),
|
||||||
volume_scale_factor(_volume_scale_factor)
|
volume_scale_factor(float(_volume_scale_factor))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,7 +173,7 @@ parse_volume_scale_factor(const char *value) {
|
|||||||
char *endptr;
|
char *endptr;
|
||||||
float factor = ParseFloat(value, &endptr);
|
float factor = ParseFloat(value, &endptr);
|
||||||
|
|
||||||
if (endptr == value || *endptr != '\0' || factor < 0.5 || factor > 5.0)
|
if (endptr == value || *endptr != '\0' || factor < 0.5f || factor > 5.0f)
|
||||||
throw FormatRuntimeError("\"%s\" is not a number in the "
|
throw FormatRuntimeError("\"%s\" is not a number in the "
|
||||||
"range 0.5 to 5.0",
|
"range 0.5 to 5.0",
|
||||||
value);
|
value);
|
||||||
@ -188,7 +188,7 @@ pulse_mixer_init([[maybe_unused]] EventLoop &event_loop, AudioOutput &ao,
|
|||||||
{
|
{
|
||||||
auto &po = (PulseOutput &)ao;
|
auto &po = (PulseOutput &)ao;
|
||||||
float scale = parse_volume_scale_factor(block.GetBlockValue("scale_volume"));
|
float scale = parse_volume_scale_factor(block.GetBlockValue("scale_volume"));
|
||||||
auto *pm = new PulseMixer(po, listener, scale);
|
auto *pm = new PulseMixer(po, listener, (double)scale);
|
||||||
|
|
||||||
pulse_output_set_mixer(po, *pm);
|
pulse_output_set_mixer(po, *pm);
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ PulseMixer::GetVolume()
|
|||||||
int
|
int
|
||||||
PulseMixer::GetVolumeInternal()
|
PulseMixer::GetVolumeInternal()
|
||||||
{
|
{
|
||||||
pa_volume_t max_pa_volume = volume_scale_factor * PA_VOLUME_NORM;
|
pa_volume_t max_pa_volume = pa_volume_t(volume_scale_factor * PA_VOLUME_NORM);
|
||||||
return online ?
|
return online ?
|
||||||
(int)((100 * (pa_cvolume_avg(&volume) + 1)) / max_pa_volume)
|
(int)((100 * (pa_cvolume_avg(&volume) + 1)) / max_pa_volume)
|
||||||
: -1;
|
: -1;
|
||||||
@ -228,7 +228,7 @@ PulseMixer::SetVolume(unsigned new_volume)
|
|||||||
if (!online)
|
if (!online)
|
||||||
throw std::runtime_error("disconnected");
|
throw std::runtime_error("disconnected");
|
||||||
|
|
||||||
pa_volume_t max_pa_volume = volume_scale_factor * PA_VOLUME_NORM;
|
pa_volume_t max_pa_volume = pa_volume_t(volume_scale_factor * PA_VOLUME_NORM);
|
||||||
|
|
||||||
struct pa_cvolume cvolume;
|
struct pa_cvolume cvolume;
|
||||||
pa_cvolume_set(&cvolume, volume.channels,
|
pa_cvolume_set(&cvolume, volume.channels,
|
||||||
|
@ -25,8 +25,6 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
class SoftwareMixer final : public Mixer {
|
class SoftwareMixer final : public Mixer {
|
||||||
Filter *filter = nullptr;
|
Filter *filter = nullptr;
|
||||||
|
|
||||||
@ -72,13 +70,14 @@ PercentVolumeToSoftwareVolume(unsigned volume) noexcept
|
|||||||
{
|
{
|
||||||
assert(volume <= 100);
|
assert(volume <= 100);
|
||||||
|
|
||||||
if (volume >= 100)
|
if (volume == 100)
|
||||||
return PCM_VOLUME_1;
|
return PCM_VOLUME_1;
|
||||||
else if (volume > 0)
|
|
||||||
return pcm_float_to_volume((std::exp(volume / 25.0) - 1) /
|
if (volume > 0)
|
||||||
|
return pcm_float_to_volume((std::exp(volume / 25.0f) - 1) /
|
||||||
(54.5981500331F - 1));
|
(54.5981500331F - 1));
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -195,7 +195,7 @@ AudioOutputSource::FilterChunk(const MusicChunk &chunk)
|
|||||||
only if the mix ratio is non-negative; a
|
only if the mix ratio is non-negative; a
|
||||||
negative mix ratio is a MixRamp special
|
negative mix ratio is a MixRamp special
|
||||||
case */
|
case */
|
||||||
mix_ratio = 1.0 - mix_ratio;
|
mix_ratio = 1.0f - mix_ratio;
|
||||||
|
|
||||||
void *dest = cross_fade_buffer.Get(other_data.size);
|
void *dest = cross_fade_buffer.Get(other_data.size);
|
||||||
memcpy(dest, other_data.data, other_data.size);
|
memcpy(dest, other_data.data, other_data.size);
|
||||||
|
@ -127,7 +127,7 @@ CalculateCtableValue(size_t t, int k, int e) noexcept
|
|||||||
acc += (((e >> (7 - m)) & 1) * 2 - 1) * htaps[t * 8 + m];
|
acc += (((e >> (7 - m)) & 1) * 2 - 1) * htaps[t * 8 + m];
|
||||||
}
|
}
|
||||||
|
|
||||||
return acc;
|
return float(acc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this needs to be a struct because GCC 6 doesn't have constexpr
|
/* this needs to be a struct because GCC 6 doesn't have constexpr
|
||||||
@ -204,9 +204,9 @@ Dsd2Pcm::CalcOutputSample(size_t ffp) const noexcept
|
|||||||
for (size_t i = 0; i < CTABLES; ++i) {
|
for (size_t i = 0; i < CTABLES; ++i) {
|
||||||
uint8_t bite1 = fifo[(ffp -i) & FIFOMASK];
|
uint8_t bite1 = fifo[(ffp -i) & FIFOMASK];
|
||||||
uint8_t bite2 = fifo[(ffp-(CTABLES*2-1)+i) & FIFOMASK];
|
uint8_t bite2 = fifo[(ffp-(CTABLES*2-1)+i) & FIFOMASK];
|
||||||
acc += ctables[i][bite1] + ctables[i][bite2];
|
acc += double(ctables[i][bite1] + ctables[i][bite2]);
|
||||||
}
|
}
|
||||||
return acc;
|
return float(acc);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline float
|
inline float
|
||||||
|
@ -54,7 +54,7 @@ struct IntegerToFloatSampleConvert {
|
|||||||
typedef typename SrcTraits::value_type SV;
|
typedef typename SrcTraits::value_type SV;
|
||||||
typedef typename DstTraits::value_type DV;
|
typedef typename DstTraits::value_type DV;
|
||||||
|
|
||||||
static constexpr DV factor = 1.0 / FloatToIntegerSampleConvert<F, Traits>::factor;
|
static constexpr DV factor = 1.0f / FloatToIntegerSampleConvert<F, Traits>::factor;
|
||||||
static_assert(factor > 0, "Wrong factor");
|
static_assert(factor > 0, "Wrong factor");
|
||||||
|
|
||||||
static constexpr DV Convert(SV src) noexcept {
|
static constexpr DV Convert(SV src) noexcept {
|
||||||
|
@ -221,7 +221,7 @@ pcm_mix(PcmDither &dither, void *buffer1, const void *buffer2, size_t size,
|
|||||||
if (portion1 < 0)
|
if (portion1 < 0)
|
||||||
return pcm_add(buffer1, buffer2, size, format);
|
return pcm_add(buffer1, buffer2, size, format);
|
||||||
|
|
||||||
s = sin(M_PI_2 * portion1);
|
s = std::sin((float)M_PI_2 * portion1);
|
||||||
s *= s;
|
s *= s;
|
||||||
|
|
||||||
int vol1 = lround(s * PCM_VOLUME_1S);
|
int vol1 = lround(s * PCM_VOLUME_1S);
|
||||||
|
@ -123,7 +123,7 @@ SoxrPcmResampler::Open(AudioFormat &af, unsigned new_sample_rate)
|
|||||||
ratio = float(new_sample_rate) / float(af.sample_rate);
|
ratio = float(new_sample_rate) / float(af.sample_rate);
|
||||||
FormatDebug(soxr_domain,
|
FormatDebug(soxr_domain,
|
||||||
"samplerate conversion ratio to %.2lf",
|
"samplerate conversion ratio to %.2lf",
|
||||||
ratio);
|
double(ratio));
|
||||||
|
|
||||||
/* libsoxr works with floating point samples */
|
/* libsoxr works with floating point samples */
|
||||||
af.format = SampleFormat::FLOAT;
|
af.format = SampleFormat::FLOAT;
|
||||||
|
@ -48,7 +48,7 @@ static constexpr int PCM_VOLUME_1S = PCM_VOLUME_1;
|
|||||||
constexpr int
|
constexpr int
|
||||||
pcm_float_to_volume(float volume) noexcept
|
pcm_float_to_volume(float volume) noexcept
|
||||||
{
|
{
|
||||||
return volume * PCM_VOLUME_1 + 0.5;
|
return int(volume * PCM_VOLUME_1 + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr float
|
constexpr float
|
||||||
|
@ -92,7 +92,8 @@ playlist_state_save(BufferedOutputStream &os, const struct playlist &playlist,
|
|||||||
os.Format(PLAYLIST_STATE_FILE_CONSUME "%i\n", playlist.queue.consume);
|
os.Format(PLAYLIST_STATE_FILE_CONSUME "%i\n", playlist.queue.consume);
|
||||||
os.Format(PLAYLIST_STATE_FILE_CROSSFADE "%i\n",
|
os.Format(PLAYLIST_STATE_FILE_CROSSFADE "%i\n",
|
||||||
(int)pc.GetCrossFade().count());
|
(int)pc.GetCrossFade().count());
|
||||||
os.Format(PLAYLIST_STATE_FILE_MIXRAMPDB "%f\n", pc.GetMixRampDb());
|
os.Format(PLAYLIST_STATE_FILE_MIXRAMPDB "%f\n",
|
||||||
|
(double)pc.GetMixRampDb());
|
||||||
os.Format(PLAYLIST_STATE_FILE_MIXRAMPDELAY "%f\n",
|
os.Format(PLAYLIST_STATE_FILE_MIXRAMPDELAY "%f\n",
|
||||||
pc.GetMixRampDelay().count());
|
pc.GetMixRampDelay().count());
|
||||||
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n");
|
os.Write(PLAYLIST_STATE_FILE_PLAYLIST_BEGIN "\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user