38 #define SW_VOLUME_RANGE 40
40 static pthread_mutex_t
mutex_major = PTHREAD_MUTEX_INITIALIZER;
41 static pthread_mutex_t
mutex_minor = PTHREAD_MUTEX_INITIALIZER;
43 #define LOCK_MAJOR pthread_mutex_lock (& mutex_major)
44 #define UNLOCK_MAJOR pthread_mutex_unlock (& mutex_major)
45 #define LOCK_MINOR pthread_mutex_lock (& mutex_minor)
46 #define UNLOCK_MINOR pthread_mutex_unlock (& mutex_minor)
47 #define LOCK_ALL do { LOCK_MAJOR; LOCK_MINOR; } while (0)
48 #define UNLOCK_ALL do { UNLOCK_MINOR; UNLOCK_MAJOR; } while (0)
71 static inline int FR2MS (int64_t f,
int r)
72 {
return (f > 0) ? (f * 1000 + r / 2) / r : (f * 1000 - r / 2) / r; }
161 float factor = powf (10,
get_double (
NULL,
"replay_gain_preamp") / 20);
169 factor *= powf (10, gain_info.
album_gain / 20);
174 factor *= powf (10, gain_info.
track_gain / 20);
178 if (
get_bool (
NULL,
"enable_clipping_prevention") && peak * factor > 1)
184 if (factor < 0.99 || factor > 1.01)
196 if (l == 100 && r == 100)
199 float lfactor = (l == 0) ? 0 : powf (10, (
float)
SW_VOLUME_RANGE * (l - 100) / 100 / 20);
200 float rfactor = (r == 0) ? 0 : powf (10, (
float)
SW_VOLUME_RANGE * (r - 100) / 100 / 20);
205 factors[0] = lfactor;
206 factors[1] = rfactor;
211 factors[c] =
MAX (lfactor, rfactor);
220 void * buffer =
NULL;
249 ready =
MIN (ready, samples);
280 void * buffer =
NULL;
290 buffer = malloc (
sizeof (
float) * samples);
295 float * fdata = data;
316 if (rate < 1 || channels < 1)
352 AUDDBG (
"Replay Gain info:\n");
451 int time = 0, delay = 0;
546 * left = * right = 0;
void output_close_audio(void)
static void write_output_raw(void *data, int samples)
bool_t(* open_audio)(int format, int rate, int chans)
static int get_format(void)
void output_set_replaygain_info(const ReplayGainInfo *info)
static int FR2MS(int64_t f, int r)
int effect_adjust_delay(int delay)
static bool_t s_resetting
void(* write_audio)(void *data, int size)
static void setup_output(void)
EXPORT void audio_from_int(const void *in, int format, float *out, int samples)
PluginHandle * output_plugin_get_current(void)
static void write_output(void *data, int size)
double get_double(const char *section, const char *name)
int output_get_time(void)
void eq_filter(float *data, int samples)
#define PLUGIN_HAS_FUNC(p, func)
void effect_process(float **data, int *samples)
static OutputPlugin * cop
void effect_finish(float **data, int *samples)
static void finish_effects(void)
void(* set_volume)(int l, int r)
static ReplayGainInfo gain_info
void output_abort_write(void)
void(* period_wait)(void)
static void apply_pause(void)
const void * plugin_get_header(PluginHandle *plugin)
static void flush_output(void)
EXPORT void audio_soft_clip(float *data, int samples)
void vis_runner_start_stop(bool_t new_playing, bool_t new_paused)
void output_set_volume(int left, int right)
void vis_runner_pass_audio(int time, float *data, int samples, int channels, int rate)
void set_int(const char *section, const char *name, int value)
static bool_t probe_cb(PluginHandle *p, PluginHandle **pp)
static int64_t out_frames
int output_get_raw_time(void)
void(* get_volume)(int *l, int *r)
bool_t(* PluginForEachFunc)(PluginHandle *plugin, void *data)
void effect_start(int *channels, int *rate)
bool_t get_bool(const char *section, const char *name)
bool_t output_open_audio(int format, int rate, int channels)
int output_written_time(void)
void vis_runner_flush(void)
static void apply_replay_gain(float *data, int samples)
static OutputPlugin * new_op
bool_t output_plugin_set_current(PluginHandle *plugin)
static void apply_software_volume(float *data, int channels, int samples)
#define event_queue(n, d)
static pthread_mutex_t mutex_major
EXPORT void audio_amplify(float *data, int channels, int frames, float *factors)
void output_reset(int type)
void output_get_volume(int *left, int *right)
static void cleanup_output(void)
int get_int(const char *section, const char *name)
void output_write_audio(void *data, int size)
bool_t output_is_open(void)
static pthread_mutex_t mutex_minor
void data PluginHandle plugin
EXPORT void audio_to_int(const float *in, void *out, int format, int samples)
void plugin_for_each(int type, PluginForEachFunc func, void *data)
PluginHandle * plugin_by_header(const void *header)
PluginHandle * output_plugin_probe(void)
void(* close_audio)(void)
void output_set_time(int time)
void eq_set_format(int new_channels, int new_rate)
void output_pause(bool_t pause)