From 75518e16a2c35400ac641975c74ff72b404cef69 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 18 Aug 2013 23:19:22 +0100 Subject: [PATCH] Try to make audio gain work again. --- src/lib/audio_buffers.cc | 13 +++++++++++++ src/lib/audio_buffers.h | 2 ++ src/lib/player.cc | 7 +++++++ 3 files changed, 22 insertions(+) diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc index a15288a3b..e80142b8e 100644 --- a/src/lib/audio_buffers.cc +++ b/src/lib/audio_buffers.cc @@ -19,6 +19,7 @@ #include #include +#include #include #include "audio_buffers.h" @@ -260,3 +261,15 @@ AudioBuffers::accumulate_frames (AudioBuffers const * from, int read_offset, int } } +/** @param dB gain in dB */ +void +AudioBuffers::apply_gain (float dB) +{ + float const linear = pow (10, dB / 20); + + for (int i = 0; i < _channels; ++i) { + for (int j = 0; j < _frames; ++j) { + _data[i][j] *= linear; + } + } +} diff --git a/src/lib/audio_buffers.h b/src/lib/audio_buffers.h index 0950f5d67..75bc686f8 100644 --- a/src/lib/audio_buffers.h +++ b/src/lib/audio_buffers.h @@ -57,6 +57,8 @@ public: void make_silent (int c); void make_silent (int from, int frames); + void apply_gain (float); + void copy_from (AudioBuffers const * from, int frames_to_copy, int read_offset, int write_offset); void move (int from, int to, int frames); void accumulate_channel (AudioBuffers const *, int, int); diff --git a/src/lib/player.cc b/src/lib/player.cc index f8ccb0142..ebc810214 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -300,6 +300,13 @@ Player::process_audio (weak_ptr weak_piece, shared_ptr content = dynamic_pointer_cast (piece->content); assert (content); + /* Gain */ + if (content->audio_gain() != 0) { + shared_ptr gain (new AudioBuffers (audio)); + gain->apply_gain (content->audio_gain ()); + audio = gain; + } + /* Resample */ if (content->content_audio_frame_rate() != content->output_audio_frame_rate()) { shared_ptr r = resampler (content, true); -- 2.30.2