1# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*- 2# 3# Copyright (C) 2010 Jonathan Matthew 4# 5# This program is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 2, or (at your option) 8# any later version. 9# 10# The Rhythmbox authors hereby grant permission for non-GPL compatible 11# GStreamer plugins to be used and distributed together with GStreamer 12# and Rhythmbox. This permission is above and beyond the permissions granted 13# by the GPL license by which Rhythmbox is covered. If you modify this code 14# you may extend this exception to your version of the code, but you are not 15# obligated to do so. If you do not wish to do so, delete this exception 16# statement from your version. 17# 18# This program is distributed in the hope that it will be useful, 19# but WITHOUT ANY WARRANTY; without even the implied warranty of 20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21# GNU General Public License for more details. 22# 23# You should have received a copy of the GNU General Public License 24# along with this program; if not, write to the Free Software 25# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 26# 27 28import rb 29from gi.repository import Gtk, Gio, GObject, PeasGtk 30from gi.repository import RB 31 32import gettext 33gettext.install('rhythmbox', RB.locale_dir()) 34 35# modes 36REPLAYGAIN_MODE_RADIO = 0 37REPLAYGAIN_MODE_ALBUM = 1 38 39# number of samples to keep for calculating the average gain 40# to apply for tracks that aren't tagged 41AVERAGE_GAIN_SAMPLES = 10 42 43class ReplayGainConfig(GObject.Object, PeasGtk.Configurable): 44 __gtype_name__ = 'ReplayGainConfig' 45 object = GObject.property(type=GObject.Object) 46 47 def do_create_configure_widget(self): 48 self.settings = Gio.Settings.new("org.gnome.rhythmbox.plugins.replaygain") 49 50 ui_file = rb.find_plugin_file(self, "replaygain-prefs.ui") 51 self.builder = Gtk.Builder() 52 self.builder.add_from_file(ui_file) 53 54 content = self.builder.get_object("replaygain-prefs") 55 56 combo = self.builder.get_object("replaygainmode") 57 combo.props.id_column = 1 58 self.settings.bind("mode", combo, "active-id", Gio.SettingsBindFlags.DEFAULT) 59 60 preamp = self.builder.get_object("preamp") 61 self.settings.bind("preamp", preamp.props.adjustment, "value", Gio.SettingsBindFlags.GET) 62 preamp.connect("value-changed", self.preamp_changed_cb) 63 64 preamp.add_mark(-15.0, Gtk.PositionType.BOTTOM, _("-15.0 dB")) 65 preamp.add_mark(0.0, Gtk.PositionType.BOTTOM, _("0.0 dB")) 66 preamp.add_mark(15.0, Gtk.PositionType.BOTTOM, _("15.0 dB")) 67 68 limiter = self.builder.get_object("limiter") 69 self.settings.bind("limiter", limiter, "active", Gio.SettingsBindFlags.DEFAULT) 70 71 return content 72 73 def preamp_changed_cb(self, preamp): 74 RB.settings_delayed_sync(self.settings, self.sync_preamp, preamp) 75 76 def sync_preamp(self, settings, preamp): 77 v = preamp.get_value() 78 print("preamp gain changed to %f" % v) 79 settings['preamp'] = v 80 81GObject.type_register(ReplayGainConfig) 82